昨天咱們已經學習了RocketMQ的一些基本概念,架構設計和各個角色的功能。今天咱們來聊聊RocketMQ的集羣部署問題,關於RocketMQ的幾種集羣模式,你都知道嗎,或者大家用的是哪種集羣模式呢?java
一、單Master模式git
這種部署方式的風險比較大,一旦Broker宕掉,就會致使整個服務不可用,通常只在開發環境爲了節約資源的時候使用,線上環境很是不建議使用。github
二、多Master模式apache
這種模式會在一個集羣中部署多個Master,沒有Slave,這種模式也是存在必定的優缺點:vim
三、多Master多Salve模式(異步)服務器
每一個Master配置一個Slave,有多對Master-Slave一塊兒提供服務,HA採用異步複製方式,主備有很短暫的消息延遲,這種模式的優缺點:架構
四、多Master多Slave模式(同步)異步
每一個Master配置一個Slave,有多對Master-Slave,HA採用同步雙寫方式,即只有主備都寫成功,才嚮應用返回成功,這種模式的優缺點以下:async
以多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 {command} {args}
相關的命令比較多能夠在官網查看。
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訪問控制界面了: