1. 程式人生 > >Linux部署RocketMQ叢集

Linux部署RocketMQ叢集

Linux部署RocketMQ叢集

1. Linux啟動RocketMQ

  1. 進入rocketmq環境變數的路徑:bin目錄
cd /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/bin
  1. 在bin目錄下啟動Name Server
nohup sh mqnamesrv
  1. 在bin目錄下啟動Broker
nohup sh mqbroker

注:若無法啟動,改runbroker.sh和runserver.sh中的啟動記憶體,要小於虛擬機器記憶體,兩者啟動記憶體大小一致

  1. 檢視兩個程序是否啟動
jps

提示:3601 Jps
​ 3494 NamesrvStartup
​ 3530 BrokerStartup

  1. 關掉伺服器:需先關broker,再關nameserver
sh mqshutdown broker

提示:The mqbroker(36695) is running…
Send shutdown request to mqbroker(36695) OK

sh mqshutdown namesrv

提示:The mqnamesrv(36664) is running…
Send shutdown request to mqnamesrv(36664) OK

2. Linux部署雙master模式叢集

  1. 修改兩臺機子的hosts檔案:vi /ect/hosts
192.168.9.157 rocketmq-nameserver1 
192.168.9.157 rocketmq-master1 
192.168.9.150 rocketmq-nameserver2 
192.168.9.150 rocketmq-master2 

注:修改前需先關閉兩臺機子防火牆
2. 重啟網絡卡

service network restart
  1. 兩臺機互相ping一下,例:
ping 192.168.9.150 
ping rocketmq-nameserver2 
ping rocketmq-master2
  1. 解壓rocketmq到指定的資料夾
tar -zxvf rocketmq-all-4.3.2.tar.gz -C /usr/local

修改檔名為rocketmq: mv rocketmq-all-4.3.2 rocketmq
建立軟連線(可有可無): ln -s rocketmq rocketmq

  1. 根據需要,建立資料儲存路徑(兩臺機器都要建立),可跳過
mkdir rocketmq/data                     //儲存路徑
mkdir rocketmq/data/commitlog           //commitLog 儲存路徑
mkdir rocketmq/data/consumerqueue       //消費佇列儲存路徑儲存路徑
mkdir rocketmq/data/index               //訊息索引儲存路徑
  1. 兩臺機分別進入/usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/conf/2m-noslave目錄,增加程式碼(注意路徑是:/conf/2m-noslave)

主機1修改broker-a.properties檔案:

namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;

主機2修改broker-b.properties檔案 :

namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;

注:根據需要可加其他配置,如下

#所屬叢集名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置檔案填寫的不一樣
brokerName=broker-a|broker-b
#0 表示 Master, >0 表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在傳送訊息時,自動建立伺服器不存在的topic,預設建立的佇列數
defaultTopicQueueNums=4
#是否允許 Broker 自動建立Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動建立訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽埠
listenPort=10911
#刪除檔案時間點,預設凌晨 0點
deleteWhen=00
#檔案保留時間,預設 48 小時
fileReservedTime=120
#commitLog每個檔案的大小預設1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個檔案預設存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理檔案磁碟空間
diskMaxUsedSpaceRatio=88
#儲存路徑
storePathRootDir=/opt/rocketmq/data
#commitLog 儲存路徑
storePathCommitLog=/opt/rocketmq/data/commitlog
#消費佇列儲存路徑儲存路徑
storePathConsumeQueue=/opt/rocketmq/data/consumequeue
#訊息索引儲存路徑
storePathIndex=/opt/rocketmq/data/index
#checkpoint 檔案儲存路徑
storeCheckpoint=/opt/rocketmq/data/checkpoint
#abort 檔案儲存路徑
abortFile=/opt/rocketmq/data/abort
#限制的訊息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 非同步複製Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 非同步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發訊息執行緒池數量
#sendMessageThreadPoolNums=128
#拉訊息執行緒池數量
#pullMessageThreadPoolNums=128
  1. 根據需要,修改日誌配置檔案(兩臺機器同樣操作),可跳過

建立一個logs目錄: mkdir /opt/rocketmq/logs
然後執行以下程式碼進行日誌檔案的替換,sed是linux的替換命令。

cd /opt/rocketmq/conf && sed -i 's#${user.home}#/opt/rocketmq#g' *.xml
  1. 根據需要,修改啟動指令碼引數,JVM調優(兩臺機器同樣操作),可跳過

    由於將nameServer和broker放在了同一臺機器上,所以根據實際情況可分別對nameServer和broker進行jvm的效能調優,生產環境預設即可不需修改。

    比如我的虛擬機器記憶體只有1G,假設nameserver和broker預設啟動記憶體為1G的話,那麼我的虛擬機器會因為記憶體不夠而無法同時啟動nameserver和broker,此時就需要把兩個的啟動記憶體改小一點。

