溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

RocketMQ集群部署方式總結(jié)

發(fā)布時間:2020-08-03 03:42:54 來源:網(wǎng)絡(luò) 閱讀:19557 作者:Leexide 欄目:軟件技術(shù)

1 RocketMQ網(wǎng)絡(luò)部署圖

RocketMQ網(wǎng)絡(luò)部署圖如下圖所示:
RocketMQ集群部署方式總結(jié)

1.1 RocketMQ網(wǎng)絡(luò)部署特點:
  • NameServer是一個幾乎無狀態(tài)節(jié)點,可集群部署,節(jié)點之間無任何信息同步。
  • Broker部署相對復(fù)雜,Broker分為Master與Slave,一個Master可以對應(yīng)多個Slave,但是一個Slave只能對應(yīng)一個Master,Master與Slave的對應(yīng)關(guān)系通過指定相同的BrokerName,不同的BrokerId來定義,BrokerId為0表示Master,非0表示Slave。Master也可以部署多個。每個Broker與NameServer集群中的所有節(jié)點建立長連接,定時注冊Topic信息到所有 NameServer。
  • Producer與NameServer集群中的其中一個節(jié)點(隨機選擇)建立長連接,定期從Name Server取Topic路由信息,并向提供Topic服務(wù)的Master建立長連接,且定時向Master發(fā)送心跳。Producer完全無狀態(tài),可集群部署。
  • Consumer與NameServer集群中的其中一個節(jié)點(隨機選擇)建立長連接,定期從Name Server取Topic路由信息,并向提供Topic服務(wù)的Master、Slave建立長連接,且定時向Master、Slave發(fā)送心跳。Consumer既可以從Master訂閱消息,也可以從Slave訂閱消息,訂閱規(guī)則由Broker配置決定。

2 NameServer集群

NameServer集群如下:

NameServer集群 IP地址
NameServer-1 192.168.1.101
NameServer-2 192.168.1.102

分別啟動

nohup sh mqnamesrv &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/namesrv.log

3 RocketMQ配置文件

眾所周知,RocketMQ有多種集群部署方式,它們的配置文件也是分開的,如下:

[root@rocketmq01 conf]# ls -rlt /usr/local/rocketmq/conf
total 32
-rw-r--r-- 1 root root   949 Sep 19  2017 broker.conf
drwxr-xr-x 2 root root    60 Sep 19  2017 2m-noslave
drwxr-xr-x 2 root root   118 Sep 19  2017 2m-2s-sync
drwxr-xr-x 2 root root   118 Sep 19  2017 2m-2s-async
-rw-r--r-- 1 root root  3720 Apr 21 07:56 logback_namesrv.xml
-rw-r--r-- 1 root root  3718 Apr 21 07:56 logback_filtersrv.xml
-rw-r--r-- 1 root root 15146 Apr 21 07:56 logback_broker.xml
-rw-r--r-- 1 root root  3789 Apr 21 07:56 logback_tools.xml

說明:

  • 2m-noslave: 多Master模式
  • 2m-2s-sync: 多Master多Slave模式,同步雙寫
  • 2m-2s-async:多Master多Slave模式,異步復(fù)制

RocketMQ默認提供的配置文件都是最基本的,很多配置都是默認值,在生產(chǎn)環(huán)境中我們需要根據(jù)實際情況進行修改。樣例配置如下:

