线上一台RocketMQ节点存在问题(比如:磁盘故障、电池故障、其他硬件故障等)
使用docker模拟在线停机
| 服务 | 端口 | 状态 |
|---|---|---|
| rocketmq-master1 | 10911 | 正常 |
| rocketmq-master2 | 10911 | 不正常 |
| rocketmq-slave1 | 10911 | 正常 |
| rocketmq-slave2 | 10911 | 正常 |
| rocketmq-nameserver1 | 9876 | 正常 |
| rocketmq-nameserver2 | 9876 | 正常 |
第一步:关闭不正常Broker的写权限(rocketmq-master2节点)
# brokerPermission 2是只写,4是只读、6是读写权限
# updateBrokerConfig 修改Broker内存,同时也会修改broker.properties配置文件
$ bin/mqadmin updateBrokerConfig -b rocketmq-master2:10911 -n \
'rocketmq-nameserver1:9876;Rocketmq-nameserver2:9876' -k brokerPermission -v 4
update broker config success, rocketmq-master2:10911
第二步:观察节点流量,InTPS和OutTPS流量。如果持续一段时间InTPS和OutTPS都为0,表示该节点即可下线
# 关闭前
$ bin/mqadmin clusterList -n 'rocketmq-nameserver1:9876;Rocketmq-nameserver2:9876'
#Cluster Name #Broker Name #BID #Addr #Version #InTPS(LOAD) #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
DefaultCluster rocketmq-master1 0 172.19.0.4:10911 V4_3_1 55.31(0,0ms) 0.00(0,0ms) 0 0.13 0.9193
DefaultCluster rocketmq-master1 1 172.19.0.6:10911 V4_3_1 55.17(0,0ms) 0.00(0,0ms) 0 0.13 0.9193
DefaultCluster rocketmq-master2 0 172.19.0.5:10911 V4_3_1 55.02(0,0ms) 0.00(0,0ms) 0 0.13 0.9193
DefaultCluster rocketmq-master2 1 172.19.0.7:10911 V4_3_1 56.07(0,0ms) 0.00(0,0ms) 0 0.13 0.9193
# 关闭后
#Cluster Name #Broker Name #BID #Addr #Version #InTPS(LOAD) #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
DefaultCluster rocketmq-master1 0 172.19.0.4:10911 V4_3_1 121.86(0,0ms) 0.00(0,0ms) 0 0.23 0.9194
DefaultCluster rocketmq-master1 1 172.19.0.6:10911 V4_3_1 117.33(0,0ms) 0.00(0,0ms) 0 0.23 0.9194
DefaultCluster rocketmq-master2 0 172.19.0.5:10911 V4_3_1 0.00(0,0ms) 0.00(0,0ms) 0 0.23 0.9194
DefaultCluster rocketmq-master2 1 172.19.0.7:10911 V4_3_1 0.00(0,0ms) 0.00(0,0ms) 0 0.23 0.9194
也可以从rocketmq-dashboard查看流量

第三步:等待半个小时左右,如果有生产和消费TPS,则通过如下命令查看流量来源(可能是重试队列)
# 查看流量来自哪些topic
$ bin/mqadmin brokerConsumeStats -b rocketmq-master2:10911 -n \
'rocketmq-nameserver1:9876;Rocketmq-nameserver2:9876'
第四步:停止Broker。停止后,查看控制台,可以发现节点已经下线
$ ps -ef|grep broker
# 不能使用kill -9
$ kill pid
# 因为这里采用docker模拟,所以执行
$ docker stop rocketmq-master2
第五步:机器故障解决之后,此时重启Broker,并开启读写权限。此时再次查看InTPS和OutTPS
$ bin/mqadmin updateBrokerConfig -b rocketmq-master2:10911 -n \
'rocketmq-nameserver1:9876;Rocketmq-nameserver2:9876' -k brokerPermission -v 6
当现有的RocketMQ集群性能不足,需要扩容升级,增加新的主从节点
使用docker模拟在线扩容
| 服务 | 端口 | 状态 |
|---|---|---|
| rocketmq-master1 | 10911 | 正常 |
| rocketmq-master2 | 10911 | 正常 |
| rocketmq-slave1 | 10911 | 正常 |
| rocketmq-slave2 | 10911 | 正常 |
| rocketmq-nameserver1 | 9876 | 正常 |
| rocketmq-nameserver2 | 9876 | 正常 |
| rocketmq-master3 | 10911 | 新增 |
| rocketmq-slave3 | 10911 | 新增 |
第一步非常重要:从现有的Broker上复制${ROCKETMQ_HOME}/store/config/目录下的的topics.json和subscriptionGroup.json到新的broker服务器目录上
第二步:设置新的rocketmq-master3和rocketmq-slave3为只读(设置为只读状态,避免新节点启动或者异常影响现有发送和消费)
# 只读
brokerPermission=4
第三步:启动扩容后的节点,此时会加入到现有集群,但是此时是只读状态

第四步:rocketmq-master3开启读写权限
$ bin/mqadmin updateBrokerConfig -b rocketmq-master3:10911 -n \
'rocketmq-nameserver1:9876;Rocketmq-nameserver2:9876' -k brokerPermission -v 6
查看新节点流量
