rocketmq錯誤遷移導致問題排查。
說明
最近由於測試環境機器老化,導致測試環境rocketmq叢集有臺機器關機了(那臺機器有一個namesrv、一個master、一個另外的slave),後來起來了,運維告訴我們那臺叢集可能隨時要壞,建議把裡面的東西遷移,後來商量給了一臺新的測試環境,第一次遷移rocketmq,想的簡單了,導致了這次rocketmq錯誤遷移導致問題排查。記錄下來,以後真實遷移不會出現這類問題了,也給大家一個參考吧。
問題原因
由於操作的時候僅僅複製了rocketmq的部署包,但是配置檔案位置並不在rocketmq部署包裡面,所以導致下面出現的一些問題。
配置類似這樣的,路徑單獨指定了,和原來的部署包並不在一起, 以後如何需要遷移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叢集部署可以看: ofollow,noindex" target="_blank">RocketMQ叢集部署配置 這篇文章即可。
問題現象
現象1:
應該是:
實際變成了:
現象2:
topic的佇列情況應該是:
實際上 有的topic變成了:
有的topic佇列變成了只有:
剛剛看到這個現象的時候很奇怪,為什麼會這樣呢?
分析
把新加一臺機器思路整理了下,到底做了什麼,由於新遷移機器原來的一些配置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,沒有獲取到資訊,走預設topic TBW102 ,由於預設的讀寫佇列為4,而另外一臺機器有該topic資訊所以是8,就導致了其中的一個問題。
所以出現了這種情況:
另外一個現象是,客戶端並沒有傳送資料操作,而另外一臺機器內容也都重啟了,由於broker會定時上報到namesrv(只有原來有的broker會上報,新的沒有該topic資訊上報),其實就在2個namesrv裡面都僅僅註冊了一個(topic其中就只有一個broker資訊),後續傳送獲取getTopicRouteInfo,就只能獲取一個,所以另外一臺就沒有任何資訊了。
也就是這個情況了。
這個現象就解釋完了。
備註:由於測試環境操作的可能性(和不太確定性,測試環境很多,很多人什麼時候操作我根本不知道),只是個人推測情況,並且也能解釋上面現象,如何有疑問或者哪裡不對歡迎一起討論。
處理
把原來快壞的機器上面的相應配置拷貝到新的機器即可(按照道理資料問題也應該拷貝的,但是新的已經入資料了,在拷貝就亂了),重啟,現象正常。
備註:遷移需要注意,不是服務啟動起來就行了,應該把執行的一些配置資料啥的都拷貝過去才行。