#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a|broker-b
#0表示Master,>0表示Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=192.168.1.101:9876;192.168.1.102:9876
#在發(fā)送消息時,自動創(chuàng)建服務(wù)器不存在的topic,默認創(chuàng)建的隊列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動創(chuàng)建Topic,建議線下開啟,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創(chuàng)建訂閱組,建議線下開啟,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對外服務(wù)的監(jiān)聽端口
listenPort=10911
#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 48 小時
fileReservedTime=120
#commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/usr/local/alibaba-rocketmq/store
#commitLog 存儲路徑
storePathCommitLog=/usr/local/alibaba-rocketmq/store/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/alibaba-rocketmq/store/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/alibaba-rocketmq/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/alibaba-rocketmq/store/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/alibaba-rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池數(shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池數(shù)量
#pullMessageThreadPoolNums=128

4 Broker集群部署

Broker集群部署有幾種不同的方式。這里的Slave不可寫,但可讀,類似于MySQL的主備方式。

4.1 單個Master

這種方式風(fēng)險較大,一旦Broker重啟或者宕機時,會導(dǎo)致整個服務(wù)不可用,不建議線上環(huán)境使用

4.2 多Master模式

一個集群無Slave,全是Master,例如2個Master或者3個Master。

brokerName brokerId brokerRole IP地址
broker-a 0 ASYNC_MASTER 192.168.1.101
broker-b 0 ASYNC_MASTER 192.168.1.102

優(yōu)點:
配置簡單,單個Master宕機或重啟維護對應(yīng)用無影響,在磁盤配置為RAID10時,即使機器宕機不可恢復(fù)情況下,由于RAID10磁盤非??煽浚⒁膊粫G失(異步刷盤丟失少量消息,同步刷盤一條不丟)。性能最高。

缺點:
單臺機器宕機期間,這臺機器上未被消費的消息在機器恢復(fù)之前不可訂閱,消息實時性會受到影響。

啟動步驟:
第一步:先啟動NameServer集群

第二步:在192.168.1.101,啟動第一個Master

nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log

第三步:在192.168.1.102,啟動第二個Master

nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-noslave/broker-b.properties >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log
4.3 多Master多Slave模式,異步復(fù)制

每個Master配置一個Slave,有多對Master-Slave,HA采用異步復(fù)制方式,主備有短暫消息延遲,毫秒級。

brokerName brokerId brokerRole IP地址
broker-a 0 ASYNC_MASTER 192.168.1.101
broker-a 1 SLAVE 192.168.1.102
broker-b 0 ASYNC_MASTER 192.168.1.103
broker-b 1 SLAVE 192.168.1.104

優(yōu)點:即使磁盤損壞,消息丟失的非常少,且消息實時性不會受影響,因為Master 宕機后,消費者仍然可以從Slave消費,此過程對應(yīng)用透明。不需要人工干預(yù)。性能同多 Master 模式幾乎一樣。

缺點:Master宕機,磁盤損壞情況,會丟失少量消息。

啟動步驟
第一步:先啟動NameServer集群

第二步:在192.168.1.101,啟動第一個Master

nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties >$ROCKETMQ_HOME/log/mq.log >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log

第三步:在192.168.1.102,啟動第一個Slave

nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a-s.properties >$ROCKETMQ_HOME/log/mq.log >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log

第四步:在192.168.1.103,啟動第二個Master

nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b.properties >$ROCKETMQ_HOME/log/mq.log >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log

第五步:在機器 192.168.1.104,啟動第二個Slave

nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b-s.properties >$ROCKETMQ_HOME/log/mq.log >/dev/null 2>&1 &
4.4 多Master多Slave模式,同步雙寫
每個Master配置一個Slave,有多對Master-Slave,HA采用同步雙寫方式,主備都寫成功,向應(yīng)用才返回成功。
brokerName
brokerId brokerRole IP地址
broker-a 0 SYNC_MASTER 192.168.1.101
broker-a 1 SLAVE 192.168.1.102
broker-b 0 SYNC_MASTER 192.168.1.103
broker-b 1 SLAVE 192.168.1.104

優(yōu)點:數(shù)據(jù)與服務(wù)都無單點,Master宕機情況下,消息無延遲,服務(wù)可用性與數(shù)據(jù)可用性都非常高。

缺點:性能比異步復(fù)制模式略低,大約低10%左右,發(fā)送單個消息的RT會略高。目前主宕機后,備機不能自動切換為主機,后續(xù)會支持自動切換功能。

啟動步驟:
第一步:先啟動NameServer集群

第二步:在192.168.1.101,啟動第一個Master

nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a.properties >$ROCKETMQ_HOME/log/mq.log >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log

第三步:在192.168.1.102,啟動第一個Slave

nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a-s.properties >$ROCKETMQ_HOME/log/mq.log >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log

第四步:在192.168.1.103,啟動第二個Master

nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b.properties >$ROCKETMQ_HOME/log/mq.log >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log

第五步:在192.168.1.104,啟動第二個Slave

nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b-s.properties >$ROCKETMQ_HOME/log/mq.log >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log

注意事項:以上Broker與Slave配對是通過指定相同的brokerName參數(shù)來配對,Master的 BrokerId必須是0,Slave的BrokerId必須是大于0的數(shù)。另外一個Master下面可以掛載多個Slave,同一Master下的多個Slave 通過指定不同的BrokerId來區(qū)分。

4.5 總結(jié)

1、異步復(fù)制和同步雙寫總結(jié)
RocketMQ集群部署方式總結(jié)

2、集群方式對比

集群方式 運維特點 消息可靠性(master宕機情況) 服務(wù)可用性(master宕機情況) 其他特點 備注
單Master 結(jié)構(gòu)簡單,擴容方便,機器要求低 同步刷盤消息一條都不會丟 整體可用,未被消費的消息無法取得,影響實時性 性能最高
多Master 異步有毫秒級丟失,同步雙寫不丟失 差評,主備不能自動切換,且備機只能讀不能寫,會造成服務(wù)整體不可寫 不考慮,除非自己提供主從切換的方案
Master-Slave(異步復(fù)制) 結(jié)構(gòu)復(fù)雜,擴容方便 故障時會丟失消息 整體可用,實時性影響毫秒級別
該組服務(wù)只能讀不能寫 性能很高 適合消息可靠性中等,實時性中等的要求
Master-Slave(同步雙寫) 結(jié)構(gòu)復(fù)雜,擴容方便 不丟消息 整體可用,不影響實時性,該組服務(wù)只能讀不能寫 性能比異步低10%,所以實時性也并不比異步方式太高 適合消息可靠性略高,實時性中等、性能要求不高的需求

5 高可用演練場景

RocketMQ高可用演練場景

項目 發(fā)送消息 發(fā)送消息過程中 接收消費消息
停用一個namesrv 不影響通信 不影響通信 不影響通信
停用全部namesrv 影響通信 不影響通信 影響通信,啟動任意的namesrv可恢復(fù)
停用單個master broker 不影響通信 不影響通信 不影響通信
停用全部master broker 影響通信 影響通信,無法恢復(fù) 影響通信
停用一個slave broker 不影響通信 不影響通信 不影響通信
停用全部slave broker 不影響通信 影響通信,數(shù)秒恢復(fù) 不影響通信,數(shù)秒恢復(fù)

下面的是我的公眾號二維碼,歡迎關(guān)注。文章轉(zhuǎn)載請注明出處www.leexide.com
RocketMQ集群部署方式總結(jié)

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI