nameserver 172.16.40.180:9876
nameserver 172.16.40.175:9876
broker-a master 172.16.20.225:10911
broker-a slave 172.16.30.133:10911
broker-b master 172.16.40.178:10911
broker-b slave 172.16.40.177:10911
broker-c master 172.16.40.179:10911
broker-c slave 172.16.40.176:10911
• 将broker-a master迁移到 其他节点
• 生产环境(生产者)尽量不停服
• 发送消息不丢失
• 不重复消费
当两组broker都含有此topic时
发送端:
同步模式下,停止任意一组broker,都不影响生产者发送消息。
异步模式下,停止任意一组broker,当前任务消息丢失,并且30秒内自动发现存活broker(该期间发送消息丢失),在存活broker中包含此topic信息的则发送成功,否则失败!
• 统计单独使用broker-a组的topic(未使用发送端高可用)
• 将单独处于broker-a组的topic进行手动添加到其他broker组
• 根据topic,联系开发确认哪些topic是异步发送,是否能够接受最多30秒内的信息丢失,如果可以接受则可不停服
1、获取topicList
/opt/app/rocketmq/bin/mqadmin topicList -n 172.16.40.180:9876
2、查询topic所在broker组,过滤出单独在broker-a组的topic
/opt/app/rocketmq/bin/mqadmin topicRoute -n 172.16.40.180:9876 -t $TopicList |grep brokerName|wc -l
3、通过命令或者在rocketmq-console中在其他broker组上添加该topic
/opt/app/rocketmq/bin/mqadmin updateTopic -b $BrokerAddr -t $TopicName -n 172.16.40.180:9876
4、停止broker-a master,而broker-a slave继续提供消费
停止期间观察30秒后如果还有应用日志MQ报错,则放弃该方案!
同步模式下生产者发送不影响,异步模式下生产者会有最多30秒的消息丢失
5、将broker-a master目录打包压缩
线上目录大小约为35G,考虑到打包压缩,然后rsync到新节点保守估计1-2小时
6、在新节点上修改原有配置文件
7、启动新节点上的broker,并加入到集群当时继续提供服务
1、获取topicList
/opt/app/rocketmq/bin/mqadmin topicList -n 172.16.40.180:9876
2、查询topic所在broker组,过滤出单独在broker-a组的topic
/opt/app/rocketmq/bin/mqadmin topicRoute -n 172.16.40.180:9876 -t $TOPIC_LIST |grep brokerName|wc -l
3、通过命令或者在rocketmq-console中在其他broker组上添加该topic
/opt/app/rocketmq/bin/mqadmin updateTopic -b $BrokerAddr -t Topic -n 172.16.40.180:9876
4、停止broker-a master,而broker-a slave继续提供消费
停止期间观察30秒后如果还有应用日志MQ报错,则放弃该方案!
同步模式下生产者发送不影响,异步模式下生产者会有最多30秒的消息丢失
5、将broker-a master目录配置文件保存时间更改为10天,并打包压缩rsync到新节点
6、在新节点上启动全新broker节点接入到集群,但是topic得自己手动添加到broker当中
7、broker-a slave继续提供消费过了几天后停止
1、在需要迁移的broker节点上新增rsync模块。
2、在新节点上拉取broker文件夹(虽然旧broker未停止,但是在迁移前rsync可以将历史数据同步到新节点,这样在需要停服迁移时再rsync一次就只用进行增量同步,节省大量时间)
3、停服操作
• 停止旧节点broker,待观察broker日志已经停止输出后做剩余操作
• 新节点rsync拉取broker
• 修改配置文件$ROCKETMQ_HOME/conf/ms-async/broker-a.properties
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=240
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=172.16.40.180:9876;172.16.40.175:9876
brokerIP1=172.16.30.159 #修改为新节点ip地址
storePathRootDir=/opt/app/rocketmq4.0/store
storePathCommitLog=/opt/app/rocketmq4.0/store/commitlog
storePathConsumerQueue=/opt/app/rocketmq4.0/store/consumequeue
mapedFileSizeCommitLog=1G
• 启动新节点的broker
4、观察broker是否能够正常接受消息以及正常消费
5、观察slave broker状态