[RocketMQ]一次RocketMQ的平滑迁移方案 有更新!
一.目标:
把A机房中的MQ迁移到B机房,并保证在全过程中,RocketMQ不停止提供服务.
其中特殊的地方在于,A机房中有服务在线,B机房中也有服务在线,所以要考虑A/B两机房的服务都可正常使用MQ.
二.注意事项:
1.所有应用服务至少使用两个broker master.
2.应用服务要开启setRetryAnotherBrokerWhenNotStoreOK(true)保证其中一个broker 生产消息失败向另一个broker进行生产消息
3.A/B两机房中的服务使用的mq namesrv地址必须是用域名解析,不要使用ip(非必选项,本文使用域名)
三.环境介绍:
A机房的部署架构图
namesrv:两个节点1/2
broker: a-master/a-slave/b-master/b-slave
B机房的最终部署架构图
namesrv:两个节点3/4
broker:m-master/m-slave/n-master/n-slave
四.操作步骤
- B机房建立NAMESRV两个节点
- B机房建立broker-m/n master/slave 4个节点,并指定namesrv A机房和B机房的4个namesrv
- 对B机房的broker-m/n创建A机房相同的topic
3.1.获取topic列表:sh /bin/mqadmin topicList -n 'namesrv3:9876;namesrv4:9876' |grep -v '%RETRY%'|grep -v '%DLQ%'|grep -v 'BenchmarkTest' |grep -v 'SELF_TEST_TOPIC' |grep -v 'ZTEExample' |grep -v 'OFFSET_MOVED_EVENT'
- 等待30s~40s,等待应用服务重新向namesrv获取broker路由列表到本地,至此已完成broker扩容.此时所有所有broker master 都拥有写权限.并Produce Massage TPS 平均持平
- 对A机房中的broker-a发送禁写命令
5.1.sh mqadmin wipeWritePerm -n "namesrv1:9876;namesrv2:9876" -b broker-a
5.2. broker-a Produce TPS会递减至0 - 待5.2完成时,kill broker-a master节点,注意slave节点不处理,并且注意机房B中的m/n master的Produce Massage TPS有所升高
- 对A机房中的broker-b发送禁写命令(此步骤与前面第五步相同)
7.1.sh mqadmin wipeWritePerm -n "namesrv1:9876;namesrv2:9876" -b broker-b
7.2. broker-b Produce TPS会递减至0 - 待7.2完成时,kill broker-b master节点,注意slave节点不处理,并且注意机房B中的m/n master的Produce Massage TPS有所升高
- 以下步骤为:迁移namesrv.
9.1. 修改A机房中的的namesrv域名解析从A机房改为B机房的IP(不想一个一个手工改使用ansible工具) - kill A机房中的namesrv 1 /2 即可
10.1. 此步骤注意下应用服务之前使用A机房的namesrv tcp连接是否还存在,应为B机房的namesrv是为成功 - A机房的slave 节点当Consumer Massage TPS 为0时即可kill
至此完成迁移
评论
发表评论
|
|
nb
飞哥厉害。
飞哥牛逼