千家信息网

如何实现线上环境大规模RocketMQ集群不停机升级

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"如何实现线上环境大规模RocketMQ集群不停机升级",在日常操作中,相信很多人在如何实现线上环境大规模RocketMQ集群不停机升级问题上存在疑惑,小编查阅了各式资料,整理出简单好
千家信息网最后更新 2026年11月03日如何实现线上环境大规模RocketMQ集群不停机升级

这篇文章主要介绍"如何实现线上环境大规模RocketMQ集群不停机升级",在日常操作中,相信很多人在如何实现线上环境大规模RocketMQ集群不停机升级问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何实现线上环境大规模RocketMQ集群不停机升级"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1、版本升级的迫切性

说来惭愧,作为RocketMQ社区优秀布道师,笔者所在公司的RocketMQ服务端版本竟然还是4.1.0,RocketMQ在4.4.0版本之前是不支持ACL(访问控制),对应生产环境中任意一台机器都可以订阅任意topic,在任意一台生产应用服务器都可以安装一个rocketmq-console,从而控制整个集群,拥有删除主题、删除消费组的权限,想想是不是后背发凉.

2、升级方案

2.1 确定升级到的版本

翻开RocketMQ升级日志,RocketMQ在4.4.0版本正式引入了ACL机制,故版本至少要升级到4.4.0,在业界使用开源版本有一个不成文的规则:通常不要使用最新的版本,不要充当小白鼠。

但RocketMQ可以算是一个特殊。

通过仔细浏览RocketMQ的版本变更记录,我们不难发现RocketMQ Client 相关的变更非常少,即与用户关系紧密的消息发送、消息消费这块的代码非常的稳定,理论上基本不存在兼容性问题。并且每一个版本都修复了一些重大的BUG,性能提升也比较明显,故笔者这次决定"冒天下之大不韪",决定将帮升级到最新版本4.8.0。

在这里在啰嗦一些,简单介绍一下RocketMQ几个具有里程杯意义的版本。

  • RocketMQ4.3.0正式引入了事务消息,如果大家希望使用事务消息,其版本最低建议为 4.6.1。

  • RocketMQ4.4.0引入了ACL、消息轨迹,如果需要使用这些功能,其版本最低建议为 4.7.0。

  • RocketMQ4.5.0引入了多副本(主从切换),其版本建议使用4.7.0。

  • RocketMQ4.6.0引入了请求-响应模型。

2.2 升级思路

版本升级的基本要求:业务不能停机,即要做到对业务无感知的升级。

如果机器足够的备用机器,最佳的版本迁移方案应该是先扩容再缩容,其示例图如下:

其主要的思路是先对Broker进行扩容,加入两台高版本的Broker服务器,加入到集群中,然后关闭低版本Broker的写权限,待消息过期后,将低版本移除,最后升级NameServer,完成不停机的在线迁移。

由于此次升级需要在半个月左右的时间内将RocketMQ集群所有的节点全部升级,无法提供这么多冷备节点,故先扩容、再缩容无法满足本次需求,本次只能基于已有的机器进行升级。

能否直接升级Broker端代码,但高版本的Broker直接使用低版本的Broker存储目录,即直接升级软件,其示例图如下:

核心思想是先停止老版本的Broker,然后使用新版本启动Broker,但使用旧的配置文件。

有了思路,接下来就是要验证方案的可行性。

2.3 方案验证

理论归理论,在生产环境做任何变更之前,必须有充分的测试验证,版本升级重点需要验证兼容性问题。

2.2.1 服务端版本兼容性验证

搭建一个上述MQ集群,其核心要点:

  • 高版本的Broker是否能向低版本的NameServer注册路由

  • 低版本的Broker是否能向高版本的NameServer注册路由

通过rocketmq-console,去创建多个个topic,看看其路由信息是否正确,经验证,符合预期。

2.2.2 客户端与服务端兼容性验证

RocketMQ的客户端API其实比较单一,无非就是消息发送、批量发送,消息消费,由于4.1版本不支持事务消息,这次升级甚至都无需验证事务消息,验证的要点:

  • 低版本的客户端是否能正常向高版本Broker发送消息,消费消息

  • 高版本的客户端是否能向低版本的Broker发送消息,消费消息

测试案例来自哪,其实都不需要我们自己写,直接用官方的Demo即可,其代码截图如下:

