目錄
1 MQ
? 1.1 MQ簡介
? 1.2 MQ的缺點
? 1.3 主流消息隊列比較
2 RocketMQ入門
? 2.1 環境搭建
? 2.2 安裝和啟動
? 2.3 目錄介紹
? 2.4 控制臺安裝
3 RocketMQ集群搭建
? 3.1 RocketMQ集群
? 3.2 集群搭建方式
?? 3.2.1 集群特點
?? 3.2.2 集群模式
? 3.3 雙主雙從集群搭建
?? 3.3.1總體架構
?? 3.3.2 集群工作流程
?? 3.3.3 服務器環境
?? 3.3.4 添加Host信息
?? 3.3.5 防火墻配置
?? 3.3.6 環境變量配置
?? 3.3.7 創建消息存儲路徑
?? 3.3.8 修改JVM大小
?? 3.3.9 修改broker配置文件
?? 3.3.10 服務啟動
?? 3.3.11查看進程狀態
?? 3.3.12 查看日志
? 3.4 mqadmin管理工具
? 3.5 集群監控平臺搭建
1 MQ(Message Quene)
1.1 MQ簡介
消息隊列是一種先進先出的數據結構。
其應用場景主要包含:
-
應用解耦
系統耦合性越高,容錯性越低。以用戶下單購買業務為例。傳統的做法是,訂單系統調用庫存系統的接口。一旦庫存系統出現故障或因為升級等原因暫時不可用,都會造成下單操作異常。
引入消息隊列后, 假如在下單時庫存系統不能正常使用,也不影響正常下單。當庫存系統恢復正常后,補充處理消息隊列中的訂單消息即可。實現訂單系統與庫存系統的應用解耦。
-
流量削峰
秒殺活動,一般會因為流量過大,導致流量暴增,應用掛掉。為解決這個問題,需要在應用前端加入消息隊列。服務器接收用戶的請求后,首先寫入消息隊列。假如消息隊列長度超過最大數量,則直接拋棄用戶請求或跳轉到錯誤頁面。秒殺業務根據消息隊列中的請求信息,再做后續處理。
-
數據分發
通過消息隊列可以讓數據在多個系統間流通,數據的產生方不需要關心誰來使用數據,只要將數據發送到消息隊列,數據使用方直接獲取數據即可。
1.2 MQ的缺點
-
系統可用性降低
系統引入的外部依賴越多,系統穩定性越差,一旦MQ宕機,就會對業務造成影響。
如何保證MQ的高可用?
-
系統復雜度提高
以前系統是同步的遠程調用,現在是通過MQ異步調用。
如何保證消息沒有被重復消費?怎么處理消息丟失情況?如何保證消息傳遞的順序性?
-
一致性問題
A系統處理完業務,通過MQ給給B、C、D系統發消息,如果B系統、C系統處理成功、D系統處理失敗。
如何保證消息數據處理的一致性?
1.3 主流消息隊列比較
apache rocketmq官方文檔上有關于主流消息隊列的比較:主流消息隊列比較
2 RocketMQ入門
RocketMQ是阿里巴巴在2012年開源的第三代分布式消息中間件,2016年捐贈給Apache。作為一款純java、分布式、隊列模型的開源消息中間件,它支持事務消息、順序消息、批量消息、定時消息、消息回溯等。
2.1 環境準備
2.2 目錄介紹
bin:啟動腳本,包括shell腳本和CMD腳本。
-
conf:實例配置文件,包括broker配置文件、logback配置文件等。
- -- 2m-noslave 雙主
- -- 2m-2s-sync 雙主雙從同步復制
- -- 2m-2s-async 雙主雙從異步復制
lib:依賴jar包,包括Netty、commons-lang、FastJson等。
2.3 安裝和啟動
官網
需要下載的文件有:
帶source的源碼需要自己編譯,帶bin的二進制文件不需編譯可直接使用。
- 服務器環境
IP | 角色 |
---|---|
192.168.217.130 | nameserver、brokerserver |
- 我使用的源碼安裝方法,進入壓縮文件目錄解壓并編譯
#解壓
unzip rocketmq-all-4.4.0-source-release.zip
cd cd rocketmq-all-4.4.0/
# 編譯
mvn -Prelease-all -DskipTests clean install -U
# 移到編譯好的文件到/usr/local/目錄下
cd distribution/target/
mv apache-rocketmq /usr/local/rocketmq
- 添加hosts信息
vim /etc/hosts
配置如下:
192.168.217.130 rocketmqNameserver1
192.168.217.130 rocketmqMaster1
配置完成后, 重啟網卡
systemctl restart network
- RocketMQ對內存要求比較高,我們需要按實際情況修改默認JVM大小
cd /usr/local/rocketmq
# 編輯bin目錄下的runbroker.sh和runserver.sh
vi runbroker.sh
vi runserver.sh
# runserver.sh修改前
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# runserver.sh修改后
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# runbroker.sh修改前
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
# runbroker.sh修改后
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g"
- 在bin目錄下啟動NameServer
# 啟動NameServer
> nohup sh bin/mqnamesrv &
# 查看啟動日志
> tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
- 在bin目錄下啟動Broker
# 啟動Broker
>nohup sh bin/mqbroker -n localhost:9876 &
# 查看啟動日志
>tail -f ~/logs/rocketmqlogs/broker.log
The broker boot success...
# 查看啟動進程
> jps
1875 Jps
1782 NamesrvStartup
1817 BrokerStartup
- 關閉RocketMQ
# 關閉broker
> sh bin/mqshutdown broker
# 關閉nameServer
> sh bin/mqshutdown namesrv
2.4 控制臺安裝
RocketMQ 有一個對其擴展的開源項目incubator-rocketmq-externals,這個項目中有一 個子模塊叫 rocketmq‐console ,這個便是管理控制臺項目了。
下載解壓后:
我們可以用idea打開此項目,修改application.properties,配置服務器的ip地址
啟動項目,瀏覽http://localhost:8080
3 RocketMQ集群搭建
3.1 RocketMQ集群
RocketMQ消息隊列的整體部署架構如下圖所示:
通信過程:
(1) Broker啟動后需要完成一次將自己注冊至NameServer的操作;隨后每隔30s時間定期向NameServer上報Topic路由信息;
(2) 消息生產者Producer作為客戶端發送消息時候,需要根據Msg的Topic從本地緩存的TopicPublishInfoTable獲取路由信息。如果沒有則更新路由信息會從NameServer上重新拉??;
(3) 消息生產者Producer根據(2)中獲取的路由信息選擇一個隊列(MessageQueue)進行消息發送;Broker作為消息的接收者收消息并落盤存儲;
各角色介紹:
(1) NameServer:是一個幾乎無狀態節點,可集群部署,在消息隊列 MQ 中提供命名服務,更新和發現 Broker 服務。
(2) Broker:消息中轉角色,負責存儲消息,轉發消息。分為 Master Broker 和 Slave Broker,一個 Master Broker 可以對應多個 Slave Broker,但是一個 Slave Broker 只能對應一個 Master Broker。Broker 啟動后需要完成一次將自己注冊至 Name Server 的操作;隨后每隔 30s 定期向 Name Server 上報 Topic 路由信息。
Broker中還存在一些非常重要的名詞需要說明:
①Topic和Queue
RocketMQ中Topic只代表普通的消息隊列,而Queue是組成Topic的更小單元,集群消費模式下一個消費者只消費該Topic中部分Queue中的消息,當一個消費者開啟廣播模式時則會消費該Topic下所有Queue中的消息。
具體可參考https://blog.csdn.net/binzhaomobile/article/details/73332463
②Tag
Topic 和 Tag 的定義如下:
Topic:消息主題,通過 Topic 對不同的業務消息進行分類。
Tag:消息標簽,用來進一步區分某個 Topic 下的消息分類,消息從生產者發出即帶上的屬性。
通常情況下,不同的 Topic 之間的消息沒有必然的聯系,而 Tag 則用來區分同一個 Topic 下相互關聯的消息。
Topic 與 Tag 最佳實踐
(3) Producer:與 Name Server 集群中的其中一個節點(隨機)建立長鏈接(Keep-alive),定期從 Name Server 讀取 Topic 路由信息,并向提供 Topic 服務的 Master Broker 建立長鏈接,且定時向 Master Broker 發送心跳。
(4) Consumer:與 Name Server 集群中的其中一個節點(隨機)建立長連接,定期從 Name Server 拉取 Topic 路由信息,并向提供 Topic 服務的 Master Broker、Slave Broker 建立長連接,且定時向 Master Broker、Slave Broker 發送心跳。Consumer 既可以從 Master Broker 訂閱消息,也可以從 Slave Broker 訂閱消息,訂閱規則由 Broker 配置決定。
3.2 集群搭建方式
3.2.1 集群特點
- NameServer是一個幾乎無狀態節點,節點之間不需要信息同步。每新加入一個NameServer,Broker會自動上報信息。
- Producer完全無狀態,不需要數據同步。
- Consumer不需要數據同步。
- Broker部署相對復雜,Broker分為Master與Slave,一個Master可以對應多個 Slave,但是一個Slave只能對應一個Master,Master與Slave的對應關系通過指定相 同的BrokerName,不同的BrokerId來定義,BrokerId為0表示Master,非0表示 Slave。Master也可以部署多個。
3.2.2 集群模式
1)單Master模式
這種方式風險較大,一旦Broker重啟或者宕機時,會導致整個服務不可用。不建議線上 環境使用,可以用于本地測試。
2)多Master模式
一個集群無Slave,全是Master,例如2個Master或者3個Master,這種模式的優缺點如 下:
- 優點:配置簡單,單個Master宕機或重啟維護對應用無影響,在磁盤配置為RAID10 時,即使機器宕機不可恢復情況下,由于RAID10磁盤非??煽浚⒁膊粫G(異 步刷盤丟失少量消息,同步刷盤一條不丟),性能最高;
- 缺點:單臺機器宕機期間,這臺機器上未被消費的消息在機器恢復之前不可訂閱,消 息實時性會受到影響。
3)多Master多Slave模式(異步)
每個Master配置一個Slave,有多對Master-Slave,HA采用異步復制方式,主備有短暫 消息延遲(毫秒級),這種模式的優缺點如下: - 優點:即使磁盤損壞,消息丟失的非常少,且消息實時性不會受影響,同時Master 宕機后,消費者仍然可以從Slave消費,而且此過程對應用透明,不需要人工干預, 性能同多Master模式幾乎一樣;
- 缺點:Master宕機,磁盤損壞情況下會丟失少量消息。
4)多Master多Slave模式(同步)
每個Master配置一個Slave,有多對Master-Slave,HA采用同步雙寫方式,即只有主備 都寫成功,才向應用返回成功,這種模式的優缺點如下: * 優點:數據與服務都無單點故障,Master宕機情況下,消息無延遲,服務可用性與 數據可用性都非常高; - 缺點:性能比異步復制模式略低(大約低10%左右),發送單個消息的RT會略高, 且目前版本在主節點宕機后,備機不能自動切換為主機。
3.3 雙主雙從集群搭建
3.3.1 總體架構
消息高可用采用2m-2s(同步雙寫)方式
3.3.2 集群工作流程
- 啟動NameServer,NameServer起來后監聽端口,等待Broker、Producer、 Consumer連上來,相當于一個路由控制中心。
- Broker啟動,跟所有的NameServer保持長連接,定時發送心跳包。心跳包中包含當 前Broker信息(IP+端口等)以及存儲所有Topic信息。注冊成功后,NameServer集群 中就有Topic跟Broker的映射關系。
- 收發消息前,先創建Topic,創建Topic時需要指定該Topic要存儲在哪些Broker上, 也可以在發送消息時自動創建Topic。
- Producer發送消息,啟動時先跟NameServer集群中的其中一臺建立長連接,并從 NameServer中獲取當前發送的Topic存在哪些Broker上,輪詢從隊列列表中選擇一 個隊列,然后與隊列所在的Broker建立長連接從而向Broker發消息。
- Consumer跟Producer類似,跟其中一臺NameServer建立長連接,獲取當前訂閱 Topic存在哪些Broker上,然后直接跟Broker建立連接通道,開始消費消息。
3.3.3 服務器環境
IP | 角色 | 架構模式 |
---|---|---|
192.168.217.130 | nameserver、brokerserver | Master1 |
192.168.217.132 | nameserver、brokerserver | Master2 |
192.168.217.133 | nameserver、brokerserver | Slave1 |
192.168.217.134 | nameserver、brokerserver | Slave2 |
3.3.4 添加Host信息(四臺服務器都要配置)
vim /etc/hosts
配置如下:
# nameserver
192.168.217.130 rocketmq‐nameserver1
192.168.217.132 rocketmq‐nameserver2
192.168.217.133 rocketmq‐nameserver3
192.168.217.134 rocketmq‐nameserver4
# broker
192.168.217.130 rocketmq‐master1
192.168.217.132 rocketmq‐master2
192.168.217.133 rocketmq‐slave1
192.168.217.134 rocketmq‐slave2
配置完成后, 重啟網卡
systemctl restart network
3.3.5 防火墻配置 (四臺服務器都要配置)
宿主機需要遠程訪問虛擬機的rocketmq服務和web服務,需要開放相關的端口號,簡單 粗暴的方式是直接關閉防火墻
# 安裝 firewall-cmd 和 systemctl 命令
yum install firewalld systemd -y
# 關閉防火墻
systemctl stop firewalld.service
# 查看防火墻的狀態
firewall-cmd --state
# 禁止firewall開機啟動
systemctl disable firewalld.service
或者為了安全,只開放特定的端口號,RocketMQ默認使用3個端口:9876 、10911 、 11011 。如果防火墻沒有關閉的話,那么防火墻就必須開放這些端口:
- nameserver 默認使用 9876 端口
- master 默認使用 10911 端口
- slave 默認使用11011 端口
執行以下命令:
# 開放name server默認端口
firewall-cmd --remove-port=9876/tcp --permanent
# 開放master默認端口
firewall-cmd --remove-port=10911/tcp --permanent
# 開放slave默認端口 (當前集群模式可不開啟)
firewall-cmd --remove‐port=11011/tcp --permanent
# 重啟防火墻
firewall-cmd --reload
3.3.6 環境變量配置(四臺臺服務器都要配置)
vim /etc/profile
在profile文件的末尾加入如下命令
#set rocketmq
ROCKETMQ_HOME=/usr/local/rocketmq
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH
輸入:wq! 保存并退出, 并使得配置立刻生效:
source /etc/profile
3.3.7 創建消息存儲路徑(四臺服務器都要配置)
[root@rocketmq‐nameserver1 local]# cd rocketmq/
[root@rocketmq‐nameserver1 rocketmq]# mkdir logs
[root@rocketmq‐nameserver1 rocketmq]# mkdir store
[root@rocketmq‐nameserver1 rocketmq]# cd store/
[root@rocketmq‐nameserver1 store]# mkdir commitlog
[root@rocketmq‐nameserver1 store]# mkdir consumequene
[root@rocketmq‐nameserver1 store]# mkdir index
進入conf目錄,使用命令替換所有xml文件中的${user.home},保證日志路徑正確
sed -i 's#${user.home}#/usr/local/rocketmq#g' *.xml
3.3.8 修改默認JVM大小
# 編輯bin目錄下的runbroker.sh和runserver.sh
vi runbroker.sh
vi runserver.sh
# runserver.sh修改前
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# runserver.sh修改后
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
# runbroker.sh修改前
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
# runbroker.sh修改后
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g"
3.3.9 broker配置文件
1)master1
服務器192.168.217.130
此時通過jps命令查看RocketMQ是否正在運行,如果運行中需要關閉它,關閉命令參考2.2
vi /usr/local/rocketmq/conf/2m‐2s‐sync/broker‐a.properties
修改配置如下:
#所屬集群名字
brokerClusterName=rocketmq‐cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker‐a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=rocketmq‐nameserver1:9876;rocketmq‐nameserver2:9876;rocketmq‐nameserver3:9876
;rocketmq‐nameserver4:9876
#在發送消息時,自動創建服務器不存在的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/rocketmq/store
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/store/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=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發消息線程池數量
#sendMessageThreadPoolNums=128
#拉消息線程池數量
#pullMessageThreadPoolNums=128
2)master2
服務器192.168.217.132
vi /usr/local/rocketmq/conf/2m‐2s‐sync/broker‐b.properties
修改配置如下:
#所屬集群名字
brokerClusterName=rocketmq‐cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker‐b
#0 表示 Master,>0 表示 Slave
brokerId=0 #nameServer地址,分號分割
namesrvAddr=rocketmq‐nameserver1:9876;rocketmq‐nameserver2:9876;rocketmq‐nameserver3:9876
;rocketmq‐nameserver4:9876
#在發送消息時,自動創建服務器不存在的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/rocketmq/store
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/store/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=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發消息線程池數量
#sendMessageThreadPoolNums=128
#拉消息線程池數量
#pullMessageThreadPoolNums=128
3)slave1
服務器192.168.217.133
vi /usr/local/rocketmq/conf/2m‐2s‐sync/broker‐a‐s.properties
修改配置如下:
#所屬集群名字
brokerClusterName=rocketmq‐cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker‐a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=rocketmq‐nameserver1:9876;rocketmq‐nameserver2:9876;rocketmq‐nameserver3:9876
;rocketmq‐nameserver4:9876
#在發送消息時,自動創建服務器不存在的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=/usr/local/rocketmq/store
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/store/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=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發消息線程池數量
#sendMessageThreadPoolNums=128
#拉消息線程池數量
#pullMessageThreadPoolNums=128
4)slave2
服務器192.168.217.134
vi /usr/local/rocketmq/conf/2m‐2s‐sync/broker‐b‐s.properties
修改配置如下:
#所屬集群名字
brokerClusterName=rocketmq‐cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker‐b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=rocketmq‐nameserver1:9876;rocketmq‐nameserver2:9876;rocketmq‐nameserver3:9876
;rocketmq‐nameserver4:9876 #在發送消息時,自動創建服務器不存在的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=/usr/local/rocketmq/store
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/store/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=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發消息線程池數量
#sendMessageThreadPoolNums=128
#拉消息線程池數量
#pullMessageThreadPoolNums=128
3.3.10 服務啟動
1)啟動NameServe集群
分別在四臺服務器啟動NameServer
cd /usr/local/rocketmq/bin
nohup sh mqnamesrv &
2)啟動Broker集群
- 在192.168.217.130上啟動master1
cd /usr/local/rocketmq/bin
nohup sh mqbroker ‐c /usr/local/rocketmq/conf/2m-2s-sync/broker-a.properties > /dev/null 2>&1 &
- 在192.168.217.132上啟動master2
cd /usr/local/rocketmq/bin
nohup sh mqbroker ‐c /usr/local/rocketmq/conf/2m-2s-sync/broker-b.properties > /dev/null 2>&1 &
- 在192.168.217.133啟動slave1
cd /usr/local/rocketmq/bin
nohup sh mqbroker ‐c /usr/local/rocketmq/conf/2m-2s-sync/broker-a-s.properties > /dev/null 2>&1 &
- 在192.168.217.134上啟動slave2
cd /usr/local/rocketmq/bin
nohup sh mqbroker ‐c /usr/local/rocketmq/conf/2m-2s-sync/broker-b-s.properties > /dev/null 2>&1 &
3.3.11 查看進程狀態
[root@localhost bin]# jps
3107 NamesrvStartup
3131 BrokerStartup
3231 Jps
3.3.12 查看日志
# 查看nameServer日志
tail ‐500f rocketmq/logs/rocketmqlogs/namesrv.log
# 查看broker日志
tail ‐500f rocketmq/logs/rocketmqlogs/broker.log
3.4 mqadmin管理工具
進入RocketMQ安裝位置,在bin目錄下執行
./mqadmin {command} {args}
詳細命令可參考https://www.iteye.com/blog/jameswxx-2091971
注意事項
- 幾乎所有命令都需要配置-n表示NameServer地址,格式為ip:port
- 幾乎所有命令都可以通過-h獲取幫助
- 如果既有Broker地址(-b)配置項又有clusterName(-c)配置項,則優先以Broker 地址執行命令;如果不配置Broker地址,則對集群中所有主機執行命令
3.5 集群監控平臺搭建
除了通過命令行的方式可以對集群進行管理,我們還可以使用控制臺對集群進行管理。我們在部署單節點集群時已經說明了它的使用方法,只需要修改項目的namesrvAddr即可。
rocketmq.config.namesrvAddr=192.168.217.130:9876;192.168.217.132:9876;192.168.217.133:9876;192.168.217.134:9876