RocketMQ高可用集群


集群支持:

  RocketMQ天生對集群的支持非常友好

單Master:

  優點:除了配置簡單沒什么優點

  缺點:不可靠,該機器重啟或宕機,將導致整個服務不可用

多Master:

  優點:配置簡單,性能最高

  缺點:可能會有少量消息丟失(配置相關),單台機器重啟或宕機期間,該機器下未被消費的消息在機器恢復前不可訂閱,影響消息實時性

多Master多Slave異步模式:

  每個Master配一個Slave,有多對Master-Slave,集群采用異步復制方式,主備有短暫消息延遲,毫秒級

  優點:性能同多Master幾乎一樣,實時性高,主備間切換對應用透明,不需人工干預

  缺點:Master宕機或磁盤損壞時會有少量消息丟失

多Master多Slave同步模式:

  每個Master配一個Slave,有多對Master-Slave,集群采用同步雙寫方式,主備都寫成功,向應用返回成功

  優點:服務可用性與數據可用性非常高

  缺點:性能比異步集群略低,當前版本主宕備不能自動切換為主。

  需要注意的是,在RocketMQ里面,1台機器只能要么是Master,要么是Slave。這個在初始的機器配置里面,就定死了。不會像kafka那樣存在master動態選舉的功能。其中Master的broker id = 0,Slave的broker id > 0。有點類似於mysql的主從概念,master掛了以后,slave仍然可以提供讀服務,但是由於有多主的存在,當一個master掛了以后,可以寫到其他的master上。

集群搭建:2M-2S-SYNC(兩主兩從同步寫)

  環境准備:rocket-4.4.0 ,JDK1.8 ,同時定好4個節點的端口,我這里主節點為默認10911,從節點設置成 10950,另外nameserver都是默認9876端口,這些都好了之后一定記得將這些端口全部開放。我這里兩台節點分別是192.168.1.101,192.168.1.102.

  記得修改兩台機器上的 runbroker.sh 與 runserver.sh 的虛擬機參數。

  設置好節點的數據存儲路徑:

mkdir /mysoft/rocketmq/data 
mkdir /mysoft/rocketmq/data/store 存儲路徑
mkdir /mysoft/rocketmq/data/store/commitlog //commitLog 存儲路徑
mkdir /mysoft/rocketmq/data/store/consumequeue //消費隊列存儲路徑存儲路徑
mkdir /mysoft/rocketmq/data/store/index //消息索引存儲路徑

  這里需要配置4個配置文件,我們就在原來配置上進行一些簡單的增加及修改,分別是:

  • 192.168.1.101上的 ${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-a.properties,${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-b-s.properties
  • 192.168.1.102上的 ${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-b.properties,${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-a-s.properties.

  修改日志文件(兩台機器):

mkdir -p /mysoft/rocketmq/logs
cd /mysoft/rocketmq/conf && sed -i 's#${user.home}#/mysoft/rocketmq#g' *.xml

192.168.1.101:${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-a.properties:

brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.1.101:9876;192.168.1.102:9876
#store存儲路徑,master與slave目錄要不同
storePathRootDir=/mysoft/rocketmq/data/store
#commitLog存儲路徑
storePathCommitLog=/mysoft/rocketmq/data/store/commitlog
brokerIP1=192.168.1.101
#很重要 slave通信用
brokerIP2=192.168.1.101

  ${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-b-s.properties:

brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=1
brokerIP1=192.168.1.101
deleteWhen=04
listenPort=10950
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.1.101:9876;192.168.1.102:9876
storePathRootDir=/mysoft/rocketmq/data/store/slave
storePathCommitLog=/mysoft/rocketmq/data/store/slave/commitlog

192.168.1.102上的 ${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-b.properties:

brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=0
brokerIP1=192.168.1.102
deleteWhen=04
fileReservedTime=48
namesrvAddr=192.168.1.101:9876;192.168.1.102:9876
storePathRootDir=/mysoft/rocketmq/data/store
storePathCommitLog=/mysoft/rocketmq/data/store/commitlog
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
brokerIP2=192.168.1.102

  ${ROCKETMQ-HOME}/conf/2m-2s-sync/broker-a-s.properties:

brokerClusterName=DefaultCluster
brokerName=broker-a
listenPort=10950
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerIP1=192.168.1.102
brokerRole=SLAVE
namesrvAddr=192.168.1.101:9876;192.168.1.102:9876
storePathRootDir=/mysoft/rocketmq/data/store/slave
storePathCommitLog=/mysoft/rocketmq/data/store/slave/commitlog
flushDiskType=ASYNC_FLUSH

  具體的配置可以參考一下這個文件去根據自身業務需求進行設置:

//所屬集群名稱,如果多個master,那么每個master配置的名稱應該一致,要不然識別不了
brokerClusterName=rocketmq-cluster
//broker名稱
brokerName=broker-a
//0 表示master,>0 表示slave
brokerId=0
//nameServer地址,分號隔開
namesrvAddr=192.168.5.100:9876;192.168.5.101:9876
//在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數
defaultTopicQueueNums=4
//是否允許broker自動創建topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
//是否允許broker自動創建訂閱組,建議線下開始,線上關閉
autoCreateSubscriptionGroup=true
//broker對外服務的監聽端口,
//同一台機器部署多個broker,端口號要不同,且端口號之間要相距大些
listenPort=10911
//刪除文件的時間節點,默認凌晨4點
deleteWhen=04
//文件保留時間,默認48小時
fileReservedTime=48
//commitLog每個文件的大小,默認大小1g
mapedFileSizeCommitLog=1073741824
//consumeQueue每個文件默認存30w條,根據自身業務進行調整
mapedFileSizeConsumeQueue=300000
destroyMapedFileInterval=120000
redeleteHangedFileInterval=120000
//檢查物理文件磁盤空間
diskMaxUsedSpaceRatio=88
//store存儲路徑,master與slave目錄要不同
storePathRootDir=/mysoft/rocketmq/data/store
//commitLog存儲路徑
storePathCommitLog=/mysoft/rocketmq/data/store/commitlog
//限制的消息大小
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
checkTransactionMessageEnable=false
//發消息線程池數
sendMessageThreadPoolNums=128
//拉去消息線程池數
pullMessageThreadPoolNums=128
//broker角色:
//ASYSC_MASTER 異步復制master
//SYSC_MASTER 同步復制master
//SLAVE 從
brokerRole=SYSC_MASTER
///刷盤方式
//ASYNC_FLUSH 異步刷盤
//SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH

  先啟動兩台的 namesrv 。記得查看日志信息,確保兩台都啟動了 。然后啟動broker。

//192.168.1.101
nohup sh mqbroker -c ../conf/2m-2s-sync/broker-a.properties &
nohup sh mqbroker -c ../conf/2m-2s-sync/broker-b-s.properties &
//192.168.1.102
nohup sh mqbroker -c ../conf/2m-2s-sync/broker-b.properties &
nohup sh mqbroker -c ../conf/2m-2s-sync/broker-a-s.properties &

  啟動后一定去看一下日志,出現以下信息應該就是啟動成功了:

  也可以通過命令查看:sh mqadmin clusterlist -n 192.168.1.101:9876

  至此集群啟動完成,客戶端再鏈接的時候通過設置 namesrv 如下去鏈接,其他一致:

consumer.setNamesrvAddr("192.168.1.101:9876;192.168.1.102:9876");

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM