背景
因为集团规划,需要将公司业务整体平滑迁移到一个新的数据中心,因为业务是金融类型,所以要保证在迁移数据中心的过程中对业务无感知,下面介绍一下Rocketmq 中间件的数据中心迁移方式。
架构简述:
1、我们迁移rocketmq 集群之前两个数据中心直接通过20GB的裸光互连。
2、我们在新的当前数据中心的rocketmq 架构是,两个nameserver和三组主从架构的broker节点,迁移到新的数据中心是两个nameserver和两组主从架构的broker节点,因为新的数据中心硬件更强。
迁移之前需要在新的数据中心部署一套rocketmq 集群,版本和原数据中心需要保持一致。部署完成之后需要使用脚本查询原broker中所有topic,再将topic都添加至新扩容的broker-d和broker-e中。
./bin/mqadmin topicList -n old-namesrv:9876 | grep -v "%" # 查询topic ./bin/mqadmin updateTopic -n new-namesrv:9876 -b new-broker:10911 -t topic-name # 新创建topic
因为这个时候所有的client还都连接着现有机房的nameserver,所以我们要把新机房部署的broker节点扩容到当前的机房,供业务使用。(注:扩容完成后需要在rocketmq 控制台观察,新的broker节点是否有数据生产和消费)
nameserver 数据一致
当broker节点都注册到了两个数据中心的四个nameserver后,client就可以切换到新的数据中心了。如果客户端是域名连接则直接修改DNS解析到新的数据中心nameserver即可。
当客户端都连接到了新的数据中心之后,我们就可以对原来数据中心的broker和nameserver进行下线操作了。
broker下线:
(1)broker下线之前需要先对要下线的broker组发送禁写命令,防止下线后消息丢失
sh mqadmin wipeWritePerm -n "namesrv1:9876;namesrv2:9876" -b broker-a
(2)当broker 的Produce TPS减少到0,且Consumer Message TPS为0时,就可以kill 掉master和slave节点了
(3)同样的操作,执行第二组和第三组的broker
nameserver下线:
(1)当原来机房的broker都下线完成之后,新机房的broker就可以去掉连接旧机房的nameserver配置了。
(2)当新的机房broker连接都去掉旧的机房的nameserver后,直接kill掉旧机房的nameserver服务。则整个迁移就完成了。
转载请注明:西门飞冰的博客 » Rocketmq 集群平滑迁移数据中心记录