02_单机docker搭建rocketmq集群

本文详细指导如何在一台机器上使用Docker构建RocketMQ集群,包括创建挂载目录、配置多个broker节点、拉取镜像、运行nameserver和broker,并验证集群功能。涉及关键步骤如配置文件编写和环境变量设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 要求

在一台机器上使用docker搭建rocketmq集群(2m2s)

2. 创建挂载目录

mkdir -p /data/rocketmq/{logs-nameserver-m,logs-nameserver-s,logs-a,logs-a-s,logs-b,logs-b-s,conf,store-a,store-b,store-a-s,store-b-s}

chmod -R 777 /data/rocketmq

3. 创建配置文件

在/data/rocketmq/conf目录下创建broker配置文件 并赋777权限(chmod -R 777 文件名)

  1. broker-a.conf
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#所属集群名字,同一个集群名字相同
brokerClusterName=DefaultCluster
#broker名字
brokerName=broker-a
#0表示master >0 表示slave
brokerId=0
#删除文件的时间点,凌晨4点
deleteWhen=04
#文件保留时间 默认是48小时
fileReservedTime=48
#异步复制Master
brokerRole=ASYNC_MASTER
#刷盘方式,ASYNC_FLUSH=异步刷盘,SYNC_FLUSH=同步刷盘 
flushDiskType=ASYNC_FLUSH
#Broker 对外服务的监听端口端口号对应docker启动时候的端口号
listenPort=10911
#nameServer地址,这里nameserver是单台,如果nameserver是多台集群的话,就用分号分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3)
namesrvAddr=192.168.56.10:9876;192.168.56.10:9877
#每个topic对应队列的数量,默认为4,实际应参考consumer实例的数量,值过小不利于consumer负载均衡
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,生产建议关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,生产建议关闭
autoCreateSubscriptionGroup=true
#设置BrokerIP
brokerIP1=192.168.56.10
# 限制的消息⼤⼩
maxMessageSize=65536
# commitLog每个⽂件的⼤⼩默认1G
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每个⽂件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
  1. broker-b.conf
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#所属集群名字,同一个集群名字相同
brokerClusterName=DefaultCluster
#broker名字
brokerName=broker-b
#0表示master >0 表示slave
brokerId=0
#删除文件的时间点,凌晨4点
deleteWhen=04
#文件保留时间 默认是48小时
fileReservedTime=48
#异步复制Master
brokerRole=ASYNC_MASTER
#刷盘方式,ASYNC_FLUSH=异步刷盘,SYNC_FLUSH=同步刷盘 
flushDiskType=ASYNC_FLUSH
#Broker 对外服务的监听端口端口号对应docker启动时候的端口号
listenPort=11912
#nameServer地址,这里nameserver是单台,如果nameserver是多台集群的话,就用分号分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3)
namesrvAddr=192.168.56.10:9876;192.168.56.10:9877
#每个topic对应队列的数量,默认为4,实际应参考consumer实例的数量,值过小不利于consumer负载均衡
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,生产建议关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,生产建议关闭
autoCreateSubscriptionGroup=true
#设置BrokerIP
brokerIP1=192.168.56.10
# 限制的消息⼤⼩
maxMessageSize=65536
# commitLog每个⽂件的⼤⼩默认1G
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每个⽂件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
  1. broker-a-s.conf
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#所属集群名字,同一个集群名字相同
brokerClusterName=DefaultCluster
#broker名字
brokerName=broker-a
#0表示master >0 表示slave
brokerId=1
#删除文件的时间点,凌晨4点
deleteWhen=04
#文件保留时间 默认是48小时
fileReservedTime=48
#Broker 的角色,ASYNC_MASTER=异步复制Master,SYNC_MASTER=同步双写Master,SLAVE=slave节点
brokerRole=SLAVE
#刷盘方式,ASYNC_FLUSH=异步刷盘,SYNC_FLUSH=同步刷盘 
flushDiskType=ASYNC_FLUSH
#Broker 对外服务的监听端口端口号对应docker启动时候的端口号
listenPort=11013
#nameServer地址,这里nameserver是单台,如果nameserver是多台集群的话,就用分号分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3)
namesrvAddr=192.168.56.10:9876;192.168.56.10:9877
#每个topic对应队列的数量,默认为4,实际应参考consumer实例的数量,值过小不利于consumer负载均衡
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,生产建议关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,生产建议关闭
autoCreateSubscriptionGroup=true
#设置BrokerIP
brokerIP1=192.168.56.10
# 限制的消息⼤⼩
maxMessageSize=65536
# commitLog每个⽂件的⼤⼩默认1G
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每个⽂件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
  1. broker-b-s.conf
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#所属集群名字,同一个集群名字相同
brokerClusterName=DefaultCluster
#broker名字
brokerName=broker-b
#0表示master >0 表示slave
brokerId=1
#删除文件的时间点,凌晨4点
deleteWhen=04
#文件保留时间 默认是48小时
fileReservedTime=48
#Broker 的角色,ASYNC_MASTER=异步复制Master,SYNC_MASTER=同步双写Master,SLAVE=slave节点
brokerRole=SLAVE
#刷盘方式,ASYNC_FLUSH=异步刷盘,SYNC_FLUSH=同步刷盘 
flushDiskType=ASYNC_FLUSH
#Broker 对外服务的监听端口端口号对应docker启动时候的端口号
listenPort=11014
#nameServer地址,这里nameserver是单台,如果nameserver是多台集群的话,就用分号分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3)
namesrvAddr=192.168.56.10:9876;192.168.56.10:9877
#每个topic对应队列的数量,默认为4,实际应参考consumer实例的数量,值过小不利于consumer负载均衡
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,生产建议关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,生产建议关闭
autoCreateSubscriptionGroup=true
#设置BrokerIP
brokerIP1=192.168.56.10
# 限制的消息⼤⼩
maxMessageSize=65536
# commitLog每个⽂件的⼤⼩默认1G
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每个⽂件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

4. 拉取镜像

docker pull foxiswho/rocketmq:4.8.0

5. 安装nameserver

#启动 rmqnamesrv-master
docker run -d -v /data/rocketmq/logs-nameserver-m:/home/rocketmq/logs \
--name rmqnamesrv-master \
--restart=always \
-e "JAVA_OPT_EXT=-Xms256M -Xmx256M -Xmn128m" \
-p 9876:9876 \
foxiswho/rocketmq:4.8.0  \
sh mqnamesrv
 
#启动 rmqnamesrv-slave
docker run -d -v /data/rocketmq/logs-nameserver-s:/home/rocketmq/logs \
--name rmqnamesrv-slave \
--restart=always \
-e "JAVA_OPT_EXT=-Xms256M -Xmx256M -Xmn128m" \
-p 9877:9876 \
foxiswho/rocketmq:4.8.0 \
sh mqnamesrv

6. 安装broker

# 启动 mq-a-master
docker run -d    \
--name mq-a-master  \
--restart=always \
-v /data/rocketmq/logs-a:/home/rocketmq/logs \
-v /data/rocketmq/store-a:/home/rocketmq/store \
-v /data/rocketmq/conf/broker-a.conf:/home/rocketmq/rocketmq-4.8.0/conf/broker.conf \
-e "NAMESRV_ADDR=192.168.56.10:9876;192.168.56.10:9877" \
-e "JAVA_OPT_EXT= -server -Xms128M -Xmx128M -Xmn128m" \
-p 10911:10911 \
foxiswho/rocketmq:4.8.0 \
sh mqbroker -c /home/rocketmq/rocketmq-4.8.0/conf/broker.conf
 
#启动 mq-b-master
docker run -d \
--name mq-b-master \
--restart=always \
-v /data/rocketmq/logs-b:/home/rocketmq/logs  \
-v /data/rocketmq/store-b:/home/rocketmq/store \
-v /data/rocketmq/conf/broker-b.conf:/home/rocketmq/rocketmq-4.8.0/conf/broker.conf \
-e "NAMESRV_ADDR=192.168.56.10:9876;192.168.56.10:9877" \
-e "JAVA_OPT_EXT= -server -Xms128M -Xmx128M -Xmn128m" \
-p 11912:11912  \
--privileged=true \
foxiswho/rocketmq:4.8.0 \
sh mqbroker -c /home/rocketmq/rocketmq-4.8.0/conf/broker.conf
 
#启动 mq-a-slave
docker run -d   \
--name mq-a-slave \
--restart=always \
-v /data/rocketmq/logs-a-s:/home/rocketmq/logs \
-v /data/rocketmq/store-a-s:/home/rocketmq/store \
-v /data/rocketmq/conf/broker-a-s.conf:/home/rocketmq/rocketmq-4.8.0/conf/broker.conf \
-e "NAMESRV_ADDR=192.168.56.10:9876;192.168.56.10:9877" \
-e "JAVA_OPT_EXT= -server -Xms128M -Xmx128M -Xmn128m" \
-p  11013:11013 \
foxiswho/rocketmq:4.8.0 \
sh mqbroker -c /home/rocketmq/rocketmq-4.8.0/conf/broker.conf
 
#启动 mq-b-slave
docker run -d  \
--name mq-b-slave \
--restart=always \
-v /data/rocketmq/logs-b-s:/home/rocketmq/logs \
-v /data/rocketmq/store-b-s:/home/rocketmq/store \
-v /data/rocketmq/conf/broker-b-s.conf:/home/rocketmq/rocketmq-4.8.0/conf/broker.conf \
-e "NAMESRV_ADDR=192.168.56.10:9876;192.168.56.10:9877" \
-e "JAVA_OPT_EXT= -server -Xms128M -Xmx128M -Xmn128m" \
-p 11014:11014  \
foxiswho/rocketmq:4.8.0 \
sh mqbroker -c /home/rocketmq/rocketmq-4.8.0/conf/broker.conf

7. 验证

# 拉取rocketmq-console-ng镜像
docker pull styletang/rocketmq-console-ng:1.0.0

# 运行rocketmq-console-ng容器
docker run -d \
--name rmq-console \
--restart=always \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.56.10:9876;192.168.56.10:9877 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
-p 8888:8080 \
styletang/rocketmq-console-ng:1.0.0

在这里插入图片描述

### 使用 Docker 部署 RocketMQ 5.0 的方法 为了通过 Docker 正确部署 RocketMQ 5.0,需要按照以下方式构建并配置各个组件的服务容器。以下是详细的说明: #### 1. 准备前置文件 在开始之前,需准备好 `namesrv` 和 `broker` 的 Dockerfile 文件以及 Dashboard 的相关依赖项。这些文件可以从官方 GitHub 库下载[^1]。 ```bash git clone https://github.com/apache/rocketmq-dashboard.git cd rocketmq-dashboard/ ``` 确保本地已安装 Git 工具以便克隆仓库中的必要文件。 #### 2. 构建 Nameserver 容器 Nameserver 是 RocketMQ 中的核心元数据管理节点之一。可以通过如下命令来启动 Nameserver 容器: ```docker docker run -d \ --name rocketmq-namesrv \ -p 9876:9876 \ -v $(pwd)/data/namesrv/logs:/root/logs \ apache/rocketmq:5.0 namesrv ``` 此命令会拉取 Apache 官方镜像,并指定端口映射为默认的 9876 端口用于外部访问[^4]。 #### 3. 启动 Broker 节点 Broker 主要负责消息的实际存储工作,在分布式环境中通常会有多个实例组成集群形式运作。下面是一个简单的单机版 Broker 初始化例子: ```docker docker run -d \ -e NAMESRV_ADDR="localhost:9876" \ --name rocketmq-broker \ -p 10911:10911 \ -p 10909:10909 \ -v $(pwd)/data/broker/logs:/root/logs \ -v $(pwd)/data/broker/store:/root/store \ apache/rocketmq:5.0 broker -n localhost:9876 ``` 这里设置了两个重要参数 `-e NAMESRV_ADDR` 来告知 Broker 找到对应的 Nameserver 地址;另外还定义了一些持久化路径供日志记录和数据保存之用。 #### 4. 创建 Dashboard 控制面板 Dashboard 提供了一个图形化的界面让用户更方便地监控整个系统的健康状况及性能指标等信息。基于前面提到的内容,可采用如下脚本来完成其初始化过程[^3]: ```sh cat <<EOF >/app/rocketmq/dashboard/start-dashboard.sh #!/bin/bash docker run -d \ -p 8080:8080 \ --name rocketmq-console-ng \ --restart=always \ -e "JAVA_OPTS=-Drocketmq.namesrv.addr=${NAMESRV_ADDR} -Dcom.rocketmq.sendMessageWithVIPChannel=false" \ styletang/rocketmq-console-ng EOF chmod +x /app/rocketmq/dashboard/start-dashboard.sh ./start-dashboard.sh ``` 上述脚本允许自定义传入变量 `${NAMESRV_ADDR}` 表示实际使用的 Nameserver IP 列表字符串(以分号隔开)。完成后执行该脚本即可成功开启 Web UI 功能,默认监听于主机上的 8080 端口号处等待连接请求到来。 #### 5. 测试与验证 当以上各部分都顺利搭建完毕之后,就可以尝试发送测试消息至目标 Topic 上面去检验整体链路是否通畅无误了。具体操作流程不再赘述,请参照官方文档进一步学习实践。 --- ### 注意事项 - 如果是在生产环境下运行,则建议调整更多高级选项如设置密码保护机制、启用 SSL 加密传输等功能增强安全性。 - 对于大规模应用场景来说,推荐使用 Kubernetes 结合 RocketMQ Operator 自动化运维工具来进行统一管理和调度[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

层巅余落日

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值