1. 说明
- 本文采用的的Docker的方式进行部署。
- 版本:4.9.7
- 默认每台机器已安装Docker环境
- 采用两台机器进行部署,Ip为192.168.50.18、 192.168.50.245
- RocketMq采用的是双主双从的部署模式,需要两台机器,双机主备交叉部署。
机器 | 部署服务 | 配置文件 | |
---|---|---|---|
A | NameServer BrokerA-Master BrokerB-Slave | broker-a.properties broker-b-s.properties | 192.168.50.18 |
B | NameServer 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,待后续研究后,补充部署说明。