1. 程式人生 > 實用技巧 >RocketMQ叢集搭建(例項)

RocketMQ叢集搭建(例項)

網上很多搭建RocketMQ的教程,但是在樓主的瘋狂百度以及瘋狂採坑下,終於成功的搭建了一個RocketMQ的叢集(LingZsj真的是太難了啊~.~)

廢話不多說開始搭建叢集了

咋們搭建一個多master多slave模式(同步)的叢集,這邊條件有限只有兩臺伺服器(所以我們的叢集就是一個雙主雙從的叢集架構模式了)

  首先說明下這邊我直接寫Linux命令,目的很簡單就是為了能讓一個 從未搭建過RocketMQ的小白也能通過複製貼上搭建出一個屬於自己的叢集

ps:安裝JDK的執行環境是必須的應為RokcetMQ是利用java語言來寫的所以他必須依賴jdk來執行所以我們要先在兩臺伺服器上分別安裝jdk

cd /usr/local

mkdir javaJdk

cd javaJdk

#將下載好的jdk傳輸到伺服器上
#傳輸好了解壓縮下
tar -zxvf jdk-8u271-linux-x64.tar.gz

#刪掉JDK壓縮包
rm -rf jdk-8u271-linux-x64.tar.gz

配置jdk的執行環境

vim /etc/profile

#jd環境配置部分
export JAVA_HOME=/usr/local/javaJdk/jdk1.8.0_271

export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}

#儲存檔案

esc

:

wq

重新載入一次檔案

source /etc/profile

1.修改網絡卡環境

cd /etc/hosts (下面是host的配置檔案部分,同樣的配置在第二臺伺服器也貼上一次)

兩臺伺服器一下分別是兩臺伺服器的ip地址
# nameserver xx.xxx.xx.xx1 rocketmq-nameserver1 xx.xxx.xx.xx2 rocketmq-nameserver2 # broker xx.xxx.xx.xx1 rocketmq-master1 xx.xxx.xx.xx1 rocketmq-slave2 xx.xxx.xx.xx2 rocketmq-master2 xx.xxx.xx.xx2 rocketmq-slave1

2.重啟網絡卡(第二臺伺服器同樣)

systemctl restart network

ps;這邊說下的第一個坑了,由於該伺服器上有一堆docker服務(服務未投入生產)所以重啟網絡卡後服務會出現連線不上的問題,問題不大重啟docker服務即可然後在重啟需要的容器(別傻乎乎的去重啟伺服器)

希望(shutdown -r now 立即重啟) 這個命令你不會用到

3.關閉Linux伺服器的防火牆(第二臺同樣)

# 關閉防火牆
systemctl stop firewalld.service 
# 檢視防火牆的狀態
firewall-cmd --state 
# 禁止firewall開機啟動
systemctl disable firewalld.service

或者為了安全,只開放特定的埠號,RocketMQ預設使用3個埠:9876 、10911 、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

4.建立資料夾

cd /usr/local

#建立rocketmq資料夾 mkdir rocketmq

#進入到rocketmq資料夾內 cd rocketmq/

5.官網下載rockerMQ的安裝包(這邊下載二進位制安裝包)

官網連結地址:http://rocketmq.apache.org/dowloading/releases/ ---這邊我下載的是4.4.0版本的

6.將下載的檔案上傳到rocketmq資料夾上(服務2也需要)

7.解壓縮zip檔案(服務2也需要)

unzip rocketmq-all-4.4.0-bin-release.zip

8.刪掉安裝包這邊(這步不建議你們跟我一樣寫,自己斟酌)

rm -rf rocketmq-all-4.4.0-bin-release.zip

9.建立叢集需要的資料夾

#主節點檔案的儲存路徑
mkdir /usr/local/rocketmq/mstore
mkdir /usr/local/rocketmq/mstore/commitlog
mkdir /usr/local/rocketmq/mstore/consumequeue
mkdir /usr/local/rocketmq/mstore/index

#從節點服務伺服器的檔案儲存路徑
mkdir /usr/local/rocketmq/store
mkdir /usr/local/rocketmq/store/commitlog
mkdir /usr/local/rocketmq/store/consumequeue
mkdir /usr/local/rocketmq/store/index

