1. 程式人生 > >RocketMQ學習筆記(16)----RocketMQ搭建雙主雙從(非同步複製)叢集

RocketMQ學習筆記(16)----RocketMQ搭建雙主雙從(非同步複製)叢集

1. 修改RocketMQ預設啟動埠

  由於只有兩臺機器,部署雙主雙從需要四個節點,所以只能修改rocketmq的預設啟動埠,從官網下載rocketmq的source檔案,解壓後使用idea開啟,全域性搜尋9876,將所有使用9876埠的地方改為9877。

  在終端開啟,使用:mvn -Prelease-all -DskipTests clean install命令打包,打包完成後在專案的distribution\target將會有如下兩個包:

  

  分別是linux和win下執行的包。

  將字尾為.tar.gz的包上傳到伺服器上。並使用tar -zxvf 檔名解壓

2. 建立資料儲存資料夾

  在解壓後的資料夾中新建資料儲存資料夾

mkdir /usr/local/middle/rocketmq-9877/data
#commitLog 儲存路徑
mkdir /usr/local/middle/rocketmq-9877/data/commitlog
#消費佇列儲存路徑儲存路徑
mkdir /usr/local/middle/rocketmq-9877/data/consumequeue
#訊息索引儲存路徑
mkdir /usr/local/middle/rocketmq-9877/data/index

  兩臺伺服器上都要上傳包和在新傳的包解壓收的資料夾下都要新建資料夾。這裡算上樓主之前上傳的預設埠的rocketmq節點,每臺已經有兩個節點了。兩臺機器剛好可以做四個節點,雙主雙從。

3. 修改log檔案

  跟雙master時操作一樣,就不再詳述,文章最後會放搭建雙Master叢集步驟的連結。

4. 修改配置檔案

  分別進入兩臺機器的rocketmq目錄下的conf/2m-2s-sync/下,共有四個檔案:

  

  分別做如下配置

  broker-a.properties

#所屬叢集名字
borkerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置檔案填寫的不一樣
brokerName=broker-a
#0 表示Master, >0 表示Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr
=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver1:9877;rocketmq-nameserver2:9877; #在發訊息時,自動建立伺服器不存在的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/middle/rocketmq/data #commitLog儲存路徑 storePathCommitLog=/usr/local/middle/rocketmq/data/commitlog #消費佇列儲存路徑 storePathConsumeQueue=/usr/local/middle/rocketmq/data/consumequeue #訊息索引儲存路徑 storePathIndex=/usr/local/middle/rocketmq/data/index #checkpoint 檔案儲存路徑 storeCheckPoint=/usr/local/middle/rocketmq/data/checkpoint #abort 檔案儲存路徑 abortFile=/usr/local/middle/rocketmq/data/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 #拉訊息執行緒池數量

  broker-a-s.properties

#所屬叢集名字
borkerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置檔案填寫的不一樣
brokerName=broker-a
#0 表示Master, >0 表示Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver1:9877;rocketmq-nameserver2:9877;
#在發訊息時,自動建立伺服器不存在的topic,預設建立的佇列數
defaultTopicQueueNums=4
#是否允許Broker自動建立Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
#是否允許Broker自動建立訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽埠
listenPort=10915
#刪除檔案時間點,預設凌晨4點
deleteWhen=04
#檔案保留時間,預設48小時
fileReservedTime=120
#commitLog每個檔案的大小預設1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個檔案預設存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理檔案磁碟空間
diskMaxUsedSpaceRatio=88
#儲存路徑
storePathRootDir=/usr/local/middle/rocketmq/data
#commitLog儲存路徑
storePathCommitLog=/usr/local/middle/rocketmq/data/commitlog
#消費佇列儲存路徑
storePathConsumeQueue=/usr/local/middle/rocketmq/data/consumequeue
#訊息索引儲存路徑
storePathIndex=/usr/local/middle/rocketmq/data/index
#checkpoint 檔案儲存路徑
storeCheckPoint=/usr/local/middle/rocketmq/data/checkpoint
#abort 檔案儲存路徑
abortFile=/usr/local/middle/rocketmq/data/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=SYNC_FLUSH
 
