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迁移到 其他节点
需求
• 生产环境(生产者)尽量不停服
• 发送消息不丢失
• 不重复消费
解决办法
- 生产者发送端高可用
在创建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迁移方案相关推荐
- rocketmq docker集群_【解构云原生】RocketMQ高可用方案调研及On K8S设计展望(下)...
本文由作者授权网易云发布,未经许可,请勿转载. 作者:李海燕,网易杭州研究院云计算技术部工程师 上文链接:[解构云原生]RocketMQ高可用方案调研及On K8S设计展望(上) 四.RocketMQ ...
- RocketMQ Broker的最佳实践
RocketMQ Broker的最佳实践 翻译自rocket官方文档 Broker Role Broker的方式有异步主,同步主,或者从.如果不能容忍消息丢失,建议以同步主从方式部署.如果对丢失没那么 ...
- 代码技巧——数据迁移方案【建议收藏】
开发工作中,可能会遇到如"大表拆分"."跨库数据迁移"等场景,本文介绍互联网常见架构下的数据迁移方案及实现: 1. 数据迁移的业务场景 以下是需要数据迁移的场景 ...
- 云计算之路:数据库迁移方案
云计算之路系列博文分享的是我们将网站从IDC机房迁移至云计算平台(阿里云)的实际经历,目前处于准备阶段,这次分享的是数据库的迁移方案. 在整个迁移过程中,只有数据库迁移过程中的数据同步阶段会影响网站的 ...
- 代码迁移之旅(二)- 渐进式迁移方案
说在前面 这是代码迁移的第二篇文章,也是最后一篇了,由于个人原因,原来的迁移我无法继续参与了,但完整的方案我已经准备好了,在测试环境也已经可以正常进行了. 上篇文章 代码重构之旅(一) 项目结构 介绍 ...
- 不同场景下MySQL的迁移方案
文章目录 不同场景下MySQL的迁移方案 一 .为什么要迁移 生产环境中,有以下情况需要做迁移工作,如下: 二.MySQL 迁移方案概览 三.MySQL 迁移实战 3.1. 场景一:一主一从结构迁移从 ...
- 银行核心海量数据无损迁移:TDSQL数据库多源异构迁移方案
为帮助开发者更好地了解和学习分布式数据库技术,2020年3月,腾讯云数据库.云加社区联合腾讯TEG数据库工作组特推出为期3个月的国产数据库专题线上技术沙龙<你想了解的国产数据库秘密,都在这!&g ...
- Ceph 集群整体迁移方案
场景介绍:在我们的IDC中,存在着运行了3-6年的Ceph集群的服务器,这些服务器性能和容量等都已经无法满足当前业务的需求,在购入一批高性能机器后,希望将旧机器上的集群整体迁移到新机器上,当然,是保证 ...
- 应用迁移方案_Kubernetes如何成为迁移旧版应用程序的解决方案
应用迁移方案 在互联网的早期,如果要启动应用程序,则必须购买或租用硬件. 这是一台物理服务器或服务器机架,并且每个应用程序需要一台服务器,因此非常昂贵. 在2001年,VMware推出了虚拟化软件,该 ...
最新文章
- pytest使用简介
- c语言编程学生管理,c语言编程,关于学生管理的程序(急急急)
- 从4篇最新论文详解NLP新范式——Continuous Prompt
- springboot 启动原理
- 实训09.09:简单的彩票系统(机选多注)
- POST提交JSON字符串实战项目(JAVA网络网络爬虫)
- shell下后台挂起
- HTML学习笔记:演示HTML页面之间传递数据
- 用C# Regex类实现的一些常规输入判断
- @DateTimeFormat 和 @JsonFormat 注解的区别和使用
- 社交网络分析工具NetworkX和Gephi
- 论高碳艺术与低碳艺术
- boost斩波电路控制系统C语言,Boost升压斩波电路[精华]
- icinga ido2db
- 树莓派之火焰传感器模块
- 产品升级|10月产品捷报频传,解锁更多新成就!
- GLSL到HLSL参考
- 武汉有哪些大学 计算机专业比较强,武汉有哪些计算机好的大学排名
- 【Emmet 的使用手册(知识点超全版本)】
- python echarts城市热力图_ECharts-热力图实例
热门文章
- python中sub是什么意思_在Python中split(),sub(),subn()功能?
- 如何做默认样式重置?RESETTING 和 NORMALIZING 之间有什么区别?
- xgboost 自定义评价函数(metric)与目标函数
- 进化计算原理和实现(遗传算法)
- Google Map Event 谷歌地图事件
- tl494组成的超声波发射电路_采用TL494构成的电动车充电电路原理分析
- k均值图像分割的GPU加速
- [android adb shell] 怎么解锁图案锁屏(pattern lock)的手机?
- ABAP使用BDC录屏实现供应商付款功能(F-02)
- ListView缓存机制小结