一、環(huán)境準(zhǔn)備
linux環(huán)境、64位 JDK 1.8+、RocketMQ環(huán)境包
官網(wǎng):https://rocketmq.apache.org/zh/
二、服務(wù)器環(huán)境及規(guī)劃
ip 角色 架構(gòu)模式
10.0.0.22 nameserver1:9876、broker-master1:10911、broker-slave2:11011 Master1、Slave2
10.0.0.23 nameserver2:9876、broker-master2:10911、broker-slave1:11011 Master2、Slave1
2.1 開放端口
每個服務(wù)器需開放七個端口
9876 #namesrv
10911、10909、10912 #broker主節(jié)點
11011、11009、11012 #broker從節(jié)點
端口規(guī)則說明:
namesrv默認(rèn)端口:9876
假設(shè)broker配置的 ListenPort 端口:10911
則vip 通道端口為:ListenPort - 2 = 10909
則HA 通道端口為: ListenPort + 1 = 10912
三、開始部署
3.1 做hosts解析(全部機(jī)器)
vim /etc/hosts
10.0.0.22 rocketmq-1
10.0.0.23 rocketmq-2
3.2 下載包(這里選擇的4.9.3版本)
wget https://archive.apache.org/dist/rocketmq/4.9.3/rocketmq-all-4.9.3-bin-release.zip
3.3 解壓軟件包并配置環(huán)境變量(全部機(jī)器)
unzip rocketmq-all-4.9.3-bin-release.zip -d /usr/local/rocketmq/
vim /etc/profile
ROCKETMQ_HOME=/usr/local/rocketmq/rocketmq-4.9.3
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH
source /etc/profile
3.4 修改配置
進(jìn)入/usr/local/rocketmq/rocketmq-4.9.3/conf目錄查看
2m-2s-async 目錄為雙master雙slave異步復(fù)制配置目錄
2m-2s-sync 目錄為雙master雙slave同步雙寫配置目錄
2m-noslave 目錄為多master配置目錄
這里我們只需要配置2m-2s-sync這個目錄即可
10.0.0.22 服務(wù)器:broker配置
master1
vim /usr/local/rocketmq/rocketmq-4.9.3/conf/2m-2s-sync/broker-a.properties
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=10.0.0.22:9876;10.0.0.23:9876
#在發(fā)送消息時,自動創(chuàng)建服務(wù)器不存在的topic,默認(rèn)創(chuàng)建的隊列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動創(chuàng)建Topic,建議線下開啟,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創(chuàng)建訂閱組,建議線下開啟,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對外服務(wù)的監(jiān)聽端口
listenPort=10911
#刪除文件時間點,默認(rèn)凌晨 4點
deleteWhen=04
#文件保留時間,默認(rèn) 48 小時
fileReservedTime=120
#commitLog每個文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認(rèn)存30W條,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/usr/local/rocketmq/master
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/master/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/master/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/master/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/master/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/master/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池數(shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池數(shù)量
#pullMessageThreadPoolNums=128
slave2
vim /usr/local/rocketmq/rocketmq-4.9.3/conf/2m-2s-sync/broker-b-s.properties
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=10.0.0.22:9876;10.0.0.23:9876
#在發(fā)送消息時,自動創(chuàng)建服務(wù)器不存在的topic,默認(rèn)創(chuàng)建的隊列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動創(chuàng)建Topic,建議線下開啟,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創(chuàng)建訂閱組,建議線下開啟,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對外服務(wù)的監(jiān)聽端口
listenPort=11011
#刪除文件時間點,默認(rèn)凌晨 4點
deleteWhen=04
#文件保留時間,默認(rèn) 48 小時
fileReservedTime=120
#commitLog每個文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認(rèn)存30W條,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/usr/local/rocketmq/slave
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/slave/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/slave/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/slave/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/slave/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/slave/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SLAVE
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池數(shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池數(shù)量
#pullMessageThreadPoolNums=128
10.0.0.23 服務(wù)器:broker配置
master2
vim /usr/local/rocketmq/rocketmq-4.9.3/conf/2m-2s-sync/broker-b.properties
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=10.0.0.22:9876;10.0.0.23:9876
#在發(fā)送消息時,自動創(chuàng)建服務(wù)器不存在的topic,默認(rèn)創(chuàng)建的隊列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動創(chuàng)建Topic,建議線下開啟,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創(chuàng)建訂閱組,建議線下開啟,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對外服務(wù)的監(jiān)聽端口
listenPort=10911
#刪除文件時間點,默認(rèn)凌晨 4點
deleteWhen=04
#文件保留時間,默認(rèn) 48 小時
fileReservedTime=120
#commitLog每個文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認(rèn)存30W條,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/usr/local/rocketmq/master
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/master/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/master/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/master/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/master/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/master/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池數(shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池數(shù)量
#pullMessageThreadPoolNums=128
slave1
vim /usr/local/rocketmq/rocketmq-4.9.3/conf/2m-2s-sync/broker-a-s.properties
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=10.0.0.22:9876;10.0.0.23:9876
#在發(fā)送消息時,自動創(chuàng)建服務(wù)器不存在的topic,默認(rèn)創(chuàng)建的隊列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動創(chuàng)建Topic,建議線下開啟,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動創(chuàng)建訂閱組,建議線下開啟,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對外服務(wù)的監(jiān)聽端口
listenPort=11011
#刪除文件時間點,默認(rèn)凌晨 4點
deleteWhen=04
#文件保留時間,默認(rèn) 48 小時
fileReservedTime=120
#commitLog每個文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認(rèn)存30W條,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲路徑
storePathRootDir=/usr/local/rocketmq/slave
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/slave/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/rocketmq/slave/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/slave/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/slave/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/slave/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SLAVE
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池數(shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池數(shù)量
#pullMessageThreadPoolNums=128
3.5 修改啟動腳本(所有服務(wù)器)
原因:我啟動的虛擬機(jī)的內(nèi)存設(shè)置的是4G,而mq默認(rèn)的JVM最小的堆內(nèi)容是8G,太大了,不修改將無法啟動。
vim /usr/local/rocketmq/rocketmq-4.9.3/bin/runserver.sh
修改如下:
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
vim /usr/local/rocketmq/rocketmq-4.9.3/bin/runbroker.sh
修改如下:
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m"
3.6 啟動服務(wù)
創(chuàng)建日志目錄
mkdir /usr/local/rocketmq/rocketmq-4.9.3/logs
啟動nameserver (全部機(jī)器)
cd /usr/local/rocketmq/rocketmq-4.9.3/bin/
nohup sh mqnamesrv > /usr/local/rocketmq/rocketmq-4.9.3/logs/mqnamesrv.log 2>&1 &
tail -f /usr/local/rocketmq/rocketmq-4.9.3/logs/mqnamesrv.log
下面表示啟動成功

啟動broker
10.0.0.22機(jī)器
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a.properties > /usr/local/rocketmq/rocketmq-4.9.3/logs/broker-a.log &
tail -f /usr/local/rocketmq/rocketmq-4.9.3/logs/broker-a.log
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b-s.properties > /usr/local/rocketmq/rocketmq-4.9.3/logs/broker-b-s.log &
tail -f /usr/local/rocketmq/rocketmq-4.9.3/logs/broker-b-s.log
10.0.0.23機(jī)器
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b.properties > /usr/local/rocketmq/rocketmq-4.9.3/logs/broker-b.log &
tail -f /usr/local/rocketmq/rocketmq-4.9.3/logs/broker-b.log
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a-s.properties > /usr/local/rocketmq/rocketmq-4.9.3/logs/broker-a-s.log &
tail -f /usr/local/rocketmq/rocketmq-4.9.3/logs/broker-a-s.log
啟動完成,通過jps查看java進(jìn)程
[root@rocketmq-1 rocketmq-4.9.3]# jps
23635 BrokerStartup
23733 BrokerStartup
23038 NamesrvStartup
23823 Jps
關(guān)閉命令
停止服務(wù)的時候需要注意,要先停止broker,其次停止nameserver。
關(guān)閉broker服務(wù) : sh /usr/local/rocketmq/rocketmq-4.9.3/bin/mqshutdown broker
關(guān)閉namesrv服務(wù): sh /usr/local/rocketmq/rocketmq-4.9.3/bin/mqshutdown namesrv
四、安裝可視化平臺RocketMq-Dashboard
參考官方文檔:https://rocketmq.apache.org/zh/docs/4.x/deployment/03Dashboard
4.1 安裝docker,拉取 rocketmq-dashboard 鏡像
docker pull apacherocketmq/rocketmq-dashboard:latest
4.2 docker 容器中運行rocketmq-dashboard
docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=10.0.0.22:9876;10.0.0.23:9876" -p 8080:8080 -t apacherocketmq/rocketmq-dashboard:latest
namesrv.addr:port 替換為 rocketmq 中配置的 nameserver 地址:端口號
默認(rèn)端口配置下,需開放端口號:控制臺:8080;namesrv:9876;broker:10909、10911