大廠生產環境的RocketMQ都是這樣部署的

昨天咱們已經學習了RocketMQ的一些基本概念,架構設計和各個角色的功能。今天咱們來聊聊RocketMQ的集羣部署問題,關於RocketMQ的幾種集羣模式,你都知道嗎,或者大家用的是哪種集羣模式呢?java

集羣模式

一、單Master模式git

這種部署方式的風險比較大,一旦Broker宕掉,就會致使整個服務不可用,通常只在開發環境爲了節約資源的時候使用,線上環境很是不建議使用。github

二、多Master模式apache

這種模式會在一個集羣中部署多個Master,沒有Slave,這種模式也是存在必定的優缺點:vim

  • 優勢:配置簡單,單個Master宕掉其餘幾Master能夠正常提供服務,在磁盤配置爲RAID10時,消息基本上不會丟失,之因此不是百分百是由於異步刷盤可能會丟失少許消息,同步刷盤不會丟失消息。
  • 缺點:若是其中一個Master宕掉,這臺機器上尚未消費的消息在恢復以前不能被消費,可能影響消息的消費時效。

三、多Master多Salve模式(異步)服務器

每一個Master配置一個Slave,有多對Master-Slave一塊兒提供服務,HA採用異步複製方式,主備有很短暫的消息延遲,這種模式的優缺點:架構

  • 優勢:即便磁盤損壞,也只是會丟失很是少的消息,消息的時效性也不會有影響,Master宕機後依然能夠消費從Slave消費消息,而且這個過程不須要人工干預,性能和多Master模式接近。
  • 缺點:Master宕機磁盤損壞的狀況下會丟失少許消息。

四、多Master多Slave模式(同步)異步

每一個Master配置一個Slave,有多對Master-Slave,HA採用同步雙寫方式,即只有主備都寫成功,才嚮應用返回成功,這種模式的優缺點以下:async

  • 優勢:數據與服務都無單點故障,Master宕機狀況下,消息無延遲,服務可用性與數據可用性都很是高;
  • 缺點:性能比異步複製模式略低(大約低10%左右),發送單個消息的RT會略高,且目前版本在主節點宕機後,備機不能自動切換爲主機。

集羣配置

以多Master多Salve模式-異步雙寫模式爲例,看一下集羣模式的啓動:maven

1.啓動NameServer

# 首先啓動Name Server
$ nohup sh mqnamesrv &
 
# 驗證Name Server 是否啓動成功
$ tail -f ~/logs/rocketmqlogs/namesrv.log

2.啓動Broker集羣

例如NameServer的IP爲:192.168.1.1    192.168.1.2
# 在機器A,啓動第一個Master
$ nohup sh mqbroker -n 192.168.1.1:9876;192.168.1.2 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties &
 
# 在機器B,啓動第二個Master
$ nohup sh mqbroker -n 192.168.1.1:9876;192.168.1.2 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b.properties &
 
# 在機器C,啓動第一個Slave
$ nohup sh mqbroker -n 192.168.1.1:9876;192.168.1.2 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a-s.properties &
 
# 在機器D,啓動第二個Slave
$ nohup sh mqbroker -n 192.168.1.1:9876;192.168.1.2 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b-s.properties &

機器A上部署的Master的配置文件:

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

機器C上部署的Slave配置文件:

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

機器B上的Master和機器D上的Slave和機器A、C上的配置文件除brokerName外全都一致。

須要注意的是,若是本地開發環境的配置不夠高,須要修改runbroker.sh和runserver.sh兩個文件,調整JVM參數,不然會啓動失敗

vi /usr/local/rocketmq/bin/runbroker.sh
# 開發環境配置 JVM Configuration
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

vim /usr/local/rocketmq/bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

mqadmin管理工具

  1. 進入RocketMQ安裝目錄,在bin目錄下執行命令方法:./mqadmin {command} {args}
  2. 幾乎全部命令都須要配置-n表示NameServer地址,格式爲ip:port
  3. 幾乎全部命令均可以經過-h獲取幫助
  4. 若是既有Broker地址(-b)配置項又有clusterName(-c)配置項,則優先以Broker地址執行命令,若是不配置Broker地址,則對集羣中全部主機執行命令,只支持一個Broker地址。-b格式爲ip:port,port默認是10911
  5. 在tools下能夠看到不少命令,但並非全部命令都能使用,只有在MQAdminStartup中初始化的命令才能使用,你也能夠修改這個類,增長或自定義命令
  6. 因爲版本更新問題,少部分命令可能未及時更新,遇到錯誤請直接閱讀相關命令源碼

相關的命令比較多能夠在官網查看。

集羣監控平臺

incubator-rocketmq-externals這個項目是RocketMQ的一個擴展的開源項目,咱們直接從github把這個項目clone下來,而後對其中的rocketmq-console模塊進行編譯打包,而後運行就能夠了。

# 在打包前要閒配置咱們的NameServer集羣地址
rocketmq.config.namesrvAddr=192.168.1.1:9876;192.168.1.2:9876

git clone https://github.com/apache/rocketmq-externals
cd rocketmq-console
mvn clean package -Dmaven.test.skip=true

#啓動rocketmq-console
java -jar rocketmq-console-ng-1.0.0.jar

啓動成功後,就能夠經過http://localhost:8080訪問控制界面了:

圖片

相關文章
相關標籤/搜索