RocketMQ集羣部署配置

目標,使用2臺機器部署RocketMQ多Master多Slave模式,異步複製集羣模式。java

第一步,修改/etc/hosts文件

192.168.116.115 rocketmq1
192.168.116.116 rocketmq2複製代碼

集羣機器配置完成以後,集羣內進行ping一下,確保都通。git

編譯獲得環境

git clone -b develop https://github.com/apache/rocketmq.git
cd rocketmq
mvn -Prelease-all -DskipTests clean install -U
cd distribution/target/apache-rocketmq

本版本是基於4.1.0的,以後apache-rocketmq_4.1.0.tar.gz拷貝集羣全部機器進行解壓
tar -zxvf apache-rocketmq_4.1.0.tar.gz複製代碼

配置集羣模式【多Master多Slave模式,異步複製】

配置的目錄說明:github

  • 2m-noslave: 多Master模式
  • 2m-2s-sync: 多Master多Slave模式,同步雙寫
  • 2m-2s-async:多Master多Slave模式,異步複製

配置項一個主的配置apache

#所屬集羣名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不一樣的配置文件填寫的不同
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=rocketmq1:9876;rocketmq2:9876
#在發送消息時,自動建立服務器不存在的topic,默認建立的隊列數
defaultTopicQueueNums=4
#是否容許 Broker 自動建立Topic,建議線下開啓,線上關閉
autoCreateTopicEnable=true
#是否容許 Broker 自動建立訂閱組,建議線下開啓,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽端口
listenPort=10911
#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 72 小時
fileReservedTime=120
#commitLog每一個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每一個文件默認存30W條,根據業務狀況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=75
#存儲路徑
storePathRootDir=/appl/rocketmq/store
#commitLog 存儲路徑
storePathCommitLog=/appl/rocketmq/store/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/appl/rocketmq/store/consumequeue
#消息索引存儲路徑
storePathIndex=/appl/rocketmq/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/appl/rocketmq/store/checkpoint
#abort 文件存儲路徑
abortFile=/appl/rocketmq/store/abort
#限制的消息大小 默認4M
#maxMessageSize=4194304

#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複製代碼

配置項另一個備的配置服務器

#所屬集羣名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不一樣的配置文件填寫的不同
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=rocketmq1:9876;rocketmq2:9876
#在發送消息時,自動建立服務器不存在的topic,默認建立的隊列數
defaultTopicQueueNums=4
#是否容許 Broker 自動建立Topic,建議線下開啓,線上關閉
autoCreateTopicEnable=true
#是否容許 Broker 自動建立訂閱組,建議線下開啓,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽端口
listenPort=11911
#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 72 小時
fileReservedTime=120
#commitLog每一個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每一個文件默認存30W條,根據業務狀況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=75
#存儲路徑
storePathRootDir=/appl/rocketmq-s/store
#commitLog 存儲路徑
storePathCommitLog=/appl/rocketmq-s/store/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/appl/rocketmq-s/store/consumequeue
#消息索引存儲路徑
storePathIndex=/appl/rocketmq-s/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/appl/rocketmq-s/store/checkpoint
#abort 文件存儲路徑
abortFile=/appl/rocketmq-s/store/abort
#限制的消息大小 默認4M
#maxMessageSize=4194304

#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複製代碼

備註:因爲一臺機器部署主備,因此主、備的端口和存儲路徑會不一樣,若是多臺機器部署就能夠保持同樣了,主備主要區別在於brokerId、brokerRole配置區別。app

注意到logback.*.xml配置文件中${user.home}須要替換本身指定的目錄異步

可使用sed進行替換:jvm

sed -i 's#${user.home}#/appl/rocketmq#g' *.xml

# sed -i 's#${user.home}#/appl/rocketmq-s#g' *.xml 因爲一臺機器部署了2個結點複製代碼

修改啓動腳本中的JVM參數

因爲RocketMQ4.1.0官方建議使用64bit JDK 1.8+;好比查看runserver.sh文件jvm參數以下:async

-server -Xms4g -Xmx4g -Xmn2g -XX:PermSize=128m -XX:MaxPermSize=320m複製代碼

須要特別說明下:
元數據空間,專門用來存元數據的,它是jdk8之後用來替代perm的。測試

JVM堆空間大小根據機器狀況進行調整,若是測試機器內存過小須要調整,否則啓動不了,好比修改成以下

-Xms1G -Xmx1G -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m複製代碼

可使用sed進行替換,把全部PermSize、MaxPermSize替換掉:

sed -i 's#PermSize#MetaspaceSize#g' *
sed -i 's#MaxPermSize#MaxMetaspaceSize#g' *複製代碼

runbroker.sh裏面的jvm:

-Xms8g -Xmx8g -Xmn4g複製代碼

根據本身狀況進行修改。

我的建議對於RocketMQ默認的jvm參數除了堆大小其餘的先不要調整,後續經過觀察分析以後看看是否有必要進行其餘參數的調整等,歡迎閱讀本人JVM菜鳥進階高手之路系列文章。

其實我有有疑惑,在broker的jvm參數:

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m 
-XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30
-XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8 -XX:+DisableExplicitGC"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:/dev/shm/mq_gc_%p.log 
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime 
-XX:+PrintAdaptiveSizePolicy"
JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 
-XX:GCLogFileSize=30m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=15g"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${BASE_DIR}/lib"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"複製代碼

-XX:+DisableExplicitGC,-XX:MaxDirectMemorySize=15g,可是當達到閥值以後會調用System.gc來作一次full gc,關鍵System.gc都被禁止了。 但願那位大佬知道,在留言區說明下,謝謝。

啓動服務

記住先啓動NameServer,再啓動Broker,關閉的時候剛好相反,先關閉Broker再關閉NameServer

啓動NameServer

nohup sh /appl/apache-rocketmq/bin/mqnamesrv &
tail -f /appl/rocketmq-s/logs/rocketmqlogs/namesrv.log
#tail -f /appl/rocketmq/logs/rocketmqlogs/namesrv.log
INFO main - The Name Server boot success. serializeType=JSON複製代碼

備註:因爲namesrv的端口是寫死在代碼裏面的,因此一臺機器啓動一個namesrv便可。

啓動Broker

rocketmq1機器:
nohup sh /appl/apache-rocketmq/bin/mqbroker -c /appl/apache-rocketmq/conf/2m-2s-async/broker-a.properties >/dev/null 2>&1 &

nohup sh /appl/apache-rocketmq-s/bin/mqbroker -c /appl/apache-rocketmq-s/conf/2m-2s-async/broker-b-s.properties >/dev/null 2>&1 &  

rocketmq2機器:
nohup sh /appl/apache-rocketmq/bin/mqbroker -c /appl/apache-rocketmq/conf/2m-2s-async/broker-b.properties >/dev/null 2>&1 &

nohup sh /appl/apache-rocketmq-s/bin/mqbroker -c /appl/apache-rocketmq-s/conf/2m-2s-async/broker-a-s.properties >/dev/null 2>&1 &   



tail -f /appl/rocketmq/logs/rocketmqlogs/broker.log 
……
INFO main - The broker[broker-a, 192.168.116.116:10911] boot success. serializeType=JSON and name server is rocketmq1:9876;rocketmq2:9876
……

tail -f /appl/rocketmq/logs/rocketmqlogs/namesrv.log
……
new broker registerd, 192.168.116.116:11911 HAServer: 192.168.116.116:11912
……
new broker registerd, 192.168.116.115:11911 HAServer: 192.168.116.115:11912
……複製代碼

關閉服務:

sh bin/mqshutdown broker
sh bin/mqshutdown namesrv複製代碼

到目前位置,關於RocketMQ的集羣環境部署就結束了,未完待續……

若是讀完以爲有收穫的話,歡迎點贊加關注。


我的公衆號,歡迎關注,查閱更多精彩歷史!!!

匠心零度公衆號
匠心零度公衆號
相關文章
相關標籤/搜索