docker-compose 搭建RocketMQ 5.1.0 集群(双主双从模式) | Spring Cloud 28
迪丽瓦拉
2025-06-01 19:12:35
0

一、前言

关于更多RocketMQ的介绍请见官网:https://rocketmq.apache.org/zh/docs/

网上关于Docker搭建RocketMQ单机&集群的版本一般都是4.X。关于最新的5.X版本,官方给出的示例都是基于物理机&虚拟机实现,不便于我们我们日常开发使用,而且官方镜像https://hub.docker.com/r/apache/rocketmq 中也没有关于容器化使用的介绍。

本章的目的:展示基于docker-compose 搭建RocketMQ 5.1.0集群,及一些部署在部署过程中的注意事项,方便大家对新版本的尝鲜与使用。

二、环境说明

基于三台CentOS7.9版本的虚拟机进行:

服务IP端口
nameservice192.168.0.309876
mqdashboard192.168.0.308001
broker-a-m192.168.0.3110909、10911、10912
broker-b-s192.168.0.3111909、11911、11912
broker-b-m192.168.0.4110909、10911、10912
broker-a-s192.168.0.4111909、11911、11912

两组MasterSlave交叉部署在两台服务器中

  • 192.168.0.30:部署NameServerrocketmq-dashboard
  • 192.168.0.31:部署broker-a-mbroker-a Master)和broker-b-sbroker-b Slave
  • 192.168.0.41:部署broker-b-mbroker-b Master)和broker-a-sbroker-a Slave

三、192.168.0.30部署

192.168.0.30上部署NameServerrocketmq-dashboard

3.1 目录结构

.
├──/root/apps/mqnamesrv
|   ├── logs
|   └── docker-compose.yml

3.2 目录赋权

查看镜像 IMAGE LAYERS

在这里插入图片描述
发现使用rockermq用户,故需要对外部的映射目录/root/apps/mqnamesrv/logs进行赋权:

chmod -R 777 /root/apps/mqnamesrv/logs

3.3 docker-compose.yml

version: "3.8"
# 通用日志设置
x-logging:&default-logging# 日志大小和数量options:max-size: "100m"max-file: "3"# 文件存储类型driver: json-file
services:mqnamesrv:image: apache/rocketmq:5.1.0container_name: mqnamesrvrestart: alwaysports:- 9876:9876environment:#内存分配JAVA_OPT_EXT: "-server -Xms256m -Xmx1024m"volumes:- /root/apps/mqnamesrv/logs:/home/rocketmq/logs/rocketmqlogscommand: sh mqnamesrvlogging: *default-loggingmqdashboard:image: apacherocketmq/rocketmq-dashboard:latestcontainer_name: mqdashboardrestart: alwaysports:- 8001:8080environment:JAVA_OPTS: -Drocketmq.namesrv.addr=mqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=falselogging: *default-logging

3.4 操作命令

  • 启动服务:
cd /root/apps/mqnamesrv
docker-compose up -d
  • 查看NameServer日志:
docker logs -f --tail 200 mqnamesrv
  • 查看rocketmq-dashboard日志:
docker logs -f --tail 200 mqdashboard
  • 移除服务:
cd /root/apps/mqnamesrv
docker-compose down

四、192.168.0.31部署

192.168.0.31上部署broker-a Masterbroker-b Slave

4.1 目录结构

.
├──/root/apps/mqbroker
|   ├── broker-a-m
|   |   ├── conf
|   |   |    ├──2m-2s-async
|   |   |    |    └── broker-a.properties
|   |   |    └── plain_acl.yml
|   |   ├── logs
|   |   └── store
|   ├── broker-b-s
|   |   ├── conf
|   |   |    ├──2m-2s-async
|   |   |    |    └── broker-b-s.properties
|   |   |    └── plain_acl.yml
|   |   ├── logs
|   |   └── store
|   └── docker-compose.yml

4.2 目录赋权

由章节3.2部分可知对以下目录进行赋权:

chmod -R 777 /root/apps/mqbroker/{broker-a-m,broker-b-s}/{logs,store}

4.3 docker-compose.yml

version: "3.8"
# 通用日志设置
x-logging:&default-logging# 日志大小和数量options:max-size: "100m"max-file: "3"# 文件存储类型driver: json-file
services:broker-a-m:image: apache/rocketmq:5.1.0container_name: broker-a-mrestart: alwaysports:- 10911:10911- 10909:10909- 10912:10912environment:#内存分配JAVA_OPT_EXT: -Duser.home=/home/rocketmq -server -Xms8g -Xmx8g -Xmn4gNAMESRV_ADDR: 192.168.0.30:9876volumes:- /root/apps/mqbroker/broker-a-m/logs:/home/rocketmq/logs/rocketmqlogs- /root/apps/mqbroker/broker-a-m/conf/2m-2s-async:/home/rocketmq/conf/2m-2s-async- /root/apps/mqbroker/broker-a-m/store:/home/rocketmq/store- /root/apps/mqbroker/broker-a-m/conf/plain_acl.yml:/home/rocketmq/rocketmq-5.1.0/conf/plain_acl.ymlcommand: sh mqbroker -c /home/rocketmq/conf/2m-2s-async/broker-a.properties --enable-proxylogging: *default-loggingbroker-b-s:image: apache/rocketmq:5.1.0container_name: broker-b-srestart: alwaysports:- 11911:11911- 11909:11909- 11912:11912environment:#内存分配JAVA_OPT_EXT: -Duser.home=/home/rocketmq -server -Xms8g -Xmx8g -Xmn4gNAMESRV_ADDR: 192.168.0.30:9876volumes:- /root/apps/mqbroker/broker-b-s/logs:/home/rocketmq/logs/rocketmqlogs- /root/apps/mqbroker/broker-b-s/conf/2m-2s-async:/home/rocketmq/conf/2m-2s-async- /root/apps/mqbroker/broker-b-s/store:/home/rocketmq/store- /root/apps/mqbroker/broker-b-s/conf/plain_acl.yml:/home/rocketmq/rocketmq-5.1.0/conf/plain_acl.ymlcommand: sh mqbroker -c /home/rocketmq/conf/2m-2s-async/broker-b-s.properties --enable-proxylogging: *default-logging

其中配置的NAMESRV_ADDR为上章节启动的NameServer地址

其中容器内部的路径/home/rocketmq/rocketmq-5.1.0/来自镜像 IMAGE LAYERS ,后期使用其他版本镜像请自行查看。

在这里插入图片描述

关于RocketMQ 集群(双主双从异步复制模式)请见:
官网介绍 或
https://github.com/apache/rocketmq/blob/master/docs/cn/operation.md

4.4 编辑properties

基础的properties文件来自官网:https://dist.apache.org/repos/dist/release/rocketmq/5.1.0/rocketmq-all-5.1.0-bin-release.zip,再此跟进部署环境进行适当修改。

4.4.1 broker-a.properties

broker-a.propertiesbroker-a Master的配置文件

# 集群名称
brokerClusterName=DefaultCluster
# broker名称
brokerName=broker-a
# brokerId master用0 slave用其他
brokerId=0
# 清理时机
deleteWhen=04
# 文件保留时长 48小时
fileReservedTime=48
# broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=ASYNC_MASTER
# 刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
# 主机ip
brokerIP1=192.168.0.31
brokerIP2=172.30.1.31
# 对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=10911
# 是否能够自动创建topic
autoCreateTopicEnable=true

因在容器内部署需注意brokerIP1 为外部宿主机的IP

因采用集群(双主双从模式)需注意在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步

因在一台宿主机上启动两个broker节点需注意listenPort属性,表示接受客户端连接的监听端口

Broker 配置说明请见章节4.5部分

4.4.2 broker-b-s.properties

broker-b-s.propertiesbroker-b Slave的配置文件

# 集群名称
brokerClusterName=DefaultCluster
# broker名称
brokerName=broker-b
# brokerId master用0 slave用其他
brokerId=1
# 清理时机
deleteWhen=04
# 文件保留时长 48小时
fileReservedTime=48
# broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SLAVE
# 刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
# 主机ip
brokerIP1=192.168.0.31
brokerIP2=172.30.1.31
# 对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=11911
# 是否能够自动创建topic
autoCreateTopicEnable=true

注意事项请见章节4.4.1部分,此处就不进行重复赘述

4.5 Broker 配置说明

参数名默认值说明
listenPort10911接受客户端连接的监听端口
namesrvAddrnullnameServer 地址
brokerIP1网卡的 InetAddress当前 broker 监听的 IP
brokerIP2跟 brokerIP1 一样存在主从 broker 时,如果在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步
brokerNamenullbroker 的名称
brokerClusterNameDefaultCluster本 broker 所属的 Cluster 名称
brokerId0broker id,0 表示 master,其他的正整数表示 slave
storePathRootDir$HOME/store/存储根路径
storePathCommitLog$HOME/store/commitlog/存储 commit log 的路径
mappedFileSizeCommitLog1024 * 1024 * 1024(1G)commit log 的映射文件大小
deleteWhen04在每天的什么时间删除已经超过文件保留时间的 commit log
fileReservedTime72以小时计算的文件保留时间
brokerRoleASYNC_MASTERSYNC_MASTER/ASYNC_MASTER/SLAVE
flushDiskTypeASYNC_FLUSHSYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保证在收到确认生产者之前将消息刷盘。ASYNC_FLUSH 模式下的 broker 则利用刷盘一组消息的模式,可以取得更好的性能。

4.6 操作命令​

  • 启动服务:
cd /root/apps/mqbroker
docker-compose up -d
  • 查看broker-a-m日志:
docker logs -f --tail 200 broker-a-m
  • 查看broker-b-s日志:
docker logs -f --tail 200 broker-b-s
  • 移除服务:
cd /root/apps/mqbroker
docker-compose down

五、192.168.0.41部署

192.168.0.41上部署broker-b Masterbroker-a Slave

5.1 目录结构

