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

1、項目背景

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

2、多master多slave集羣功能性測試及集羣測試結果以下

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

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控制檯修改(生產驗證經過)json

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.參照三、4步驟依次修改其餘兩個broker集羣

6.爲新master添加slave 

相關文章
相關標籤/搜索