1,現狀描述
由於某些原因,導致rocketmq集羣中某個master節點不能正常服務,需要爲master節點做流量遷移動作,已確保消息不丟失配置策略爲:
異步刷盤
主從異步複製
如果直接下線該master,由於主從異步複製,可能導致部分消息來不及複製到slave造成消息丟失。所以該方案不可行。
另一種方案選擇:關閉該broker的寫入權限,待該broker不再有寫入和消費時,再下線該節點。
2.關閉broker寫權限
2表示只寫權限,4表示只讀權限,6表示讀寫權限
#bin/mqadmin updateBrokerConfig -b broker:port -n nameserver:prot -k brokerPermission -v 4 |
3.觀察節點流量
#bin/mqadmin clusterList -n nameserver:prot |
觀察InTPS和OutTPS,理想情況都爲零時,並不再變化時,則該節點可下線了。
然而,在實際過程中並沒有出現爲零的情況,InTPS和OutTPS總是有值,有時個位數字有時是兩位數字,大部分時間在20多的值。此刻要分析下broker目前的消費狀態。
4.觀察broker消費狀態
#sh bin/mqadmin brokerConsumeStats -b broker:prot -n nameserver:prot >> brokerConsumeStats.tmp |
查看brokerConsumeStats.tmp,主要查看#LastTime和#Diff。發現%RETRY%重試類隊列#Diff有很微小(1或者3)的數據,而其他topic均爲0. LastTime時間最新也是發生在%RETRY%隊列中。此時可以讓該節點下線操作。
5.borker讀寫權限恢復
#bin/mqadmin updateBrokerConfig -b broker:port -n nameserver:prot -k brokerPermission -v 6 |
觀察各節點流量是否正常
#bin/mqadmin clusterList -n nameserver:prot |