RocketMQ 集群模式分為四種:單 master、多 master、多 master 多 slave 異步復(fù)制、多 master 多 slave 同步雙寫
四種集群模式
單 master
風(fēng)險(xiǎn)較大,一旦 broker 宕機(jī)或者重啟,將導(dǎo)致整個(gè)服務(wù)部可用。不建議線上環(huán)境使用
多 master
一個(gè)集群全部都是 master,沒有 slave
優(yōu)點(diǎn)
配置簡單,單個(gè) master 宕機(jī),或者重啟未付,對應(yīng)用沒有影響,在磁盤配置為 RAID10 時(shí),即是機(jī)器宕機(jī)不可恢復(fù)的情況,消息也不會(huì)丟失(異步刷盤會(huì)丟失少量消息,同步刷盤不會(huì)丟失消息),性能最高缺點(diǎn)
單個(gè) broker 宕機(jī)期間,這臺(tái)機(jī)器上未被消費(fèi)的消息在機(jī)器恢復(fù)之前不可訂閱,消息的實(shí)時(shí)性會(huì)受到影響。
多 master 多 slave 異步復(fù)制
每個(gè) master 配置一個(gè) slave,有多對 master slave,HA 采用的是異步復(fù)制方式,主備有短暫的消息延遲(毫秒級),master 收到消息后立即向應(yīng)用返回成功標(biāo)志,同時(shí)向 slave 寫入消息。
優(yōu)點(diǎn)
即是磁盤損壞,消息丟失的非常少,且消息的實(shí)時(shí)性不會(huì)受到影響。因?yàn)?master 宕機(jī)后,消費(fèi)者仍然可以從 slave 消費(fèi),此過程對應(yīng)用透明,不需要人工干預(yù),性能同多個(gè) master 模式一樣缺點(diǎn)
master 宕機(jī),磁盤損壞下,會(huì)丟失少量消息
多 master 多 slave 同步雙寫
每個(gè) master 配置一個(gè) slave,有多對 master slave,HA 采用同步雙寫模式,主備都成功才會(huì)返回成功
優(yōu)點(diǎn)
數(shù)據(jù)與服務(wù)都無單點(diǎn),master 宕機(jī)情況下,消息無延遲,服務(wù)可用性與數(shù)據(jù)可用性最高缺點(diǎn)
性能比異步復(fù)制低 10% 左右,發(fā)送單個(gè) master 的 RT 會(huì)略高,主機(jī)宕機(jī)后,slave 不能自動(dòng)切換為主機(jī)(后續(xù)版本會(huì)支持)
一主一從
修改 master 配置
進(jìn)入 conf/2m-2s-async,修改文件:broker-a-s.properties:
rm -rf broker-a-s.properties
cp broker-a.properties broker-a-s.properties
然后打開 broker-a-s.properties,修改:
brokerId=1
brokerRole=SLAVE
修改兩個(gè)配置文件的 nameserver 為兩個(gè)服務(wù)器對應(yīng)的 nameserver 地址,多個(gè)地址用英文分號(hào)分割
修改 slave 配置
將 master 的 broker-a.properties、broker-a-s.properties 同步過來,在 master 上執(zhí)行
scp broker-a.properties 192.168.52.201:/usr/local/include/mq/rocketmq/conf/2m-2s-async/
scp broker-a-s.properties 192.168.52.201:/usr/local/include/mq/rocketmq/conf/2m-2s-async/
啟動(dòng)集群
依次啟動(dòng) master、slave 的 nameserver
nohup ./bin/mqnamesrv &
在 master 上使用 broker-a.properties 啟動(dòng) broker
nohup sh ./bin/mqbroker -c /usr/local/include/mq/rocketmq/conf/2m-2s-async/broker-a.properties > /dev/null 2>&1 &
在 slave 上使用 broker-a-s.properties 啟動(dòng) broker
nohup sh ./bin/mqbroker -c /usr/local/include/mq/rocketmq/conf/2m-2s-async/broker-a-s.properties > /dev/null 2>&1 &
驗(yàn)證集群
在 rocketmq-console 中,修改 nameserver 配置:
rocketmq.config.namesrvAddr=192.168.52.200:9876;192.168.52.201:9876
啟動(dòng) console,并查看集群屬性

缺陷
當(dāng)主節(jié)點(diǎn)掛掉后,消息將無法寫入
雙主雙從
雙主雙從,異步刷盤,同步復(fù)制(生產(chǎn)環(huán)境建議采用此方式)
集群搭建
準(zhǔn)備4份 RocketMQ 環(huán)境,修改配置文件 conf/2m-2s-sync/broker-a.properties,將 brokerRole 改為:SYNC_MASTER,flushDiskType 改為 ASYNC_FLUSH,nameserver 為四臺(tái)服務(wù)器的 nameserver 地址其他與之前 async 的配置一樣
修改 conf/2m-2s-sync/broker-a-s.0properties 的 brokerId 為大于 0 的值,brokerRole 為 SLAVE,nameserver 為四臺(tái)服務(wù)器的 nameserver 地址。
修改 conf/2m-2s-sync/broker-b.0properties、conf/2m-2s-sync/broker-b-2.0properties,與 a 的區(qū)別在與 brokerName 都為 broker-b
啟動(dòng)集群
每臺(tái)機(jī)器都啟動(dòng) nameserveer
nohup ./bin/mqnamesrv &
在第一臺(tái)機(jī)器上啟動(dòng) broker-a
nohup sh ./bin/mqbroker -c /usr/local/include/mq/rocketmq/conf/2m-2s-sync/broker-a.properties > /dev/null 2>&1 &
在第二臺(tái)機(jī)器上啟動(dòng) broker-b
nohup sh ./bin/mqbroker -c /usr/local/include/mq/rocketmq/conf/2m-2s-sync/broker-b.properties > /dev/null 2>&1 &
在第三臺(tái)機(jī)器上啟動(dòng) broker-a-s
nohup sh ./bin/mqbroker -c /usr/local/include/mq/rocketmq/conf/2m-2s-sync/broker-a-s.properties > /dev/null 2>&1 &
在第四臺(tái)機(jī)器上啟動(dòng) broker-b-s
nohup sh ./bin/mqbroker -c /usr/local/include/mq/rocketmq/conf/2m-2s-sync/broker-b-s.properties > /dev/null 2>&1 &
驗(yàn)證集群
修改 rocket-console 的配置:rocketmq.config.namesrvAddr=192.168.52.200:9876;192.168.52.201:9876;192.168.52.202:9876;192.168.52.203:9876,啟動(dòng) console,打開 集群選項(xiàng)卡:
