RocketMQ多master迁移至多master多slave模式

摘要:
一、项目背景由于当前生产环境RocketMQ机器使用年限较长,已经过保,并且其中一台曾经发生过异常宕机事件。

一、项目背景

  由于当前生产环境RocketMQ机器使用年限较长,已经过保,并且其中一台曾经发生过异常宕机事件。并且早期网络规划较乱,生产、开发、测试等网络没有分开,公司决定对当前网络进行规划,区分各个环境网段、机柜,涉及到MQ集群需要迁移,由于物理机比较老旧,使用决定使用新机器替换老机器,并且之前的MQ集群为多master模式,当master宕机是会导致部分消息不可消费,决定将模式同时修改为多master多slave同步双写同步刷盘模式(本公司生产MQ压力较小,如果MQ压力大可以使用异步刷盘模式)

二、多master多slave集群功能性测试及集群测试结果如下

RocketMQ多master迁移至多master多slave模式第1张

三、迁移步骤及遇到问题和解决方案

1.更新当前topic路由负载到所有broker上

执行该操作的原因:由于公司RocketMQ早期上线是没有深入研究,很多特性都不很了解,够用就行,很多地方没有考虑到。经过测试环境测试并查看生产MQ路由现象,发现如果topic首次发送的消息30秒内少于(N-1)*4+1个(N表示master个数),那么该topic路由只会存在部分broker上,这样会存在两个问题:1.topic无法达到负载均衡的效果 2.如果topic所在的broker宕机,会导致该topic无法生产及消费
topic路由更新方案(二选一,具体看你心情选择)

1.1.通过rocketmq控制台修改(生产验证通过)

RocketMQ多master迁移至多master多slave模式第2张

1.2.使用其他broker上的Topics.json文件替换本地,该文件在storePathRootDir配置项指定的的目录下config目录内,替换后重启服务生效(生产验证通过)

注意事项:通常Topics.json文件会从当前MQ集群的第一台机器上拷贝。例,我们当前生产MQ集群分别为158.7 158.8 158.9 ,集群中第一台broker为158.7,默认情况下如果不人为指定topic路由信息,其他两台可能不会存在所以的topic路由,但是,第一台(158.7)通常会都拥有所以topic的路由信息

2.依次修改当前生产MQ集群模式,由多master修改为多master多slave模式,并设置同步双写同步刷盘(后续模式看具体情况定),步骤忽略,会主从部署添加slave应该不在话下,此步操作无风险

3.关闭一台master,并等待slave消息消费完毕,注意下面的操作步骤:

1.首先先通知nameserver,我这台broker马上要下线啦,不要再给我发消息啦,阿里提供的命令如下
sh mqadmin wipeWritePerm -b brokerName -n namesrvAddr
实际执行的命令为
sh mqadmin wipeWritePerm -b broker-a  -n 172.16.158.7:9876
sh mqadmin wipeWritePerm -b broker-a  -n 172.16.158.8:9876
sh mqadmin wipeWritePerm -b broker-a  -n 172.16.158.9:9876
有几台nameserver就执行几次,虽然帮助问题提示可以以;符号为分隔符,一次写入多个,但是执行报错
2.等待1~2分钟后关闭当前broker(因为延迟类消息slave无法消费,所以略微多等一下)
sh mqshutdown broker  #关闭broker

4.修改master的IP地址或者关机,修改slaveIP地址为master地址并修改配置文件为master模式,重启生效

碰到的问题:
slave升级为master时,查看日志,日志文件有大量"WARN ScheduleMessageTimerThread - findMapedFileByOffset offset not ..."  日志,并且消息无法写入
解决方法:
删掉当前服务器storePathRootDir配置项指定的的目录下所有,在启动服务,拷贝其他服务器Topics.json到本地,在重启(生产验证通过,也许有更简单的方法,暂时没想到)

5.参照3、4步骤依次修改其他两个broker集群

6.为新master添加slave

免责声明:文章转载自《RocketMQ多master迁移至多master多slave模式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇25.Android之图像的平移、旋转及缩放学习oracle的定时任务下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Pandorabox(Openwrt) 双宽带(WAN) 叠加网络实战

准备 一台已经刷好Pandorabox(Openwrt)的路由器、两条宽带 实战环境 固件:PandoraBox R8.1.12 By Lean 硬件:K2P A1版 过程 配置VLAN 为了将一个LAN口映射为WAN口,选择网络-交换机,添加一个VLAN3,比如我希望将LAN1口配置为WAN口,在VLAN1中把LAN1配置为关,VLAN3中除LAN1...

git常见问题汇总

1:强制将本地 master分支 同步成 远程服务器的master分支: git fetch -p git checkout -B master origin/master 2:refs/for与refs/heads的区别: refs/for需要进行Review,refs/heads不需要 3:push的时候直接添加topic: git push...

WebSocket入门及使用指南

最近在一个项目中,需要使用到websocket,于是就花了一点时间来熟悉websocket并总结写篇blog。 为何使用websocket 在浏览器与服务器通信间,传统的 HTTP 请求在某些场景下并不理想,比如实时聊天、实时性的小游戏等等, 其面临主要两个缺点: 无法做到消息的「实时性」; 服务端无法主动推送信息; 其基于 HTTP 的主要解决方案...

为什么ip层收到的报文可能已经设置了路由

一、收到报文对于网络地址的判断 对于刚收到的网络数据,经过了NF_IP_PRE_ROUTING过滤之后,开始到达了ip_rcv_finish函数,在该函数的开始做了一个看起来比较诡异的操作,就是判断了这个数据包中的路由dst是否已经设置过了,如果没有设置过则进行路由;这也就是反过来说,一些收到的报文是可能已经设置过了了路由。那么为什么会有这样的报文,它们...

Mysql系列(三)—— Mysql主从复制配置

一.前言 主从复制是Mysql知识体系中非常重的要一个模块。学习主从复制和后续的读写分离是完善只是知识体系的重要环节。且主从复制读写分离的思想并不仅仅局限于Mysql,在很多存储系统中都有该方案,如:redis。 从应用的角度思考,主从复制有如下优点: 可以备份数据,容灾 可以做读写分离,分担单机Mysql节点的压力。master只做write,slav...

uniapp路由插件使用爬坑

插件官网地址:https://hhyang.cn/v2/start/quickstart.html 一.安装路由插件: npm install uni-simple-router 二.配置路由: 1.编写路由代码: //src/router/index.js import {RouterMount,createRouter} from 'uni-simpl...