RocketMQ 4.9.7 Docker双主双从搭建

293 阅读4分钟

1. 说明

  • 本文采用的的Docker的方式进行部署。
  • 版本:4.9.7
  • 默认每台机器已安装Docker环境
  • 采用两台机器进行部署,Ip为192.168.50.18、 192.168.50.245
  • RocketMq采用的是双主双从的部署模式,需要两台机器,双机主备交叉部署。
机器部署服务配置文件 
ANameServer
BrokerA-Master
BrokerB-Slave
broker-a.properties
broker-b-s.properties
192.168.50.18
BNameServer
BrokerB-Master
BrokerA-Slave
broker-b.properties
broker-a-s.properties
192.168.50.245

2. 配置文件

需要自行修改brokerIP1

  • broker-a.properties
#集群名字
brokerClusterName=DefaultCluster

#服务分片名称
brokerName=broker-a
#集群中 0 表示 Master,>0 表示 Slave
brokerId=0
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#对外ip
brokerIP1=192.168.50.18

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#限制的消息大小
maxMessageSize=6553600
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#checkTransactionMessageEnable=false
#发消息线程池数量
sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessaeThreadPoolNums=128
#发送消息是否使用可重入锁
useReentrantLockWhenPutMessage=true
#发送队列等待时间
waitTimeMillsInSendQueue=3000  

#系统页面缓存繁忙超时时间(翻译),默认值 1000
osPageCacheBusyTimeOutMills=5000
  • broker-a-s.properties
    调整上面的配置中的brokerId=1、brokerRole=SLAVE、brokerIP1=192.168.50.245

  • broker-b.properties
    调整上面的配置中的brokerName=broker-b、brokerIP1=192.168.50.245

  • broker-b-s.properties
    调整上面的配置中的brokerName=broker-b、brokerId=1、brokerRole=SLAVE、brokerIP1=192.168.50.18

  • 配置文件路径统一放置下面目录

mkdir -p /home/rocketmq/config

3. NameSrv启动

docker run -d \  
--restart=always \  
--name rmqnamesrv \  
--privileged=true \  
-p 10111:9876 \  
-v /home/rocketmq/logs:/root/logs \  
-v /home/rocketmq/store:/root/store \  
-e "MAX_POSSIBLE_HEAP=100000000" \  
-e "JAVA_OPT_EXT=-server -Xms1g -Xmx1g" \  
apache/rocketmq:4.9.7 \  
sh mqnamesrv

docker logs rmqnamesrv查看是否启动成功。

4. Broker启动

  • Master启动
    50.18启动Master-a
docker run -d \  
--restart=always \  
--name rmqbroker-a-master \  
--privileged=true \  
-p 10911:10911 \  
-p 10912:10912 \  
-p 10909:10909 \  
-v /home/rocketmq-master/logs:/root/logs \  
-v /home/rocketmq-master/store:/root/store \  
-v /home/rocketmq/config/broker-a.properties:/home/rocketmq/rocketmq-4.9.7/conf/broker.conf \  
-e "NAMESRV_ADDR=192.168.50.18:10111;192.168.50.245:10111" \  
-e "JAVA_OPT_EXT=-server -Xms1g -Xmx4g -Xmn4g -XX:-AssumeMP" \  
-e "MAX_POSSIBLE_HEAP=200000000" \  
apache/rocketmq:4.9.7 \  
sh mqbroker -c /home/rocketmq/rocketmq-4.9.7/conf/broker.conf

根据实际情况自行调整NAMESRV_ADDR

50.245启动Master-b

docker run -d \  
--restart=always \  
--name rmqbroker-b-master \  
--privileged=true \  
-p 10911:10911 \  
-p 10912:10912 \  
-p 10909:10909 \  
-v /home/rocketmq-master/logs:/root/logs \  
-v /home/rocketmq-master/store:/root/store \  
-v /home/rocketmq/config/broker-b.properties:/home/rocketmq/rocketmq-4.9.7/conf/broker.conf \  
-e "NAMESRV_ADDR=192.168.50.18:10111;192.168.50.245:10111" \  
-e "JAVA_OPT_EXT=-server -Xms1g -Xmx4g -Xmn4g -XX:-AssumeMP" \  
-e "MAX_POSSIBLE_HEAP=200000000" \  
apache/rocketmq:4.9.7 \  
sh mqbroker -c /home/rocketmq/rocketmq-4.9.7/conf/broker.conf
  • Slave启动
    50.18启动Slave-b
docker run -d \  
--restart=always \  
--name rmqbroker-b-slave \  
--privileged=true \  
-p 11011:10911 \  
-p 11912:10912 \  
-p 11012:10909 \  
-v /home/rocketmq-slave/logs:/root/logs \  
-v /home/rocketmq-slave/store:/root/store \  
-v /home/rocketmq/config/broker-b-s.properties:/home/rocketmq/rocketmq-4.9.7/conf/broker.conf \  
-e "NAMESRV_ADDR=192.168.50.18:10111;192.168.50.245:10111" \  
-e "JAVA_OPT_EXT=-server -Xms1g -Xmx4g -Xmn4g -XX:-AssumeMP" \  
-e "MAX_POSSIBLE_HEAP=200000000" \  
apache/rocketmq:4.9.7 \  
sh mqbroker -c /home/rocketmq/rocketmq-4.9.7/conf/broker.conf

50.245启动Slave-a

docker run -d \  
--restart=always \  
--name rmqbroker-a-slave \  
--privileged=true \  
-p 11011:10911 \  
-p 11912:10912 \  
-p 11012:10909 \  
-v /home/rocketmq-slave/logs:/root/logs \  
-v /home/rocketmq-slave/store:/root/store \  
-v /home/rocketmq/config/broker-a-s.properties:/home/rocketmq/rocketmq-4.9.7/conf/broker.conf \ 
-e "NAMESRV_ADDR=192.168.50.18:10111;192.168.50.245:10111" \  
-e "JAVA_OPT_EXT=-server -Xms1g -Xmx4g -Xmn4g -XX:-AssumeMP" \  
-e "MAX_POSSIBLE_HEAP=200000000" \  
apache/rocketmq:4.9.7 \  
sh mqbroker -c /home/rocketmq/rocketmq-4.9.7/conf/broker.conf

5. rocketmq运维监控console

docker run -d \  
--name rmqconsole \  
-v /etc/localtime:/etc/localtime:ro \  
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.50.18:10111;192.168.50.245:10111 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \  
-p 18080:8080 -t styletang/rocketmq-console-ng

Drocketmq.namesrv.addr根据自己的Ip调整即可

6. 最后说明

这种双主双从最大的缺点就是 当 Master Broker 挂了之后 ,没办法让 Slave Broker 自动切换为新的 Master Broker,RocketMQ后续推出了Dledger 模式,可以在Master挂了后,Broker自动选举上来成为Master,待后续研究后,补充部署说明。