我们在很早之前大约在2015年8月份左右我们开始使用Rocketmq作为公司消息中间件,那个时候RocketMQ还没有捐赠给Acaphe。
RocketMQ版本还是3.2.6,中间升级了一次版本,目前版本是3.5.8。
但是随着RocketMQ版本不断更新并且功能与稳定性也不断提高,所以打算升级为4.3.X版本
上一次升级停机了10分钟不到还是很快的,这次的目标是不停机升级版本。(题外话,上次因为升级还燃起了一波“干架”)
架构深入了解先简单附上一张RocketMQ的整体架构图,通过架构图我们可以从中分析出几种不停机版本升级方案
简单解释一下这个方案就是2主2从 多个nameserver,本公司架构一样,只是节点多了点而已,3主3从 2个nameserver
通过这个架构图我们设想了几个错略方案
新加两台(一主一从)服务器Broker节点升级4.3.2,然后注册到Name Server(如果目前服务器可以承受压力可以不用新加),然后逐台切换最后在切换NameServer节点。
先替换一台NameServer节点,然后倒入相关topic等信息,然后切换Broker节点。
如果方案1 2 都不能实现不停机,那就只能申请同样资源服务器再架设一套,最后切换IP或host(RocketMQ可以依赖hostname或IP地址所以比较麻烦,同时之前数据不好做同步)。
最后的防线停机维护了,违背了不停机维护的初衷。
方案实践测试从方案1开始进行测试,
我们将4.3.2版本的broker注册到NameServer3.5.8的版本上出现了如下错误:
然后去看了源码
报错了很明显这是两个版本不兼容有意为之,所以方案1被否定
接下来我们尝试方案2
让Broker3.5.8版本的节点注册到NameServer4.3.2版本的节点,我们开始
现根据官方文档启动NameServer(v4.3.2)服务
sh bin/mqnamesrv
NameServer成功启动
接下来我们启动broker(v3.5.8)服务
sh bin/mqbroker -n IP:9876 -c conf/2m-2s-async/broker-a.properties
启动成功,查看日志是否有异常
没有抛出异常,注册成功,同时使用程序进行测试发送消息成功,这里程序代码就不贴上来了。
控制台也显示正常
从上面测简单测试来看方案2是基本可行的,接下来切换broker节点为4.3.2,看看是否文件兼容
主从版本复制没有问题,同步OK,看看消息如何,如下图消息解析也没有问题
接下来我们测试方案2的业务连续性
通过上面的简单测试发现方案2可行 方案二如下
接下来开始方案二的具体实施RocketMQ各节点平滑过渡切换步骤
1、首先备份各种配置文件以防出现问题不能回滚,其中主要备份的有rocketmq程序包,store文件夹中的除commitlog文件夹外的文件(commitlog文件夹内容太多备份困难,并且从节点也有相同的一份,就没有备份)