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時不要占用到默認端口計算之后會占用的端口,如果你啟動多主多從,也要注意自己配置的端口情況。當然如果一台機器上只有一個節點,那么可以不用在意這個問題。