1
在多master模式的基礎上,每個master節點都有至少一個對應的slave。
master節點可讀可寫,但是slave只能讀不能寫,類似於mysql的主從模式。
優點:在master宕機時,消費者可以從slave讀取消息,消息的實時性不會受影響,性能幾乎和多master一樣。
缺點:使用異步復制的同步方式有可能會有消息丟失的問題。
同多master多slave異步復制模式類似,區別在於master和slave之間的數據同步方式。 優點:同步雙寫的同步模式能保證數據不丟失。 缺點:發送單個消息RT會略長,性能相比異步復制低10%左右。 刷盤策略:同步刷盤和異步刷盤(指的是節點自身數據是同步還是異步存儲) 同步方式:同步雙寫和異步復制(指的一組master和slave之間數據的同步) **注意:**要保證數據可靠,需要采用同步刷盤和同步雙寫的方式,但性能會較其他方式低。
優點:所有模式中性能最高
缺點:單個master節點宕機期間,未被消費的消息在節點恢復之前不可用,消息的實時性就受到影響。
2 集群特點
- NameServer是一個幾乎無狀態節點,可集群部署,節點之間無任何信息同步。 - Broker部署相對復雜,Broker分為master和slave,一個master可以對應多個slave,但是一個slave只能對應一個Master,Master與Slave的對應關系通過指定相同的BrokerName,不同的Brokerid來定義,Brokerid為0表示Master,非0表示Slave。Master也可以部署多個。每個Broker與Nameserver集群中的所有節點建立長連接,定時注冊Topic信息到所有NameServer。 - Producer與NameServer集群中的其中一個節點(隨機選擇)建立長連接,定期從NameServer取Topic路由信息,並向提供Topic服務的Master建立長連接,且定時向Master發送心跳。Producer完全無狀態,可集群部署。 - Consumer與NameServer集群中的其中一個節點(隨機)建立長連接,定期從NameServer取Topic路由信息,並向提供Topic服務的Master、Slave建立長連接,且定時向Master、Slave發送心跳。Consumer既可以從Master訂閱信息,也可以從Slave訂閱信息,訂閱規則由Broker配置決定。
集群的工作流程
1. 啟動NameServer,NameServer起來后監聽端口,等待Broker,Producer、Consumer連上來,相當於一個路由控制中心。 2. Broker啟動,跟所有的NameServer保持長連接,定時發送心跳包。心跳包中包含當前Broker信息(IP+端口等)以及存儲所有Topic信息。注冊成功后,NameServer集群中就有Topice跟Broker的映射關系。 3. 收發消息前,先創建Topic,創建Topic時需要指定該Topic要存儲在哪些Broker上,也可以在發送消息時自動創建Topic。 4. Producer發送消息,啟動時先跟NameServer集群中的其中一台建立長連接,並從NameServer中獲取當前發送的Topic存在哪些Broker上,輪詢從隊列列表中選擇一個隊列,然后與隊列所在的Broker建立長連接從而向Broker發消息。 5. Consumer跟Producer類似,跟其中一台NameServer建立長連接,獲取當前訂閱Topic存在哪些Broker上,然后直接跟Broker建立連接通道,開始消費消息。
4.1 服務器環境
linux版本:debian10
JDK版本:1.8
主機環境:

4.2 部署java環境
注意:每台機器都需要部署java環境
#創建java的目錄 mkdir -p /apps/java #將下載好的文件傳到目錄下解壓 tar xvf jdk-8u271-linux-x64.tar.gz #創建軟鏈接 ln -sv jdk1.8.0_271/ jdk #配置環境變量 vim /etc/profile.d/java.sh #java環境變量 export JAVA_HOME=/apps/java/jdk export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH #同步文件 source /etc/profile.d/java.sh #測試java環境變量是否配置成功 root@ubuntu-40:/apps# java -version java version "1.8.0_271" Java(TM) SE Runtime Environment (build 1.8.0_271-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)
#下載RocketMQ包 root@ubuntu-10:/apps/rocketMQ# wget https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.9.0/rocketmq-all-4.9.0-bin-release.zip #解壓 root@ubuntu-10:/apps/rocketMQ# unzip rocketmq-all-4.9.0-bin-release.zip #設置RockerMQ的環境變量 vim /etc/profile.d/rocketmq.sh #rocketmq環境變量 export ROCKETMQ_HOME=/apps/rocketmq/rocketmq-all-4.9.0-bin-release export PATH=$ROCKETMQ_HOME/bin:$PATH #同步環境變量 source /etc/profile.d/rocketmq.sh #創建RocketMQ的消息存儲路徑 mkdir -p /data/rocketmq/mstore/{commitlog,consumequeue,index,checkpoint,abort}
master1配置文件
#編輯10.0.0.10上的Master Broker的配置文件broker-a.properties root@debian10-10:~# vim /apps/rocketmq/rocketmq-all-4.9.0-bin-release/conf/2m-2s-async/broker-a.properties #所屬集群名字 brokerClusterName=rocketmq-cluster #broker名字,注意此處不同的配置文件填寫的不一樣 brokerName=broker-a #0 表示 Master,>0 表示 Slave brokerId=0 #Broker 的角色,ASYNC_MASTER=異步復制Master,SYNC_MASTER=同步雙寫Master,SLAVE=slave節點 brokerRole=ASYNC_MASTER #nameServer地址,分號分割 namesrvAddr=10.0.0.10:9876;10.0.0.20:9876 #配置外網連接地址 brokerIP1 = 10.0.0.10 #在發送消息時,自動創建服務器不存在的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=/data/rocketmq/mstore #commitLog 存儲路徑 #storePathCommitLog=/data/rocketmq/mstore/commitlog #消費隊列存儲路徑存儲路徑 #storePathConsumeQueue=/data/rocketmq/mstore/consumequeue #消息索引存儲路徑 #storePathIndex=/data/rocketmq/mstore/index #checkpoint 文件存儲路徑 #storeCheckpoint=/data/rocketmq/mstore/checkpoint #abort 文件存儲路徑 #abortFile=/data/rocketmq/mstore/abort #限制的消息大小 maxMessageSize=65536 #flushCommitLogLeastPages=4 #flushConsumeQueueLeastPages=2 #flushCommitLogThoroughInterval=10000 #flushConsumeQueueThoroughInterval=60000 #刷盤方式 #- ASYNC_FLUSH 異步刷盤 #- SYNC_FLUSH 同步刷盤 flushDiskType=ASYNC_FLUSH #checkTransactionMessageEnable=false #發消息線程池數量 #sendMessageThreadPoolNums=128 #拉消息線程池數量 #pullMessageThreadPoolNums=128
slave1配置文件
#編輯10.0.0.30上的Master Broker的配置文件broker-a-s.properties root@debian10-30:~# vim /apps/rocketmq/rocketmq-all-4.9.0-bin-release/conf/2m-2s-async/broker-a-s.properties #所屬集群名字 brokerClusterName=rocketmq-cluster #broker名字,注意此處不同的配置文件填寫的不一樣 brokerName=broker-a #0 表示 Master,>0 表示 Slave brokerId=1 #Broker 的角色,ASYNC_MASTER=異步復制Master,SYNC_MASTER=同步雙寫Master,SLAVE=slave節點 brokerRole=SLAVE #nameServer地址,分號分割 namesrvAddr=10.0.0.10:9876;10.0.0.20:9876 #配置外網連接地址 brokerIP1 = 10.0.0.30 #在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數 defaultTopicQueueNums=4 #是否允許 Broker 自動創建Topic,建議線下開啟,線上關閉 autoCreateTopicEnable=true #是否允許 Broker 自動創建訂閱組,建議線下開啟,線上關閉 autoCreateSubscriptionGroup=true #Broker 對外服務的監聽端口 listenPort=11011 #刪除文件時間點,默認凌晨 4點 deleteWhen=04 #文件保留時間,默認 48 小時 fileReservedTime=120 #commitLog每個文件的大小默認1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每個文件默認存30W條,根據業務情況調整 mapedFileSizeConsumeQueue=300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #檢測物理文件磁盤空間 diskMaxUsedSpaceRatio=88 #存儲路徑 #storePathRootDir=/data/rocketmq/mstore #commitLog 存儲路徑 #storePathCommitLog=/data/rocketmq/mstore/commitlog #消費隊列存儲路徑存儲路徑 #storePathConsumeQueue=/data/rocketmq/mstore/consumequeue #消息索引存儲路徑 #storePathIndex=/data/rocketmq/mstore/index #checkpoint 文件存儲路徑 #storeCheckpoint=/data/rocketmq/mstore/checkpoint #abort 文件存儲路徑 #abortFile=/data/rocketmq/mstore/abort #限制的消息大小 maxMessageSize=65536 #flushCommitLogLeastPages=4 #flushConsumeQueueLeastPages=2 #flushCommitLogThoroughInterval=10000 #flushConsumeQueueThoroughInterval=60000 #刷盤方式 #- ASYNC_FLUSH 異步刷盤 #- SYNC_FLUSH 同步刷盤 flushDiskType=ASYNC_FLUSH #checkTransactionMessageEnable=false #發消息線程池數量 #sendMessageThreadPoolNums=128 #拉消息線程池數量 #pullMessageThreadPoolNums=128
master2配置文件
#編輯10.0.0.20上的Master Broker的配置文件broker-b.properties root@debian10-20:~# vim /apps/rocketmq/rocketmq-all-4.9.0-bin-release/conf/2m-2s-async/broker-b.properties #所屬集群名字 brokerClusterName=rocketmq-cluster #broker名字,注意此處不同的配置文件填寫的不一樣 brokerName=broker-b #0 表示 Master,>0 表示 Slave brokerId=0 #Broker 的角色,ASYNC_MASTER=異步復制Master,SYNC_MASTER=同步雙寫Master,SLAVE=slave節點 brokerRole=ASYNC_MASTER #nameServer地址,分號分割 namesrvAddr=10.0.0.10:9876;10.0.0.20:9876 #配置外網連接地址 brokerIP1 = 10.0.0.20 #在發送消息時,自動創建服務器不存在的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=/data/rocketmq/mstore #commitLog 存儲路徑 #storePathCommitLog=/data/rocketmq/mstore/commitlog #消費隊列存儲路徑存儲路徑 #storePathConsumeQueue=/data/rocketmq/mstore/consumequeue #消息索引存儲路徑 #storePathIndex=/data/rocketmq/mstore/index #checkpoint 文件存儲路徑 #storeCheckpoint=/data/rocketmq/mstore/checkpoint #abort 文件存儲路徑 #abortFile=/data/rocketmq/mstore/abort #限制的消息大小 maxMessageSize=65536 #flushCommitLogLeastPages=4 #flushConsumeQueueLeastPages=2 #flushCommitLogThoroughInterval=10000 #flushConsumeQueueThoroughInterval=60000 #刷盤方式 #- ASYNC_FLUSH 異步刷盤 #- SYNC_FLUSH 同步刷盤 flushDiskType=ASYNC_FLUSH #checkTransactionMessageEnable=false #發消息線程池數量 #sendMessageThreadPoolNums=128 #拉消息線程池數量 #pullMessageThreadPoolNums=128
slave2配置文件
#編輯10.0.0.40上的Master Broker的配置文件broker-b-s.properties root@debian10-40:~# vim /apps/rocketmq/rocketmq-all-4.9.0-bin-release/conf/2m-2s-async/broker-b-s.properties #所屬集群名字 brokerClusterName=rocketmq-cluster #broker名字,注意此處不同的配置文件填寫的不一樣 brokerName=broker-b #0 表示 Master,>0 表示 Slave brokerId=1 #Broker 的角色,ASYNC_MASTER=異步復制Master,SYNC_MASTER=同步雙寫Master,SLAVE=slave節點 brokerRole=SLAVE #nameServer地址,分號分割 namesrvAddr=10.0.0.10:9876;10.0.0.20:9876 #配置外網連接地址 brokerIP1 = 10.0.0.40 #在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數 defaultTopicQueueNums=4 #是否允許 Broker 自動創建Topic,建議線下開啟,線上關閉 autoCreateTopicEnable=true #是否允許 Broker 自動創建訂閱組,建議線下開啟,線上關閉 autoCreateSubscriptionGroup=true #Broker 對外服務的監聽端口 listenPort=11011 #刪除文件時間點,默認凌晨 4點 deleteWhen=04 #文件保留時間,默認 48 小時 fileReservedTime=120 #commitLog每個文件的大小默認1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每個文件默認存30W條,根據業務情況調整 mapedFileSizeConsumeQueue=300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #檢測物理文件磁盤空間 diskMaxUsedSpaceRatio=88 #存儲路徑 #storePathRootDir=/data/rocketmq/mstore #commitLog 存儲路徑 #storePathCommitLog=/data/rocketmq/mstore/commitlog #消費隊列存儲路徑存儲路徑 #storePathConsumeQueue=/data/rocketmq/mstore/consumequeue #消息索引存儲路徑 #storePathIndex=/data/rocketmq/mstore/index #checkpoint 文件存儲路徑 #storeCheckpoint=/data/rocketmq/mstore/checkpoint #abort 文件存儲路徑 #abortFile=/data/rocketmq/mstore/abort #限制的消息大小 maxMessageSize=65536 #flushCommitLogLeastPages=4 #flushConsumeQueueLeastPages=2 #flushCommitLogThoroughInterval=10000 #flushConsumeQueueThoroughInterval=60000 #刷盤方式 #- ASYNC_FLUSH 異步刷盤 #- SYNC_FLUSH 同步刷盤 flushDiskType=ASYNC_FLUSH #checkTransactionMessageEnable=false #發消息線程池數量 #sendMessageThreadPoolNums=128 #拉消息線程池數量 #pullMessageThreadPoolNums=128
#使用mqadmin 查看集群狀態
root@debian10-10:/apps/rocketmq/rocketmq-all-4.9.0-bin-release/bin# /apps/rocketmq/rocketmq-all-4.9.0-bin-release/bin/mqadmin clusterList -n 10.0.0.10:9876 RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0). RocketMQLog:WARN Please initialize the logger system properly. #Cluster Name #Broker Name #BID #Addr #Version #InTPS(LOAD) #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE rocketmq-cluster broker-a 0 10.0.0.10:10911 V4_9_0 0.00(0,0ms) 0.00(0,0ms) 0 451592.87 -1.0000 rocketmq-cluster broker-a 1 10.0.0.30:11011 V4_9_0 0.00(0,0ms) 0.00(0,0ms) 0 451592.87 0.2818 rocketmq-cluster broker-b 0 10.0.0.20:10911 V4_9_0 0.00(0,0ms) 0.00(0,0ms) 0 451592.87 -1.0000 rocketmq-cluster broker-b 2 10.0.0.40:11011 V4_9_0 0.00(0,0ms) 0.00(0,0ms) 0 451592.87 0.2887