a)broker的調優

vim /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/bin/runbroker.sh

修改 JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"中的啟動記憶體

b)nameserver的調優

 vim /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/bin/runserver.sh

修改 JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"中的啟動記憶體

  1. 返回bin目錄分別啟動兩臺機子的nameserver( 兩臺機器同樣操作 )
nohup sh mqnamesrv &

可用jps命令檢視是否有nameserver程序

  1. 在bin目錄分別啟動兩臺機子broker:

主機1(master1):注意主要路徑是 /conf/2m-noslave/broker-a.properties

nohup sh mqbroker -c /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &

主機2(master2):注意主要路徑是 /conf/2m-noslave/broker-b.properties

nohup sh mqbroker -c /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/conf/2m-noslave/broker-b.properties >/dev/null 2>&1 &

可用jps命令檢視是否有broker程序
注:先啟動兩臺機器的NameServer,再啟動兩臺機器的Borker,關機的時候順序相反,先關閉兩臺機器的Broker,再關閉兩臺機器的Nameserver。

  1. 在rocketmq的bin目錄下檢視叢集情況:
sh mqadmin clusterList -n "192.168.9.157:9876;192.168.9.150:9876"

注:也可在Windows端開啟管控臺,啟動步驟在下文第4點

  1. 停止broker命令
sh mqshutdown broker
  1. 停止nameserver命令
sh mqshutdown namesrv

3. Linux部署雙master雙slave非同步複製叢集(精簡版)

  1. 修改四臺機子的hosts檔案:vi /ect/hosts
192.168.9.157 rocketmq-nameserver1 
192.168.9.157 rocketmq-master1 
192.168.9.150 rocketmq-nameserver2 
192.168.9.150 rocketmq-master2 
192.168.9.154 rocketmq-nameserver3 
192.168.9.154 rocketmq-master1-slave 
192.168.9.155 rocketmq-nameserver4 
192.168.9.155 rocketmq-master2-slave
  1. 重啟網絡卡
service network restart
  1. 互相ping一下,例:
ping 192.168.9.150 
ping rocketmq-nameserver2 
ping rocketmq-master2
  1. 四臺機進入/usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/conf/2m-2s-async目錄,增加一行程式碼

主機1修改broker-a.properties檔案
主機2修改broker-b.properties檔案
從機1修改broker-a-s.properties檔案
從機2修改broker-b-s.properties檔案

namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
  1. 在bin目錄分別啟動四臺機子的nameserver
nohup sh mqnamesrv &
  1. 在bin目錄分別啟動四臺機子broker:

主機1:

nohup sh mqbroker -c /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/conf/2m-2s-async/broker-a.properties >/dev/null 2>&1 &

主機2:

nohup sh mqbroker -c /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/conf/2m-2s-async/broker-b.properties >/dev/null 2>&1 &

從機1:

nohup sh mqbroker -c /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/conf/2m-2s-async/broker-a-s.properties >/dev/null 2>&1 &

從機2:

nohup sh mqbroker -c /usr/local/rocketmq-all-4.3.2/distribution/target/apache-rocketmq/conf/2m-2s-async/broker-b-s.properties >/dev/null 2>&1 &
  1. 在rocketmq的bin目錄下檢視叢集情況:
sh mqadmin clusterList -n "192.168.9.157:9876;192.168.9.150:9876;192.168.9.154:9876;192.168.9.155:987"

注:可在Windows端開啟管控臺,步驟下文有,需改application.properties中的namesrvAddr

4. Windows 啟動 RocketMQ 管控臺

  1. 下載地址:https://github.com/apache/rocketmq-externals.git

  2. 開啟下載好的檔案,先進入 E:\rocketmq-externals-master\rocketmq-console\src\main\resources,修改application.properties中的namesrvAddr和server.port配置,例如:

server.port=8082  //此處配置管控臺端口,瀏覽器訪問就是用這個埠
rocketmq.config.namesrvAddr=192.168.0.158:9876;192.168.0.179:9876 
  1. Cmd命令框執行進入E:\rocketmq-externals-master\rocketmq-console,編譯生成
mvn clean package -Dmaven.test.skip=true
  1. 編譯成功後,Cmd命令框執行進入E:\rocketmq-externals-master\rocketmq-console\target,啟動‘rocketmq-console-ng-1.0.0.jar’。
java -jar rocketmq-console-ng-1.0.0.jar
  1. 瀏覽器中輸入‘127.0.0.1:配置埠’,成功後即可檢視。localhost:8082
    埠在E:\rocketmq-externals-master\rocketmq-console\src\main\resources中的‘application.properties’檔案可看,如server.port=8082