迁移环境

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状态

Rocketmq broker迁移方案相关推荐

  1. rocketmq docker集群_【解构云原生】RocketMQ高可用方案调研及On K8S设计展望(下)...

    本文由作者授权网易云发布,未经许可,请勿转载. 作者:李海燕,网易杭州研究院云计算技术部工程师 上文链接:[解构云原生]RocketMQ高可用方案调研及On K8S设计展望(上) 四.RocketMQ ...

  2. RocketMQ Broker的最佳实践

    RocketMQ Broker的最佳实践 翻译自rocket官方文档 Broker Role Broker的方式有异步主,同步主,或者从.如果不能容忍消息丢失,建议以同步主从方式部署.如果对丢失没那么 ...

  3. 代码技巧——数据迁移方案【建议收藏】

    开发工作中,可能会遇到如"大表拆分"."跨库数据迁移"等场景,本文介绍互联网常见架构下的数据迁移方案及实现: 1. 数据迁移的业务场景 以下是需要数据迁移的场景 ...

  4. 云计算之路:数据库迁移方案

    云计算之路系列博文分享的是我们将网站从IDC机房迁移至云计算平台(阿里云)的实际经历,目前处于准备阶段,这次分享的是数据库的迁移方案. 在整个迁移过程中,只有数据库迁移过程中的数据同步阶段会影响网站的 ...

  5. 代码迁移之旅(二)- 渐进式迁移方案

    说在前面 这是代码迁移的第二篇文章,也是最后一篇了,由于个人原因,原来的迁移我无法继续参与了,但完整的方案我已经准备好了,在测试环境也已经可以正常进行了. 上篇文章 代码重构之旅(一) 项目结构 介绍 ...

  6. 不同场景下MySQL的迁移方案

    文章目录 不同场景下MySQL的迁移方案 一 .为什么要迁移 生产环境中,有以下情况需要做迁移工作,如下: 二.MySQL 迁移方案概览 三.MySQL 迁移实战 3.1. 场景一:一主一从结构迁移从 ...

  7. 银行核心海量数据无损迁移:TDSQL数据库多源异构迁移方案

    为帮助开发者更好地了解和学习分布式数据库技术,2020年3月,腾讯云数据库.云加社区联合腾讯TEG数据库工作组特推出为期3个月的国产数据库专题线上技术沙龙<你想了解的国产数据库秘密,都在这!&g ...

  8. Ceph 集群整体迁移方案

    场景介绍:在我们的IDC中,存在着运行了3-6年的Ceph集群的服务器,这些服务器性能和容量等都已经无法满足当前业务的需求,在购入一批高性能机器后,希望将旧机器上的集群整体迁移到新机器上,当然,是保证 ...

  9. 应用迁移方案_Kubernetes如何成为迁移旧版应用程序的解决方案

    应用迁移方案 在互联网的早期,如果要启动应用程序,则必须购买或租用硬件. 这是一台物理服务器或服务器机架,并且每个应用程序需要一台服务器,因此非常昂贵. 在2001年,VMware推出了虚拟化软件,该 ...

最新文章

  1. pytest使用简介
  2. c语言编程学生管理,c语言编程,关于学生管理的程序(急急急)
  3. 从4篇最新论文详解NLP新范式——Continuous Prompt
  4. springboot 启动原理
  5. 实训09.09:简单的彩票系统(机选多注)
  6. POST提交JSON字符串实战项目(JAVA网络网络爬虫)
  7. shell下后台挂起
  8. HTML学习笔记:演示HTML页面之间传递数据
  9. 用C# Regex类实现的一些常规输入判断
  10. @DateTimeFormat 和 @JsonFormat 注解的区别和使用
  11. 社交网络分析工具NetworkX和Gephi
  12. 论高碳艺术与低碳艺术
  13. boost斩波电路控制系统C语言,Boost升压斩波电路[精华]
  14. icinga ido2db
  15. 树莓派之火焰传感器模块
  16. 产品升级|10月产品捷报频传,解锁更多新成就!
  17. GLSL到HLSL参考
  18. 武汉有哪些大学 计算机专业比较强,武汉有哪些计算机好的大学排名
  19. 【Emmet 的使用手册(知识点超全版本)】
  20. python echarts城市热力图_ECharts-热力图实例

热门文章

  1. python中sub是什么意思_在Python中split(),sub(),subn()功能?
  2. 如何做默认样式重置?RESETTING 和 NORMALIZING 之间有什么区别?
  3. xgboost 自定义评价函数(metric)与目标函数
  4. 进化计算原理和实现(遗传算法)
  5. Google Map Event 谷歌地图事件
  6. tl494组成的超声波发射电路_采用TL494构成的电动车充电电路原理分析
  7. k均值图像分割的GPU加速
  8. [android adb shell] 怎么解锁图案锁屏(pattern lock)的手机?
  9. ABAP使用BDC录屏实现供应商付款功能(F-02)
  10. ListView缓存机制小结