一、環境准備
1.主機信息
主機名 | 主機IP地址 | 備注 |
broker-k8s-1 | 192.168.144.131 | master &namesrv |
broker-k8s-2 | 192.168.144.132 | master &namesrv |
broker-k8s-3 | 192.168.144.133 | master &namesrv |
二、生產環境配置要求(因為mq對內存消耗比較大,所以生產環境建議內存給大些)
硬件: 12G+內存(broker默認分配8G,namesrv默認分配4G,可自行調整)
軟件:
- 64bit OS, Linux/Unix/Mac is recommended;
- 64bit JDK 1.8+;
- Maven 3.2.x(非必要)
- Git(非必須)
正式搭建:目錄只是為了規范配置文件的存放路徑,名稱對實際配置無用
目錄介紹
- 2m-noslave: 多Master模式
- 2m-2s-sync: 多Master多Slave模式,同步雙寫
- 2m-2s-async:多Master多Slave模式,異步復制
下載對應安裝包請在下面官網中下載你需要的版本安裝包
http://rocketmq.apache.org/docs/quick-start/
本文是以 rocketmq-all-4.5.2版本進行集群部署:
[root@k8s-1 rocketmq-all-4.5.2-bin-release]
# pwd
/usr/local/src/rocketmq-all-4
.5.2-bin-release
[root@k8s-1 rocketmq-all-4.5.2-bin-release]
# ls conf/2m-noslave/ -lh
total 12K
-rw-r--r-- 1 root root 1.5K Oct 8 18:22 broker-a.properties
-rw-r--r-- 1 root root 1.5K Oct 8 18:00 broker-b.properties
-rw-r--r-- 1 root root 937 Jul 31 21:09 broker-trace.properties
[root@k8s-1 rocketmq-all-4.5.2-bin-release]
#
broker-k8s-1:配置文件:
重點注意以下參數:
brokerClusterName : 集群的名稱,同一個集群名稱要一樣的
brokerName : broker的名稱,同集群中,此名稱要不同
namesrvAddr : 集群所有節點的合集
brokerIP1 : 監聽在此IP的,通常默認是本機IP地址,但是不排除有橋接等導致監聽IP地址不正常的問題。
ot@k8s-1 rocketmq-all-4.5.2-bin-release]# cat conf/2m-noslave/broker-a.properties # 配置參考官方鏈接:http://rocketmq.apache.org/docs/rmq-deployment/ # 所屬集群名字 brokerClusterName=rocketmq-cluster # broker名字,注意此處不同的配置文件填寫的不一樣 brokerName=broker-k8s-1 # 0 表示 Master,>0 表示 Slave brokerId=0 # 刪除文件時間點,默認凌晨4點。24小時制,單位小時 deleteWhen=04 # 文件保留時間,默認 72 小時。根據業務情況調整 fileReservedTime=168 # Broker 對外服務的監聽端口 listenPort=10911 # nameServer地址,分號分割 namesrvAddr=192.168.144.131:9876;192.168.144.132:9876;192.168.144.133:9876 # Details:Should be configured if having multiple addresses; Default value:InetAddress for network interface # 本機ip地址,默認系統自動識別,但是某些多網卡機器會存在識別錯誤的情況,這種情況下可以人工配置。 brokerIP1=192.168.144.131 # commitLog 存儲路徑 storePathCommitLog=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/commitlog #發送消息的最大線程數 sendMessageThreadPoolNums: 64 #large thread numbers #發送消息是否使用可重入鎖 useReentrantLockWhenPutMessage: true # 消費隊列存儲路徑存儲路徑 storePathConsumerQueue=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/consumequeue # commitLog每個文件的大小默認1G mapedFileSizeCommitLog=1073741824 # Broker 的角色 # - ASYNC_MASTER 異步復制Master # - SYNC_MASTER 同步雙寫Master # - SLAVE brokerRole=ASYNC_MASTER # 刷盤方式 # - ASYNC_FLUSH 異步刷盤 # - SYNC_FLUSH 同步刷盤 flushDiskType=ASYNC_FLUSH
broker-k8s-2:配置文件
重點注意以下參數:
brokerClusterName : 集群的名稱,同一個集群名稱要一樣的
brokerName : broker的名稱,同集群中,此名稱要不同
namesrvAddr : 集群所有節點的合集
brokerIP1 : 監聽在此IP的,通常默認是本機IP地址,但是不排除有橋接等導致監聽IP地址不正常的問題。
[root@k8s-2 rocketmq-all-4.5.2-bin-release]# cat conf/2m-noslave/broker-a.properties # 配置參考官方鏈接:http://rocketmq.apache.org/docs/rmq-deployment/ # 所屬集群名字 brokerClusterName=rocketmq-cluster # broker名字,注意此處不同的配置文件填寫的不一樣 brokerName=broker-k8s-2 # 0 表示 Master,>0 表示 Slave brokerId=0 # 刪除文件時間點,默認凌晨4點。24小時制,單位小時 deleteWhen=04 # 文件保留時間,默認 72 小時。根據業務情況調整 fileReservedTime=168 # Broker 對外服務的監聽端口 listenPort=10911 # nameServer地址,分號分割 namesrvAddr=192.168.144.131:9876;192.168.144.132:9876;192.168.144.133:9876 # Details:Should be configured if having multiple addresses; Default value:InetAddress for network interface # 本機ip地址,默認系統自動識別,但是某些多網卡機器會存在識別錯誤的情況,這種情況下可以人工配置。 brokerIP1=192.168.144.132 # commitLog 存儲路徑 storePathCommitLog=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/commitlog #發送消息的最大線程數 sendMessageThreadPoolNums: 64 #large thread numbers #發送消息是否使用可重入鎖 useReentrantLockWhenPutMessage: true # 消費隊列存儲路徑存儲路徑 storePathConsumerQueue=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/consumequeue # commitLog每個文件的大小默認1G mapedFileSizeCommitLog=1073741824 # Broker 的角色 # - ASYNC_MASTER 異步復制Master # - SYNC_MASTER 同步雙寫Master # - SLAVE brokerRole=ASYNC_MASTER # 刷盤方式 # - ASYNC_FLUSH 異步刷盤 # - SYNC_FLUSH 同步刷盤 flushDiskType=ASYNC_FLUSH
broker-k8s-3:配置文件
重點注意以下參數:
brokerClusterName : 集群的名稱,同一個集群名稱要一樣的
brokerName : broker的名稱,同集群中,此名稱要不同
namesrvAddr : 集群所有節點的合集
brokerIP1 : 監聽在此IP的,通常默認是本機IP地址,但是不排除有橋接等導致監聽IP地址不正常的問題。
[root@k8s-3 rocketmq-all-4.5.2-bin-release]# cat conf/2m-noslave/broker-a.properties # 配置參考官方鏈接:http://rocketmq.apache.org/docs/rmq-deployment/ # 所屬集群名字 brokerClusterName=rocketmq-cluster # broker名字,注意此處不同的配置文件填寫的不一樣 brokerName=broker-k8s-3 # 0 表示 Master,>0 表示 Slave brokerId=0 # 刪除文件時間點,默認凌晨4點。24小時制,單位小時 deleteWhen=04 # 文件保留時間,默認 72 小時。根據業務情況調整 fileReservedTime=168 # Broker 對外服務的監聽端口 listenPort=10911 # nameServer地址,分號分割 namesrvAddr=192.168.144.131:9876;192.168.144.132:9876;192.168.144.133:9876 # Details:Should be configured if having multiple addresses; Default value:InetAddress for network interface # 本機ip地址,默認系統自動識別,但是某些多網卡機器會存在識別錯誤的情況,這種情況下可以人工配置。 brokerIP1=192.168.144.133 # commitLog 存儲路徑 storePathCommitLog=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/commitlog #發送消息的最大線程數 sendMessageThreadPoolNums: 64 #large thread numbers #發送消息是否使用可重入鎖 useReentrantLockWhenPutMessage: true # 消費隊列存儲路徑存儲路徑 storePathConsumerQueue=/usr/local/src/rocketmq-all-4.5.2-bin-release/rocketmq_store/consumequeue # commitLog每個文件的大小默認1G mapedFileSizeCommitLog=1073741824 # Broker 的角色 # - ASYNC_MASTER 異步復制Master # - SYNC_MASTER 同步雙寫Master # - SLAVE brokerRole=ASYNC_MASTER # 刷盤方式 # - ASYNC_FLUSH 異步刷盤 # - SYNC_FLUSH 同步刷盤 flushDiskType=ASYNC_FLUSH
啟動集群:
在 broker-k8s-1 broker-k8s-2 broker-k8s-3 啟動 broker 服務
cd
/usr/local/src/rocketmq-all-4
.5.2-bin-release/
nohup
sh bin
/mqnamesrv
&
在 broker-k8s-1 broker-k8s-2 broker-k8s-3 啟動 broker 服務
# 機器下執行broker-a.properties文件啟動
nohup
sh bin
/mqbroker
-c conf
/2m-noslave/broker-a
.properties -n
"192.168.144.131:9876;192.168.144.132:9876;192.168.144.133:9876"
&
驗證集群情況:

mq啟動腳本:
#!/bin/sh source /etc/profile CODE_DIR="/opt/app/rocketmq-all-4.5.2-bin-release" start() { cd ${CODE_DIR} nohup sh bin/mqnamesrv &> mqnamesrv.log & nohup sh bin/mqbroker -c conf/2m-noslave/broker-a.properties -n "172.18.178.191:9876;172.18.178.192:9876;172.18.178.193:9876" &> nohup.out & } stop() { cd ${CODE_DIR} sh bin/mqshutdown broker sh bin/mqshutdown namesrv } status() { pid1=`ps ax | grep -i 'org.apache.rocketmq.namesrv.NamesrvStartup' |grep java | grep -v grep | awk '{print $1}'` if [ -z "$pid1" ] ; then echo "No mqnamesrv running." else echo "The mqnamesrv(${pid1}) is running..." fi pid2=`ps ax | grep -i 'org.apache.rocketmq.broker.BrokerStartup' |grep java | grep -v grep | awk '{print $1}'` if [ -z "$pid2" ] ; then echo "No mqbroker running." return 1; else echo "The mqbroker(${pid2}) is running..." return 0 fi } case "$1" in 'start') start ;; 'stop') stop ;; 'restart') stop start ;; 'status') status ;; *) echo "Usage: $0 { start | stop | status | restart }" exit 1 ;; esac exit 0
mq-web啟動腳本:
#!/bin/bash source /etc/profile CODE_DIR="/opt/app/rocketmq-console-ng" Process_name="rocketmq-console-ng-1.0.1.jar" status() { PID=$(ps -ef | grep ${Process_name} | grep -v grep | awk '{print $2}') if [ ! -n "$PID" ]; then echo "NO RUNNING" else echo "RUNNING" echo "PID IS : $PID" fi } start() { PID=$(ps -ef | grep ${Process_name} | grep -v grep | awk '{print $2}') if [ ! -n "$PID" ]; then cd ${CODE_DIR} nohup java -Xms128m -Xmx256m -XX:PermSize=64m -XX:MaxPermSize=128m -jar /opt/app/rocketmq-console-ng/rocketmq-console-ng-1.0.1.jar &> nohup.out & else echo "Ready RUNNING" echo "PID IS : $PID" fi } stop() { PID=$(ps -ef | grep ${Process_name} | grep -v grep | awk '{print $2}') if [ ! -n "$PID" ]; then echo "NOT RUNNING" else echo "PID IS : $PID" kill -9 $PID fi } case "$1" in 'start') start ;; 'stop') stop ;; 'restart') stop sleep 8 start ;; 'status') status ;; *) echo "Usage: $0 { start | stop | restart | status }" exit 1 ;; esac exit 0