10.xx.xxx.xx.xx1伺服器的broker-a.properties配置檔案

#所屬叢集名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置檔案填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#配置外網連線地址
brokerIP1 = xx.xxx.xx.xx1
#在傳送訊息時,自動建立伺服器不存在的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/mstore
#commitLog 儲存路徑
storePathCommitLog=/usr/local/rocketmq/mstore/commitlog
#消費佇列儲存路徑儲存路徑
storePathConsumeQueue=/usr/local/rocketmq/mstore/consumequeue
#訊息索引儲存路徑
storePathIndex=/usr/local/rocketmq/mstore/index
#checkpoint 檔案儲存路徑
storeCheckpoint=/usr/local/rocketmq/mstore/checkpoint
#abort 檔案儲存路徑
abortFile=/usr/local/rocketmq/mstore/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
#拉訊息執行緒池數量
#pullMessageThreadPoolNums=128

11.xx.xxx.xx.xx1的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
#配置外網連線地址
brokerIP1 = xx.xxx.xx.xx1
#在傳送訊息時,自動建立伺服器不存在的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

12.xx.xxx.xx.xx2伺服器的broker-b,properties檔案的配置

#所屬叢集名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置檔案填寫的不一樣
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#配置外網連線地址
brokerIP1 = xx.xxx.xx.xx2
#在傳送訊息時,自動建立伺服器不存在的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/mstore
#commitLog 儲存路徑
storePathCommitLog=/usr/local/rocketmq/mstore/commitlog
#消費佇列儲存路徑儲存路徑
storePathConsumeQueue=/usr/local/rocketmq/mstore/consumequeue
#訊息索引儲存路徑
storePathIndex=/usr/local/rocketmq/mstore/index
#checkpoint 檔案儲存路徑
storeCheckpoint=/usr/local/rocketmq/mstore/checkpoint
#abort 檔案儲存路徑
abortFile=/usr/local/rocketmq/mstore/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
#拉訊息執行緒池數量
#pullMessageThreadPoolNums=128

13.xx.xxx.xx.xx2中的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
#配置外網連線地址
brokerIP1 = xx.xxx.xx.xx2
#在傳送訊息時,自動建立伺服器不存在的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

ps:這邊說下master節點的資料夾和slave檔案的資料夾為什麼要分別建立應為公用一個問件加master服務能起來但是slave服務時起不來的(不信可以去試試)

15.修改啟動指令碼檔案(兩臺服務都修改)

cd /usr/local/rockermq/rocketmq-all-4.4.0-bin-release/bin

vi runbroker.sh

-------檔案配置如下-------
# 開發環境配置 JVM Configuration
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

vi runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

啟動服務

進入到rocketmq的安裝包內
cd /usr/local/rockermq/rocketmq-all-4.4.0-bin-release/bin ls

#首先分別啟動兩臺伺服器(xx.xxx.xx.xx1)的namesrv服務
nohup sh mqnamesrv & (&不能掉)
xx.xxx.xx.xx2的namesrv服務
nohup sh mqnamesrv &    (&不能掉)


#啟動xx.xxx.xx.xx1的master節點服務
nohup sh mqbroker -c /usr/local/rocketmq/
rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-a.properties &

#啟動slave服務
nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-b-s.properties &


#啟動xx.xxx.xx.xx2
nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-b.properties &

#啟動slave服務
nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-a-s.properties &

16.利用jps檢視下(安裝了jdk就能用--下圖表示成功)

17.停止namesrv和broker服務

namesrv服務(停止)
sh  mqshutdown namesrv

broker服務(停止)
sh mqshutdown broker

18.安裝rocketmq-console控制檯

利用docker安裝控制檯就好了

直接執行如下命令就好了

docker pull styletang/rocketmq-console-ng

安裝映象:
docker run -e "JAVA_OPTS=-Drocketmq.config.namesrvAddr=xx.xxx.xx.xx1:9876;xx.xxx.xx.xx2:9876 -Drocketmq.config.isVIPChannel=false" -p 9326:8080 -t styletang/rocketmq-console-ng

好了這就裝好了~~

上圖:(ok了)