#checkTransactionMessageEnable=false
#發訊息執行緒池數量
#sendMessageThreadPoolNums=128
#拉訊息執行緒池數量
#pullMessageThreadPoolNums=128

  broker-b.properties

#所屬叢集名字
borkerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置檔案填寫的不一樣
brokerName=broker-b
#0 表示Master, >0 表示Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver1:9877;rocketmq-nameserver2:9877;
#在發訊息時,自動建立伺服器不存在的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/middle/rocketmq/data
#commitLog儲存路徑
storePathCommitLog=/usr/local/middle/rocketmq/data/commitlog
#消費佇列儲存路徑
storePathConsumeQueue=/usr/local/middle/rocketmq/data/consumequeue
#訊息索引儲存路徑
storePathIndex=/usr/local/middle/rocketmq/data/index
#checkpoint 檔案儲存路徑
storeCheckPoint=/usr/local/middle/rocketmq/data/checkpoint
#abort 檔案儲存路徑
abortFile=/usr/local/middle/rocketmq/data/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
#拉訊息執行緒池數量

  broker-b-s.properties

#所屬叢集名字
borkerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置檔案填寫的不一樣
brokerName=broker-b
#0 表示Master, >0 表示Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver1:9877;rocketmq-nameserver2:9877;
#在發訊息時,自動建立伺服器不存在的topic,預設建立的佇列數
defaultTopicQueueNums=4
#是否允許Broker自動建立Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
#是否允許Broker自動建立訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽埠
listenPort=10910
#刪除檔案時間點,預設凌晨4點
deleteWhen=04
#檔案保留時間,預設48小時
fileReservedTime=120
#commitLog每個檔案的大小預設1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個檔案預設存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理檔案磁碟空間
diskMaxUsedSpaceRatio=88
#儲存路徑
storePathRootDir=/usr/local/middle/rocketmq/data
#commitLog儲存路徑
storePathCommitLog=/usr/local/middle/rocketmq/data/commitlog
#消費佇列儲存路徑
storePathConsumeQueue=/usr/local/middle/rocketmq/data/consumequeue
#訊息索引儲存路徑
storePathIndex=/usr/local/middle/rocketmq/data/index
#checkpoint 檔案儲存路徑
storeCheckPoint=/usr/local/middle/rocketmq/data/checkpoint
#abort 檔案儲存路徑
abortFile=/usr/local/middle/rocketmq/data/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=SYNC_FLUSH
 
#checkTransactionMessageEnable=false
#發訊息執行緒池數量
#sendMessageThreadPoolNums=128
#拉訊息執行緒池數量
#pullMessageThreadPoolNums=128

  配置檔案中的各個資料儲存目錄根據自己路徑情況自行修改。

5. 修改日誌檔案

  參照雙Master.

6. 修改後傳入的節點的JVM啟動引數

  參照雙Master;

7. 啟動NameServer和Broker

  參照雙Master

四個節點都啟動完成後,啟動控制檯,可以看到

  表明四個節點的Broker已經啟動成功,且一個Master對應一個Slave,且當向Broker傳送訊息時,主從節點直接訊息一致。

  此時我們先向叢集傳送訊息(不消費),然後停掉一臺主節點。

  啟動Consumer,訊息仍然可以完全消費,剛好驗證了從節點在叢集中的作用,保證Master掛掉時訊息不會丟失。

  雙Maste叢集隨筆傳送門:RocketMQ學習筆記(4)----RocketMQ搭建雙Master叢集

 注意:

  broker啟動後會佔用三個埠:

  伺服器監聽埠(預設10911)

  高可用埠(監聽slave的請求),端口占用為伺服器監聽埠+1

  快速伺服器埠(VIP服務埠,也就是說客戶端可以選擇使用伺服器監聽埠或者這個埠通訊,一般建議是設定VIP渠道為false的,即使用伺服器監聽埠通訊【不設定就是10911這個埠】),這個埠的值為伺服器監聽埠-2,
  所以在配置broker.properties時不要佔用到預設埠計算之後會佔用的埠,如果你啟動多主多從,也要注意自己配置的埠情況。當然如果一臺機器上只有一個節點,那麼可以不用在意這個問題。