.
├──/root/apps/mqbroker
|   ├── broker-a-s
|   |   ├── conf
|   |   |    ├──2m-2s-async
|   |   |    |    └── broker-a-s.properties
|   |   |    └── plain_acl.yml
|   |   ├── logs
|   |   └── store
|   ├── broker-b-m
|   |   ├── conf
|   |   |    ├──2m-2s-async
|   |   |    |    └── broker-b.properties
|   |   |    └── plain_acl.yml
|   |   ├── logs
|   |   └── store
|   └── docker-compose.yml

5.2 目录赋权

由章节3.2部分可知对以下目录进行赋权:

chmod -R 777 /root/apps/mqbroker/{broker-a-s,broker-b-m}/{logs,store}

5.3 docker-compose.yml

version: "3.8"
# 通用日志设置
x-logging:&default-logging# 日志大小和数量options:max-size: "100m"max-file: "3"# 文件存储类型driver: json-file
services:broker-a-s:image: apache/rocketmq:5.1.0container_name: broker-a-srestart: alwaysports:- 11911:11911- 11909:11909- 11912:11912environment:#内存分配JAVA_OPT_EXT: -Duser.home=/home/rocketmq -server -Xms8g -Xmx8g -Xmn4gNAMESRV_ADDR: 192.168.0.30:9876volumes:- /root/apps/mqbroker/broker-a-s/logs:/home/rocketmq/logs/rocketmqlogs- /root/apps/mqbroker/broker-a-s/conf/2m-2s-async:/home/rocketmq/conf/2m-2s-async- /root/apps/mqbroker/broker-a-s/store:/home/rocketmq/store- /root/apps/mqbroker/broker-a-s/conf/plain_acl.yml:/home/rocketmq/rocketmq-5.1.0/conf/plain_acl.ymlcommand: sh mqbroker -c /home/rocketmq/conf/2m-2s-async/broker-a-s.properties --enable-proxylogging: *default-loggingbroker-b-m:image: apache/rocketmq:5.1.0container_name: broker-b-mrestart: alwaysports:- 10911:10911- 10909:10909- 10912:10912environment:#内存分配JAVA_OPT_EXT: -Duser.home=/home/rocketmq -server -Xms8g -Xmx8g -Xmn4gNAMESRV_ADDR: 192.168.0.30:9876volumes:- /root/apps/mqbroker/broker-b-m/logs:/home/rocketmq/logs/rocketmqlogs- /root/apps/mqbroker/broker-b-m/conf/2m-2s-async:/home/rocketmq/conf/2m-2s-async- /root/apps/mqbroker/broker-b-m/store:/home/rocketmq/store- /root/apps/mqbroker/broker-b-m/conf/plain_acl.yml:/home/rocketmq/rocketmq-5.1.0/conf/plain_acl.ymlcommand: sh mqbroker -c /home/rocketmq/conf/2m-2s-async/broker-b.properties --enable-proxylogging: *default-logging

注意事项请见章节4.3部分,此处就不进行重复赘述

5.4 编辑properties

基础的properties文件来自官网:https://dist.apache.org/repos/dist/release/rocketmq/5.1.0/rocketmq-all-5.1.0-bin-release.zip,再此跟进部署环境进行适当修改。

5.4.1 broker-b.properties

broker-b.propertiesbroker-b Master的配置文件

# 集群名称
brokerClusterName=DefaultCluster
# broker名称
brokerName=broker-b
# brokerId master用0 slave用其他
brokerId=0
# 清理时机
deleteWhen=04
# 文件保留时长 48小时
fileReservedTime=48
# broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=ASYNC_MASTER
# 刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
# 主机ip
brokerIP1=192.168.0.41
brokerIP2=172.30.1.41
# 对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=10911
# 是否能够自动创建topic
autoCreateTopicEnable=true

注意事项请见章节4.4.1部分,此处就不进行重复赘述

5.4.2 broker-a-s.properties

broker-a-s.propertiesbroker-a Slave的配置文件

# 集群名称
brokerClusterName=DefaultCluster
# broker名称
brokerName=broker-b
# brokerId master用0 slave用其他
brokerId=0
# 清理时机
deleteWhen=04
# 文件保留时长 48小时
fileReservedTime=48
# broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=ASYNC_MASTER
# 刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
# 主机ip
brokerIP1=192.168.0.41
brokerIP2=172.30.1.41
# 对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=10911
# 是否能够自动创建topic
autoCreateTopicEnable=true

注意事项请见章节4.4.1部分,此处就不进行重复赘述

5.6 操作命令​

  • 启动服务:
cd /root/apps/mqbroker
docker-compose up -d
  • 查看broker-a-s日志:
docker logs -f --tail 200 broker-a-s
  • 查看broker-b-m日志:
docker logs -f --tail 200 broker-b-m
  • 移除服务:
cd /root/apps/mqbroker
docker-compose down

六、利用rocketmq-dashboard查看集群

浏览器访问:http://192.168.0.30:8001/#/cluster

在这里插入图片描述
自此docker-compose搭建RocketMQ 5.1.0 集群(双主双从模式)完成,计划在下章继续补充关于ACL权限控制的相关内容

相关内容