RocketMQ 集群模式分為四種:單 master
铃慷、多 master
蹋笼、多 master 多 slave 異步復制
展姐、多 master 多 slave 同步雙寫
四種集群模式
單 master
風險較大,一旦 broker 宕機或者重啟剖毯,將導致整個服務部可用圾笨。不建議線上環(huán)境使用
多 master
一個集群全部都是 master,沒有 slave
優(yōu)點
配置簡單逊谋,單個 master 宕機擂达,或者重啟未付,對應用沒有影響胶滋,在磁盤配置為 RAID10 時板鬓,即是機器宕機不可恢復的情況,消息也不會丟失(異步刷盤會丟失少量消息镀钓,同步刷盤不會丟失消息)穗熬,性能最高缺點
單個 broker 宕機期間,這臺機器上未被消費的消息在機器恢復之前不可訂閱丁溅,消息的實時性會受到影響唤蔗。
多 master 多 slave 異步復制
每個 master 配置一個 slave,有多對 master slave窟赏,HA 采用的是異步復制方式妓柜,主備有短暫的消息延遲(毫秒級),master 收到消息后立即向應用返回成功標志涯穷,同時向 slave 寫入消息棍掐。
優(yōu)點
即是磁盤損壞,消息丟失的非常少拷况,且消息的實時性不會受到影響作煌。因為 master 宕機后掘殴,消費者仍然可以從 slave 消費,此過程對應用透明粟誓,不需要人工干預奏寨,性能同多個 master 模式一樣缺點
master 宕機,磁盤損壞下鹰服,會丟失少量消息
多 master 多 slave 同步雙寫
每個 master 配置一個 slave病瞳,有多對 master slave,HA 采用同步雙寫模式悲酷,主備都成功才會返回成功
優(yōu)點
數(shù)據(jù)與服務都無單點套菜,master 宕機情況下,消息無延遲设易,服務可用性與數(shù)據(jù)可用性最高缺點
性能比異步復制低 10% 左右逗柴,發(fā)送單個 master 的 RT 會略高,主機宕機后亡嫌,slave 不能自動切換為主機(后續(xù)版本會支持)
一主一從
修改 master 配置
進入 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
修改兩個配置文件的 nameserver 為兩個服務器對應的 nameserver 地址挟冠,多個地址用英文分號分割
修改 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/
啟動集群
依次啟動 master知染、slave 的 nameserver
nohup ./bin/mqnamesrv &
在 master 上使用 broker-a.properties
啟動 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
啟動 broker
nohup sh ./bin/mqbroker -c /usr/local/include/mq/rocketmq/conf/2m-2s-async/broker-a-s.properties > /dev/null 2>&1 &
驗證集群
在 rocketmq-console 中,修改 nameserver 配置:
rocketmq.config.namesrvAddr=192.168.52.200:9876;192.168.52.201:9876
啟動 console斑胜,并查看集群屬性
缺陷
當主節(jié)點掛掉后控淡,消息將無法寫入
雙主雙從
雙主雙從,異步刷盤止潘,同步復制(生產(chǎn)環(huán)境建議采用此方式)
集群搭建
準備4份 RocketMQ 環(huán)境掺炭,修改配置文件 conf/2m-2s-sync/broker-a.properties
,將 brokerRole
改為:SYNC_MASTER
,flushDiskType
改為 ASYNC_FLUSH
凭戴,nameserver 為四臺服務器的 nameserver 地址其他與之前 async 的配置一樣
修改 conf/2m-2s-sync/broker-a-s.0properties
的 brokerId
為大于 0 的值涧狮,brokerRole
為 SLAVE
,nameserver 為四臺服務器的 nameserver 地址么夫。
修改 conf/2m-2s-sync/broker-b.0properties
者冤、conf/2m-2s-sync/broker-b-2.0properties
,與 a 的區(qū)別在與 brokerName
都為 broker-b
啟動集群
每臺機器都啟動 nameserveer
nohup ./bin/mqnamesrv &
在第一臺機器上啟動 broker-a
nohup sh ./bin/mqbroker -c /usr/local/include/mq/rocketmq/conf/2m-2s-sync/broker-a.properties > /dev/null 2>&1 &
在第二臺機器上啟動 broker-b
nohup sh ./bin/mqbroker -c /usr/local/include/mq/rocketmq/conf/2m-2s-sync/broker-b.properties > /dev/null 2>&1 &
在第三臺機器上啟動 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 &
在第四臺機器上啟動 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 &
驗證集群
修改 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
档痪,啟動 console涉枫,打開 集群選項卡
: