1、簡介
Broker間資料同步/複制政策
Broker Replication(Broker間資料同步/複制):叢集環境下需要部署多個Broker,Broker分為兩種角色:一種是master,即 可以寫也可以讀,其brokerId=0,隻能有一個;另外一種是slave,隻允許讀,其brokerId為非0。一個master與多個slave通過指定相同的brokerName被歸為一個broker set(broker集)。通常生産環境中,我們至少需要2個broker set。Broker Replication隻的就是slave擷取或者是複制master的資料(消息在master和slave之間的同步是根據raft協定來進行的)。
- Sync Broker:生産者發送的每一條消息都至少同步複制到一個slave後才傳回告訴生産者成功,即“同步雙寫”。
- Async Broker:生産者發送的每一條消息隻要寫入master就傳回告訴生産者成功。然後再“異步複制”到slave。
- 推薦的幾種Broker叢集方式:
- 2m-2s-sync:兩主兩從同步雙寫(兩個master,兩個slave,資料同步雙寫到master和slave)
- 2m-2s-async:兩主兩從異步複制(兩個master,兩個slave,master資料通過異步複制到slave)
- 2m-noslave:兩主(隻有兩個master,沒有slave)
① 上述“2”隻是說作為一個叢集的最低配置數量,可以根據實際情況擴充。
② 所有的刷盤(Dish Flush)操作全部預設為:ASYNC_FLUSH(異步刷盤)。
2、Broker叢集方式比較

3、部署
這裡使用我覺得最好的方式:多Master多Slave模式,異步複制(2m-2s-async)來進行部署。
① 環境準備
準備四台機器(192.168.124.1、192.168.124.2、192.168.124.3、192.168.124.4),每台部署一個broker
② 開放端口
開放四台機子的相關端口
Nameserver的9876端口,Broker的10911端口,VIP通道10909端口(rocketMq預設有開啟,我們也可以手動關閉),控制台的12581端口
③ 啟動Name server
這裡我們分别在192.168.124.1、192.168.124.2兩台機器上啟動Name server。
sh mqnamesrv &
④ 啟動Broker
1、在192.168.124.1這台機器上,啟動a的Master
sh mqbroker -n '192.168.124.1:9876;192.168.124.2:9876' -c ../conf/2m-2s-async/broker-a.properties &
2、在192.168.124.2這台機器上,啟動b的Master
sh mqbroker -n '192.168.124.1:9876;192.168.124.2:9876' -c ../conf/2m-2s-async/broker-b.properties &
3、在192.168.124.3這台機器上,啟動a的Slave
sh mqbroker -n '192.168.124.1:9876;192.168.124.2:9876' -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a-s.properties &
4、在192.168.124.4這台機器上,啟動b的Slave
sh mqbroker -n '192.168.124.1:9876;192.168.124.2:9876' -c ../conf/2m-2s-async/broker-b-s.properties &
Broker配置詳解
參數名 預設值 說明 listenPort 10911 Broker對外服務的監聽端口 namesrvAddr Null NameServer位址 brokerIP1 本機IP 本機ip位址,預設系統自動識别,但是某些多網卡機器會存在識别錯誤的情況,這種情況下可以人工配置 brokerName 本機主機名 brokerClusterName DefaultCluster Broker所屬那個叢集 brokerId BrokerId,必須是大于等于0的整數,0表示Master, 大于0表示Slave, 一個Master可以挂多個Slave,Master和Slave通過BrokerName來配對 storePathCommitLog $HOME/store/commitlog commitLog存儲路徑 storePathConsumerQueue $HOME/store/consumequeue 消費隊列存儲路徑 storePathIndex $HOME/store/index 消息索引存儲隊列 deleteWhen 4 删除時間點,預設淩晨4點 fileReserverdTime 48 檔案保留時間,預設48小時 maxTransferBytesOnMessageInMemory 262144 單次pull消息(記憶體)傳輸的最大位元組數 maxTransferCountOnMessageInMemory 32 單次pull消息(記憶體)傳輸的最大條數 maxTransferBytesOnMessageInDisk 65535 單次Pull消息(磁盤)傳輸的最大位元組數 maxTransferCountOnMessageInDisk 8 單次pull消息(磁盤)傳輸的最大條數 messageIndexEnable TRUE 是否開啟消息索引功能 messageIndexSafe FALSE 是否提供安全的消息索引機制,索引保證不丢 brokerRole ASYNC_MASTER Broker的角色:ASYNC_MASTER異步複制Master; SYNC_MASTER同步雙寫MASTER; SLAVE flushDiskType ASYNC_FLUSH 刷盤方式: ASYNC_FLUSH異步刷盤;SYNC_FLUSH同步刷盤clientFileForciblyEnable
部署Mq控制台
我們将控制台部署在192.168.124.1這台機子上面
java -jar rocketmq-console-ng-1.0.0.jar --server.port=12581 --rocketmq.config.namesrvAddr=192.168.124.1:9876;192.168.124.2 &
PS 運維指令
檢視叢集情況
./mqadmin clusterList -n 127.0.0.1:9876
檢視broker狀态
./mqadmin brokerStatus -n 127.0.0.1:9876 -b 192.168.124.1:10911
檢視topic清單
./mqadmin topicList -n 127.0.0.1:9876
檢視topic狀态
./mqadmin topicStatus -n 127.0.0.1:9876 -t PushTopic
檢視topic路由
./mqadmin topicRoute -n 127.0.0.1:9876 -t PushTopic