rocketmq-5:生產級rocketmq集群部署

頭條技術號:實戰架構

交流郵箱:[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

rocketmq-5:生產級rocketmq集群部署

(7).筆者關於rocketmq生產實踐的相關文章

rocketmq-5:生產級rocketmq集群部署


分享到:


相關文章: