消息隊列之RocketMQ集群部署


RocketMQ集群搭建

1.1 RocketMQ集群的三種配置模式

1.1.1 2m-2s-async(主從異步)

在多master模式的基礎上,每個master節點都有至少一個對應的slave。

master節點可讀可寫,但是slave只能讀不能寫,類似於mysql的主從模式。

優點:在master宕機時,消費者可以從slave讀取消息,消息的實時性不會受影響,性能幾乎和多master一樣。

缺點:使用異步復制的同步方式有可能會有消息丟失的問題。

1.1.2 2m-2s-sync(主從同步)

同多master多slave異步復制模式類似,區別在於master和slave之間的數據同步方式。

優點:同步雙寫的同步模式能保證數據不丟失。

缺點:發送單個消息RT會略長,性能相比異步復制低10%左右。

刷盤策略:同步刷盤和異步刷盤(指的是節點自身數據是同步還是異步存儲)

同步方式:同步雙寫和異步復制(指的一組master和slave之間數據的同步)

**注意:**要保證數據可靠,需要采用同步刷盤和同步雙寫的方式,但性能會較其他方式低。

1.1.3 2m-noslave(僅master)

多個master節點組成集群,單個master節點宕機或者重啟對應用沒有影響。

 
         

優點:所有模式中性能最高

 
         

缺點:單個master節點宕機期間,未被消費的消息在節點恢復之前不可用,消息的實時性就受到影響。

 
         

注意:使用同步刷盤可以保證消息不丟失,同時Topic相對應的queue應該分布在集群中各個節點,而不是只在某節點上,否則,該節點宕機會對訂閱該Topic的應用造成影響。

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 集群搭建

4.1 服務器環境

linux版本:debian10

RocketMQ版本:4.9.0

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)

4.3 部署RocketMQ集群

注意:本次安裝采用2m-2s-async模式

#下載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

4.4 使用mqadmin命令查看集群

#使用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

4.5 使用rocketMQ-console查看集群狀態

 


免責聲明!

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



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