RocketMQ多master遷移至多master多slave模式


一、項目背景

  由於當前生產環境RocketMQ機器使用年限較長,已經過保,並且其中一台曾經發生過異常宕機事件。並且早期網絡規划較亂,生產、開發、測試等網絡沒有分開,公司決定對當前網絡進行規划,區分各個環境網段、機櫃,涉及到MQ集群需要遷移,由於物理機比較老舊,使用決定使用新機器替換老機器,並且之前的MQ集群為多master模式,當master宕機是會導致部分消息不可消費,決定將模式同時修改為多master多slave同步雙寫同步刷盤模式(本公司生產MQ壓力較小,如果MQ壓力大可以使用異步刷盤模式)

二、多master多slave集群功能性測試及集群測試結果如下

三、遷移步驟及遇到問題和解決方案

1.更新當前topic路由負載到所有broker上

執行該操作的原因:由於公司RocketMQ早期上線是沒有深入研究,很多特性都不很了解,夠用就行,很多地方沒有考慮到。經過測試環境測試並查看生產MQ路由現象,發現如果topic首次發送的消息30秒內少於(N-1)*4+1個(N表示master個數),那么該topic路由只會存在部分broker上,這樣會存在兩個問題:1.topic無法達到負載均衡的效果 2.如果topic所在的broker宕機,會導致該topic無法生產及消費
topic路由更新方案(二選一,具體看你心情選擇)

1.1.通過rocketmq控制台修改(生產驗證通過)

1.2.使用其他broker上的Topics.json文件替換本地,該文件在storePathRootDir配置項指定的的目錄下config目錄內,替換后重啟服務生效(生產驗證通過)

注意事項:通常Topics.json文件會從當前MQ集群的第一台機器上拷貝。例,我們當前生產MQ集群分別為158.7 158.8 158.9 ,集群中第一台broker為158.7,默認情況下如果不人為指定topic路由信息,其他兩台可能不會存在所以的topic路由,但是,第一台(158.7)通常會都擁有所以topic的路由信息

2.依次修改當前生產MQ集群模式,由多master修改為多master多slave模式,並設置同步雙寫同步刷盤(后續模式看具體情況定),步驟忽略,會主從部署添加slave應該不在話下,此步操作無風險

3.關閉一台master,並等待slave消息消費完畢,注意下面的操作步驟:

1.首先先通知nameserver,我這台broker馬上要下線啦,不要再給我發消息啦,阿里提供的命令如下
sh mqadmin wipeWritePerm -b brokerName -n namesrvAddr
實際執行的命令為
sh mqadmin wipeWritePerm -b broker-a  -n 172.16.158.7:9876
sh mqadmin wipeWritePerm -b broker-a  -n 172.16.158.8:9876
sh mqadmin wipeWritePerm -b broker-a  -n 172.16.158.9:9876
有幾台nameserver就執行幾次,雖然幫助問題提示可以以;符號為分隔符,一次寫入多個,但是執行報錯
2.等待1~2分鍾后關閉當前broker(因為延遲類消息slave無法消費,所以略微多等一下)
sh mqshutdown broker  #關閉broker

4.修改master的IP地址或者關機,修改slaveIP地址為master地址並修改配置文件為master模式,重啟生效

碰到的問題:
slave升級為master時,查看日志,日志文件有大量"WARN ScheduleMessageTimerThread - findMapedFileByOffset offset not ..."  日志,並且消息無法寫入
解決方法:
刪掉當前服務器storePathRootDir配置項指定的的目錄下所有,在啟動服務,拷貝其他服務器Topics.json到本地,在重啟(生產驗證通過,也許有更簡單的方法,暫時沒想到)

5.參照3、4步驟依次修改其他兩個broker集群

6.為新master添加slave 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM