关于更多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 | 端口 |
---|---|---|
nameservice | 192.168.0.30 | 9876 |
mqdashboard | 192.168.0.30 | 8001 |
broker-a-m | 192.168.0.31 | 10909、10911、10912 |
broker-b-s | 192.168.0.31 | 11909、11911、11912 |
broker-b-m | 192.168.0.41 | 10909、10911、10912 |
broker-a-s | 192.168.0.41 | 11909、11911、11912 |
两组
Master
和Slave
交叉部署在两台服务器中
192.168.0.30
:部署NameServer
和rocketmq-dashboard
192.168.0.31
:部署broker-a-m
(broker-a Master
)和broker-b-s
(broker-b Slave
)192.168.0.41
:部署broker-b-m
(broker-b Master
)和broker-a-s
(broker-a Slave
)在
192.168.0.30上
部署NameServer
和rocketmq-dashboard
.
├──/root/apps/mqnamesrv
| ├── logs
| └── docker-compose.yml
查看镜像 IMAGE LAYERS
发现使用rockermq
用户,故需要对外部的映射目录/root/apps/mqnamesrv/logs
进行赋权:
chmod -R 777 /root/apps/mqnamesrv/logs
version: "3.8"
# 通用日志设置
x-logging:
&default-logging
# 日志大小和数量
options:
max-size: "100m"
max-file: "3"
# 文件存储类型
driver: json-file
services:
mqnamesrv:
image: apache/rocketmq:5.1.0
container_name: mqnamesrv
restart: always
ports:
- 9876:9876
environment:
#内存分配
JAVA_OPT_EXT: "-server -Xms256m -Xmx1024m"
volumes:
- /root/apps/mqnamesrv/logs:/home/rocketmq/logs/rocketmqlogs
command: sh mqnamesrv
logging: *default-logging
mqdashboard:
image: apacherocketmq/rocketmq-dashboard:latest
container_name: mqdashboard
restart: always
ports:
- 8001:8080
environment:
JAVA_OPTS: -Drocketmq.namesrv.addr=mqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false
logging: *default-logging
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上
部署broker-a Master
和broker-b Slave
.
├──/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
由章节3.2
部分可知对以下目录进行赋权:
chmod -R 777 /root/apps/mqbroker/{broker-a-m,broker-b-s}/{logs,store}
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.0
container_name: broker-a-m
restart: always
ports:
- 10911:10911
- 10909:10909
- 10912:10912
environment:
#内存分配
JAVA_OPT_EXT: -Duser.home=/home/rocketmq -server -Xms8g -Xmx8g -Xmn4g
NAMESRV_ADDR: 192.168.0.30:9876
volumes:
- /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.yml
command: sh mqbroker -c /home/rocketmq/conf/2m-2s-async/broker-a.properties --enable-proxy
logging: *default-logging
broker-b-s:
image: apache/rocketmq:5.1.0
container_name: broker-b-s
restart: always
ports:
- 11911:11911
- 11909:11909
- 11912:11912
environment:
#内存分配
JAVA_OPT_EXT: -Duser.home=/home/rocketmq -server -Xms8g -Xmx8g -Xmn4g
NAMESRV_ADDR: 192.168.0.30:9876
volumes:
- /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.yml
command: sh mqbroker -c /home/rocketmq/conf/2m-2s-async/broker-b-s.properties --enable-proxy
logging: *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
基础的properties
文件来自官网:https://dist.apache.org/repos/dist/release/rocketmq/5.1.0/rocketmq-all-5.1.0-bin-release.zip,再此跟进部署环境进行适当修改。
broker-a.properties
是broker-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
部分
broker-b-s.properties
是broker-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
部分,此处就不进行重复赘述
参数名 | 默认值 | 说明 |
---|---|---|
listenPort | 10911 | 接受客户端连接的监听端口 |
namesrvAddr | null | nameServer 地址 |
brokerIP1 | 网卡的 InetAddress | 当前 broker 监听的 IP |
brokerIP2 | 跟 brokerIP1 一样 | 存在主从 broker 时,如果在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步 |
brokerName | null | broker 的名称 |
brokerClusterName | DefaultCluster | 本 broker 所属的 Cluster 名称 |
brokerId | 0 | broker id,0 表示 master,其他的正整数表示 slave |
storePathRootDir | $HOME/store/ | 存储根路径 |
storePathCommitLog | $HOME/store/commitlog/ | 存储 commit log 的路径 |
mappedFileSizeCommitLog | 1024 * 1024 * 1024(1G) | commit log 的映射文件大小 |
deleteWhen | 04 | 在每天的什么时间删除已经超过文件保留时间的 commit log |
fileReservedTime | 72 | 以小时计算的文件保留时间 |
brokerRole | ASYNC_MASTER | SYNC_MASTER/ASYNC_MASTER/SLAVE |
flushDiskType | ASYNC_FLUSH | SYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保证在收到确认生产者之前将消息刷盘。ASYNC_FLUSH 模式下的 broker 则利用刷盘一组消息的模式,可以取得更好的性能。 |
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上
部署broker-b Master
和broker-a Slave
.
├──/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
由章节3.2
部分可知对以下目录进行赋权:
chmod -R 777 /root/apps/mqbroker/{broker-a-s,broker-b-m}/{logs,store}
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.0
container_name: broker-a-s
restart: always
ports:
- 11911:11911
- 11909:11909
- 11912:11912
environment:
#内存分配
JAVA_OPT_EXT: -Duser.home=/home/rocketmq -server -Xms8g -Xmx8g -Xmn4g
NAMESRV_ADDR: 192.168.0.30:9876
volumes:
- /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.yml
command: sh mqbroker -c /home/rocketmq/conf/2m-2s-async/broker-a-s.properties --enable-proxy
logging: *default-logging
broker-b-m:
image: apache/rocketmq:5.1.0
container_name: broker-b-m
restart: always
ports:
- 10911:10911
- 10909:10909
- 10912:10912
environment:
#内存分配
JAVA_OPT_EXT: -Duser.home=/home/rocketmq -server -Xms8g -Xmx8g -Xmn4g
NAMESRV_ADDR: 192.168.0.30:9876
volumes:
- /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.yml
command: sh mqbroker -c /home/rocketmq/conf/2m-2s-async/broker-b.properties --enable-proxy
logging: *default-logging
注意事项请见章节
4.3
部分,此处就不进行重复赘述
基础的properties
文件来自官网:https://dist.apache.org/repos/dist/release/rocketmq/5.1.0/rocketmq-all-5.1.0-bin-release.zip,再此跟进部署环境进行适当修改。
broker-b.properties
是broker-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
部分,此处就不进行重复赘述
broker-a-s.properties
是broker-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
部分,此处就不进行重复赘述
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
浏览器访问:http://192.168.0.30:8001/#/cluster
自此docker-compose
搭建RocketMQ 5.1.0
集群(双主双从模式)完成,计划在下章继续补充关于ACL
权限控制的相关内容