小编给大家分享一下如何排查rocketmq错误迁移导致的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
由于测试环境机器老化,导致测试环境rocketmq集群有台机器关机了(那台机器有一个namesrv、一个master、一个另外的slave),后来起来了,运维告诉我们那台集群可能随时要坏,建议把里面的东西迁移,后来商量给了一台新的测试环境,第一次迁移rocketmq,想的简单了,导致了这次rocketmq错误迁移导致问题排查。
问题原因
由于操作的时候仅仅复制了rocketmq的部署包,但是配置文件位置并不在rocketmq部署包里面,所以导致下面出现的一些问题。
配置类似这样的,路径单独指定了,和原来的部署包并不在一起,以后如何需要迁移rocketmq机器,记得把这些配置相关的文件都拷贝过去,启动的时候会自动读取的,虽然现在这个结论看起来很简单,但是从topic那块看出有点问题的时候,还是疑惑了一会会才想到,下面看看一步一步步骤吧。
迁移操作
我的做法是这样的:把原来要坏的机器上面的rocketmq部署的安装包拷贝到新机器,之后修改新机器的hosts之后命令启动,通过命令查看集群起来了。之后我修改集群里面另外的一台集群的hosts把里面的原来指向快坏的机器修改为新的机器地址过了一段时间之后也重启了。
假如原来hosts为:
现在修改为:
备注: 配置hosts唯一好处是,下次换机器,只需要修改hosts文件即可,不需要在修改rocketmq配置文件了。
问题现象
现象1:
应该是:
实际变成了:
现象2:
topic的队列情况应该是:
实际上 有的topic变成了:
有的topic队列变成了只有:
刚刚看到这个现象的时候很奇怪,为什么会这样呢?
分析
把新加一台机器思路整理了下,到底做了什么,由于新迁移机器原来的一些配置topics.json,subscriptionGroup.json等信息都没有,由于2台机器先后都重启了。
假如原来hosts为:
现在修改为:
由于新的机器已经启动,并且没有任何的topic信息,这个时候客户端(发送端所在的业务)也重启了,并且连接到了新的机器的namesrv上面,由于这个上面并没有topic任何相关信息,这个时候发送端业务需要发送消息,刚刚巧发送到新的机器获取getTopicRouteInfo,没有获取到信息,走默认topicTBW102,由于默认的读写队列为4,而另外一台机器有该topic信息所以是8,就导致了其中的一个问题。
所以出现了这种情况:
另外一个现象是,客户端并没有发送数据操作,而另外一台机器内容也都重启了,由于broker会定时上报到namesrv(只有原来有的broker会上报,新的没有该topic信息上报),其实就在2个namesrv里面都仅仅注册了一个(topic其中就只有一个broker信息),后续发送获取getTopicRouteInfo,就只能获取一个,所以另外一台就没有任何信息了。
也就是这个情况了。
这个现象就解释完了。
**备注:**由于测试环境操作的可能性(和不太确定性,测试环境很多,很多人什么时候操作我根本不知道),只是个人推测情况,并且也能解释上面现象,如何有疑问或者哪里不对欢迎一起讨论。
处理
把原来快坏的机器上面的相应配置拷贝到新的机器即可(按照道理数据问题也应该拷贝的,但是新的已经入数据了,在拷贝就乱了),重启,现象正常。
备注: 迁移需要注意,不是服务启动起来就行了,应该把运行的一些配置数据啥的都拷贝过去才行。
看完了这篇文章,相信你对“如何排查rocketmq错误迁移导致的问题”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。