rocketmq错误迁移导致问题排查
说明
最近由于测试环境机器老化,导致测试环境rocketmq集群有台机器关机了(那台机器有一个namesrv、一个master、一个另外的slave),后来起来了,运维告诉我们那台集群可能随时要坏,建议把里面的东西迁移,后来商量给了一台新的测试环境,第一次迁移rocketmq,想的简单了,导致了这次rocketmq错误迁移导致问题排查。记录下来,以后真实迁移不会出现这类问题了,也给大家一个参考吧。
问题原因
由于操作的时候仅仅复制了rocketmq的部署包,但是配置文件位置并不在rocketmq部署包里面,所以导致下面出现的一些问题。
image配置类似这样的,路径单独指定了,和原来的部署包并不在一起,以后如何需要迁移rocketmq机器,记得把这些配置相关的文件都拷贝过去,启动的时候会自动读取的。,虽然现在这个结论看起来很简单,但是从topic那块看出有点问题的时候,还是疑惑了一会会才想到,下面看看一步一步步骤吧。
迁移操作
我的做法是这样的:把原来要坏的机器上面的rocketmq部署的安装包拷贝到新机器,之后修改新机器的hosts之后命令启动,通过命令查看集群起来了。之后我修改集群里面另外的一台集群的hosts把里面的原来指向快坏的机器修改为新的机器地址过了一段时间之后也重启了。
假如原来hosts为:
192.168.116.115 rocketmq1
192.168.116.116 rocketmq2
现在修改为:
192.168.116.115 rocketmq1
192.168.116.117 rocketmq2
备注: 配置hosts唯一好处是,下次换机器,只需要修改hosts文件即可,不需要在修改rocketmq配置文件了。
需要查看了解rocketmq集群部署可以看:RocketMQ集群部署配置这篇文章即可。
问题现象
现象1:
应该是:
image实际变成了:
image现象2:
topic的队列情况应该是:
image实际上 有的topic变成了:
image有的topic队列变成了只有:
image刚刚看到这个现象的时候很奇怪,为什么会这样呢?
分析
把新加一台机器思路整理了下,到底做了什么,由于新迁移机器原来的一些配置topics.json,subscriptionGroup.json等信息都没有,由于2台机器先后都重启了。
假如原来hosts为:
192.168.116.115 rocketmq1
192.168.116.116 rocketmq2
现在修改为:
192.168.116.115 rocketmq1
192.168.116.117 rocketmq2
由于新的机器已经启动,并且没有任何的topic信息,这个时候客户端(发送端所在的业务)也重启了,并且连接到了新的机器的namesrv上面,由于这个上面并没有topic任何相关信息,这个时候发送端业务需要发送消息,刚刚巧发送到新的机器获取getTopicRouteInfo,没有获取到信息,走默认topicTBW102,由于默认的读写队列为4,而另外一台机器有该topic信息所以是8,就导致了其中的一个问题。
所以出现了这种情况:
image另外一个现象是,客户端并没有发送数据操作,而另外一台机器内容也都重启了,由于broker会定时上报到namesrv(只有原来有的broker会上报,新的没有该topic信息上报),其实就在2个namesrv里面都仅仅注册了一个(topic其中就只有一个broker信息),后续发送获取getTopicRouteInfo,就只能获取一个,所以另外一台就没有任何信息了。
image也就是这个情况了。
image这个现象就解释完了。
备注:由于测试环境操作的可能性(和不太确定性,测试环境很多,很多人什么时候操作我根本不知道),只是个人推测情况,并且也能解释上面现象,如何有疑问或者哪里不对欢迎一起讨论。
处理
image把原来快坏的机器上面的相应配置拷贝到新的机器即可(按照道理数据问题也应该拷贝的,但是新的已经入数据了,在拷贝就乱了),重启,现象正常。
备注: 迁移需要注意,不是服务启动起来就行了,应该把运行的一些配置数据啥的都拷贝过去才行。
如果读完觉得有收获的话,欢迎点赞、关注、加公众号【匠心零度】,查阅更多精彩历史!!!
img