客户端验证在真正实施过程中,其实比服务端之间的验证要复杂的多,由于各个项目组使用的客户端版本不一,甚至有些项目组会使用c++、Python等其他非Java客户端,如何精确找到该集群中所有客户端的连接信息(客户端版本、语言类型)至关重要。

官方提供的版本,对消费组的连接信息还是支持的比较友好,我们可以通过写脚本,先查询系统中所有的消费组,然后遍历每一个消费组,可以查询这些消费组的IP地址、客户端版本、使用的语言等信息,但开源版本对生产者支持的不友好,没有一个可获取所有发送者相关的接口。

获取消费组消费端的连接方式如下图所示:

故我们采取的方式,主要是基于消费组失败客户端类型,本次升级过程中,我也对RocketMQ做了一些定制化开发,可方便获取所有发送方的链接信息,后续会已提交PR的方式贡献给官方。

2.2.3 Broker端存储格式验证

由于没有空闲资源,本次要使用的升级方式是直接升级软件,但新老版本共用存储目录,基于RocketMQ的消息存储协议,从4.0.0版本之后就一直没有变化,其验证的关键点如下:

  • 4.8.0版本是否可以直接使用4.1.0生成的存储文件(commitlog等文件)

  • 4.1.0版本是否可以直接使用4.8.0生成的存储文件

为什么需要验证4.1.0版本能兼容4.8.0呢?因为如果升级失败,需要回滚,如果4.1.0版本不能兼容4.8.0的话,会让你没有退路,这在架构设计中是绝对不允许的。

经过验证发现,存储文件是相互兼容的。

2.2.4 测试环境验证

经过上面三步的验证,已经可以进行升级了,但升级之前,还要在测试环境稳定运行一天,可以将测试环境升级成如下架构:

即不同版本的混搭模式,接受测试环境所有应用服务器的验证,如果测试环境运行没有问题,即可在生产环境进行升级。

2.4 实施方案

有了上面升级方案,并且已经做了充分的验证,是可以在生产环境执行了,在执行之前,需要对理论设计输出可执行可落地的实施方案,实施方案必须要包括回滚操作,并且这个回滚操作一定要比较容易执行,否则你的方案一定是不那么可靠的。

接下来重点阐述一下实施过程中一些关键步骤,整个升级步骤才有滚动升级,即逐台升级。

1、关闭一个Broker的写权限

关闭Broker写权限,让应用将流量平滑迁移到其他节点,这样可以有效避免在对该机器进行重启时对业务造成的影响。

sh ./mqadmin updateBrokerConfig -b 192.168.x.x:10911 -n 192.168.xx.xx:9876 -k brokerPermission -v 4

2、带Broker写入、消费tps接近0时,关闭broker

ps -ef | grep java kill pid

3、使用新版本启动Broker

注意,此过程使用的配置文件为老版本的配置,故此时并没有开启写权限,启动并不会对客户端消息写入造成影响。

4、开启写权限

待新版本启动成功后,既可以开启写权限

sh ./mqadmin updateBrokerConfig -b 192.168.xx.xx:10911 -n 192.168.xx.xx:9876 -k brokerPermission -v 6

观察流量。

重复上述步骤即可完成Broker的升级。

关于Nameserver的升级就更加容易了,采用滚动升级,kill掉老版本的nameserver,在原机器上启动新版本的nameserver即可。

到此,关于"如何实现线上环境大规模RocketMQ集群不停机升级"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

版本 升级 验证 消息 环境 客户 消费 客户端 集群 方案 权限 存储 服务 测试 文件 机器 信息 理论 生产 大规模 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云南咖啡 哈尔滨大商圈互联网科技有限公司 互联网科技公司起名 互联网科技有限公司经营范围 互联网下的科技发展 没上市的科技互联网公司 中资互联网科技 合肥互联网科技公司 无锡溥仪互联网科技有限公司 深圳互联网科技怎么样 重庆互联网医院沙龙医盟信息科技 注册互联网科技公司经营范围大全 开一家科技互联网公司需要多少钱 广州新华互联网科技学校电竞方面 互联网领先科技宣传片 抖集互联网科技技术咨询 互联网科技接地气 互联网时代科技型公司的机会 普陀区互联网教育科技管理办法 广东猫王互联网科技有限公司电话 互联网科技园 互联网的科技创新 有马互联网科技 盛创互联网科技有限公司 随着互联网科技发展 顶级互联网科技成果有哪些 洛阳共同富裕互联网科技有限公司 互联网金融科技公司的优势 上海创道互联网络科技有限公司 陕西九四连强互联网科技有限公司
0