Rocketmq broker迁移方案

迁移环境

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迁移到 其他节点

需求

• 生产环境(生产者)尽量不停服
• 发送消息不丢失
• 不重复消费

解决办法
  1. 生产者发送端高可用
    在创建Topic的时候把Topic的多个Message Queue创建在多个Broker组上(相同Broker名称,不同brokerId的机器组成一个Broker组),这样当一个Broker组的Master不可用后,其他组的Master仍然可用,生产者仍然可用发送消息。
    根据测试

当两组broker都含有此topic时

发送端:
同步模式下,停止任意一组broker,都不影响生产者发送消息。
异步模式下,停止任意一组broker,当前任务消息丢失,并且30秒内自动发现存活broker(该期间发送消息丢失),在存活broker中包含此topic信息的则发送成功,否则失败!

步骤
准备工作

• 统计单独使用broker-a组的topic(未使用发送端高可用)
• 将单独处于broker-a组的topic进行手动添加到其他broker组
• 根据topic,联系开发确认哪些topic是异步发送,是否能够接受最多30秒内的信息丢失,如果可以接受则可不停服

方案一 不停服并迁移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 $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,并加入到集群当时继续提供服务

方案二 不停服停旧的broker,新节点上启动新的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状态

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值