頭條技術號:實戰架構
交流郵箱:[email protected]
本文主要講述:
生產級的rocketmq消息集群的部署。
(1).集群形式
(2).源碼編譯
(3).生產級硬件資源與節點拓撲
(4).namersrv節點部署
(5).broker節點部署
(6).rocketmq-console後臺部署
(7).筆者關於rocketmq生產實踐的相關文章
(1).集群形式
集群形式:2m-2s-2namesrv;2個master,2個slave,2個namesrv。
主從方式:async
刷盤方式:異步。
(2).源碼編譯
下載地址:https://github.com/apache/rocketmq/releases
wget https://github.com/apache/rocketmq/archive/rocketmq-all-4.3.2.tar.gz
官方github提供的是源碼需要下載後進行編譯;
tar -xzvf rocketmq-all-4.3.2-source-release.tar.gz
cd rocketmq-all-4.3.2
mvn -Prelease-all -DskipTests clean install -U
cd distribution/target/apache-rocketmq
apache-rocketmq.tar.gz就是編譯後的rocketmq包,將這個包傳到要部署的各個機器。
使用python開一個web服務同步文件:
python -m SimpleHTTPServer 8077
(3).生產級硬件資源與節點拓撲
硬件資源&部署拓撲:
4臺4核8G的機器,阿里雲型號是ecs.sn1ne.xlarge。
rocketmq-c1-broker000:
開6G部署master-0
/app/3rd/apache-rocketmq-broker-master-0
rocketmq-c1-broker001:
開4G部署slave-0, 開2G部署namesrv
/app/3rd/apache-rocketmq-broker-slave-0
/app/3rd/apache-rocketmq-namesrv-0
rocketmq-c1-broker002:
開6G部署master-1
/app/3rd/apache-rocketmq-broker-master-1
rocketmq-c1-broker003:
開4G部署slave-1, 開2G部署namesrv
/app/3rd/apache-rocketmq-broker-slave-1
/app/3rd/apache-rocketmq-namesrv-1
修改JDK,使用JDK1.8。
修改消息羅盤位置,注意要保證這個目錄位於SSD盤:
mkdir -p /data/inc/rocketmq-c1-store/data
修改消息羅盤位置,注意要保證這個目錄位於SSD盤:
mkdir -p /data/inc/logs/rocketmq-broker/
mkdir -p /data/inc/logs/rocketmq-namesrv/
vi /app/3rd/apache-rocketmq/conf/2m-2s-async/broker-a.properties
(4).namersrv節點部署
1.JDK改為1.8
2.修改JVM參數:
/app/3rd/apache-rocketmq/bin/runserver.sh
原值:
-Xloggc:/dev/shm/rmq_srv_gc.log
-Xms4g -Xmx4g -Xmn2g
改為:
-Xloggc:/data/inc/logs/rocketmq-namesrv/rmq_srv_gc.log
-Xms2g -Xmx2g -Xmn1g
3.替換日誌路徑:
/app/3rd/apache-rocketmq/conf/logback_namesrv.xml
替換命令:注意要建立新目錄:/data/inc/logs/rocketmq-namesrv
%s/\\${user\\.home}\\/logs\\/rocketmqlogs/\\/data\\/inc\\/logs\\/rocketmq-namesrv/g
4.啟動:
nohup /app/3rd/apache-rocketmq-namesrv-0/bin/mqnamesrv > /data/inc/logs/rocketmq-namesrv/nohup-namesrv.out &
nohup /app/3rd/apache-rocketmq-namesrv-1/bin/mqnamesrv > /data/inc/logs/rocketmq-namesrv/nohup-namesrv.out &
(5).broker節點部署
1.JDK改為1.8
2.修改broker的JVM的內存,原值太大。
/app/3rd/apache-rocketmq/bin/runbroker.sh
原值:
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
-XX:MaxDirectMemorySize=15g
-Xloggc:/dev/shm/mq_gc_%p.log
改為:
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g"
-XX:MaxDirectMemorySize=2g
-Xloggc:/data/inc/logs/rocketmq-broker/mq_gc_%p.log
3.替換日誌路徑:
/app/3rd/apache-rocketmq/conf/logback_broker.xml
%s/\\${user\\.home}\\/logs\\/rocketmqlogs/\\/data\\/inc\\/logs\\/rocketmq-broker/g
4.2m-2s-async/*.properties需要增加的配置:
#nameServer地址,分號分割
namesrvAddr=rocketmq-c1-namesrv001.inc-inc.com:9876;rocketmq-c1-namesrv002.inc-inc.com:9876
#是否允許 Broker 自動創建Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=false
#是否允許 Broker 自動創建訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=false
#存儲路徑
storePathRootDir=/data/inc/rocketmq-c1-store/data
#commitLog 存儲路徑
storePathCommitLog=/data/inc/rocketmq-c1-store/data/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/data/inc/rocketmq-c1-store/data/consumequeue
#消息索引存儲路徑
storePathIndex=/data/inc/rocketmq-c1-store/data/index
#checkpoint 文件存儲路徑
storeCheckpoint=/data/inc/rocketmq-c1-store/data/checkpoint
#abort 文件存儲路徑
abortFile=/data/inc/rocketmq-c1-store/data/abort
數據保存在目錄${rootpath}/consumequeue下面,rootpath 通過配置項storePathRootDir指定,默認的是${user.home}/store。
啟動命令:
nohup /app/3rd/apache-rocketmq-broker-master-0/bin/mqbroker -n 'rocketmq-c1-namesrv001.inc-inc.com:9876;rocketmq-c1-namesrv002.inc-inc.com:9876' -c /app/3rd/apache-rocketmq-broker-master-0/conf/2m-2s-async/broker-a.properties > /data/inc/logs/rocketmq-broker/nohup-broker.out &
nohup /app/3rd/apache-rocketmq-broker-slave-0/bin/mqbroker -n 'rocketmq-c1-namesrv001.inc-inc.com:9876;rocketmq-c1-namesrv002.inc-inc.com:9876' -c /app/3rd/apache-rocketmq-broker-slave-0/conf/2m-2s-async/broker-a-s.properties > /data/inc/logs/rocketmq-broker/nohup-broker.out &
nohup /app/3rd/apache-rocketmq-broker-master-1/bin/mqbroker -n 'rocketmq-c1-namesrv001.inc-inc.com:9876;rocketmq-c1-namesrv002.inc-inc.com:9876' -c /app/3rd/apache-rocketmq-broker-master-1/conf/2m-2s-async/broker-b.properties > /data/inc/logs/rocketmq-broker/nohup-broker.out &
nohup /app/3rd/apache-rocketmq-broker-slave-1/bin/mqbroker -n 'rocketmq-c1-namesrv001.inc-inc.com:9876;rocketmq-c1-namesrv002.inc-inc.com:9876' -c /app/3rd/apache-rocketmq-broker-slave-1/conf/2m-2s-async/broker-b-s.properties > /data/inc/logs/rocketmq-broker/nohup-broker.out &
如果不能啟動,還沒有任何日誌,請check store目錄是否有權限。
(6).rocketmq-console後臺部署
下載:
git clone -b release-rocketmq-console-1.0.0 https://github.com/apache/rocketmq-externals.git
進入項目文件夾並修改配置文件(中文註釋是我添加,為方便解釋,請刪除,不然打包報錯)。
$ cd rocketmq-externals/rocketmq-console/
$ vi src/main/resources/application.properties
Name Server地址默認為空,註釋說可以在啟動項目後在後臺配置,經測試,後臺配置切換失敗,有報錯,所以打包前需修改配置文件明確給出Name Server地址,或者啟動服務的時候給出rocketmq.config.namesrvAddr參數值。
修改4處
#管理後臺訪問上下文路徑,默認為空,如果填寫,一定要前面加"/",後面不要加,否則啟動報錯
server.contextPath=/rocketmq-console修改
server.port=7000 修改
#spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
logging.config=classpath:logback.xml
#if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
#Name Server地址,修改成你自己的服務地址
rocketmq.config.namesrvAddr=127.0.0.1:9870;127.0.0.1:9871;127.0.0.1:9872 修改
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=
#rocketmq-console's data path:dashboard/monitor
#rocketmq-console's data path:dashboard/monitor
rocketmq.config.dataPath=/data/inc/rocketmq-console 修改
#set it false if you don't want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true
$ vi src/main/resources/logback.xml
替換
%s/\\${user\\.home}\\/logs\\/consolelogs/\\/data\\/inc\\/logs\\/rocketmq-console/g
將項目打成jar包,並運行jar文件。
mvn clean package -Dmaven.test.skip=true -U
java -jar target/rocketmq-console-ng-1.0.0.jar
#如果配置文件沒有填寫Name Server
java -jar target/rocketmq-console-ng-1.0.0.jar --rocketmq.config.namesrvAddr='10.0.74.198:9876;10.0.74.199:9876'
啟動命令:
nohup java -jar target/rocketmq-console-ng-1.0.0.jar --rocketmq.config.namesrvAddr='10.0.74.198:9876;10.0.74.199:9876' > /data/logs/rocketmq-console/nohup.out &
nohup java -jar /app/3rd/rocketmq-console/rocketmq-console-ng-1.0.0.jar > /data/inc/logs/rocketmq-console/nohup-rocketmq-console.out &
訪問地址:
http://ip:7000/rocketmq-console/#/cluster
(7).筆者關於rocketmq生產實踐的相關文章
閱讀更多 實戰架構 的文章