docker-compose部署rocketmq雙主雙叢集群
描述
兩臺(tái)主機(jī)搭建雙主雙從集群
每臺(tái)主機(jī)上一個(gè)nameserver,兩個(gè)broker一主一從
主叢部署服務(wù)器規(guī)劃
服務(wù)器 部署的應(yīng)用 broker主從規(guī)劃 物理資源 存儲(chǔ)目錄
10.100.232.171 namesrv 、broker、console master-a,slave-b 無 /opt/docker/rocketmq
10.100.232.172 namesrv、broker master-b,slave-a 無 /opt/docker/rocketmq
10.100.232.171 的 broker規(guī)劃:
brokerName 主從 broker對(duì)外服務(wù)監(jiān)聽端口 需要暴露端口
a master 10911 10911,10912,10909
b slave 10921 10921,10922,10919
10.100.232.172 的 broker規(guī)劃:
brokerName 主從 broker對(duì)外服務(wù)監(jiān)聽端口 需要暴露端口
a slave 10911 10911,10912,10909
b master 10921 10921,10922,10919
兩臺(tái)機(jī)器都拉取鏡像
docker pull rocketmqinc/rocketmq
10.100.232.171機(jī)器:
創(chuàng)建目錄用于映射
#nameserver映射目錄配置
mkdir -p /opt/docker/rocketmq/nameserver/logs
mkdir -p /opt/docker/rocketmq/nameserver/store
#broker-a的master映射配置
mkdir -p /opt/docker/rocketmq/broker/master-a/logs
mkdir -p /opt/docker/rocketmq/broker/master-a/store
mkdir -p /opt/docker/rocketmq/broker/master-a/conf
#broker-b的slave映射配置
mkdir -p /opt/docker/rocketmq/broker/slave-b/logs
mkdir -p /opt/docker/rocketmq/broker/slave-b/store
mkdir -p /opt/docker/rocketmq/broker/slave-b/conf
創(chuàng)建rmqbroker配置文件
需要注意的點(diǎn):
brokerIP1屬性需要根據(jù)具體情況修改,由于是docker部署,使用的是的docker的網(wǎng)絡(luò),所以這里設(shè)置為宿主機(jī)內(nèi)網(wǎng)ip。
namesrvAddr配置為nameserver的IP和端口,這里也設(shè)置為宿主機(jī)的內(nèi)網(wǎng)ip和映射端口,多個(gè)nameserver要用分號(hào)隔開。
istenPort是對(duì)外服務(wù)的監(jiān)聽端口,會(huì)影響到vip端口和主從同步端口,vip端口=listenPort-2,主從同步端口=listenPort+1,構(gòu)建broker時(shí)需要將容器的listenPort映射為宿主機(jī)相同的端口,vip端口和主從同步端口也要和容器的端口同步。例如此時(shí),listenPort=10911,則構(gòu)建broker容器的時(shí)候要添加以下參數(shù)
-p 10911:10911
-p 10912:10912
-p 10909:10909
叢節(jié)點(diǎn)需要設(shè)置
brokerId=1 #數(shù)字往后類推
brokerRole=SLAVE
需要改變
listenPort 避免端口和master沖突
brokerName 同個(gè)集群中broker的名稱不能相同
rmqbroker-master-a,修改master-a的配置文件
cd /opt/docker/rocketmq/broker/master-a/conf
vim broker.conf
master-a的配置文件內(nèi)容
brokerClusterName=rocketmq-cluster
# broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=a
# 0 表示Master,>0 表示Slave
brokerId=0
# 多網(wǎng)卡配置,不配置默認(rèn)為內(nèi)網(wǎng),讓mq只能內(nèi)網(wǎng)訪問
brokerIP1 = 10.100.232.171
# nameServer地址,分號(hào)分割
namesrvAddr=10.100.232.171:9876;10.100.232.172:9876
# 在發(fā)送消息時(shí),自動(dòng)創(chuàng)建服務(wù)器不存在的Topic,默認(rèn)創(chuàng)建的隊(duì)列數(shù)
defaultTopicQueueNums=4
# 是否允許Broker 自動(dòng)創(chuàng)建Topic, 建議線下開啟, 線上關(guān)閉
autoCreateTopicEnable=true
# 是否允許Broker 自動(dòng)創(chuàng)建訂閱組, 建議線下開啟, 線上關(guān)閉
autoCreateSubscriptionGroup=true
# Broker 對(duì)外服務(wù)的監(jiān)聽端口
listenPort=10911
# 刪除文件時(shí)間點(diǎn),默認(rèn)是凌晨4點(diǎn)
deleteWhen=04
# 文件保留時(shí)間,默認(rèn)是48小時(shí)
fileReservedTime=48
# commitLog每個(gè)文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每個(gè)文件默認(rèn)存30w條, 根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=30000
# destroyMapedFileIntervalForcibly=12000
# redeleteHangedFileInterval=12000
# 檢測(cè)物理文件磁盤空間
diskMaxUsedSpaceRatio=88
# 限制的消息大小
maxMessageSize=65536
# flushCommitLogLeastPages=4
# flushConsumeQueueLeastPages=2
# flushCommitLogThoroughInterval=10000
# flushConsumeQueueThoroughInterval=60000
# Broker的角色
# -ASYNC_MASTER 異步復(fù)制Master
# -SYNC_MASTER 同步雙寫Master
# -SLAVE
brokerRole=ASYNC_MASTER
# 刷盤方式
# - ASYNC_FLUSH 異步刷盤
# - SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
# checkTransactionMessageEnable=false
# 發(fā)消息線程池?cái)?shù)量
# sendMessageTreadPoolNums=128
# 拉消息線程池?cái)?shù)量
# pullMessageTreadPoolNums=128
# lushDiskType=ASYNC_FLUSH
rmqbroker-slave-b配置文件修改
cd /opt/docker/rocketmq/broker/slave-b/conf
vim broker.conf
slave-b配置文件
brokerClusterName=rocketmq-cluster
# broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=b
# 0 表示Master,>0 表示Slave
brokerId=1
# 多網(wǎng)卡配置,不配置默認(rèn)為內(nèi)網(wǎng),讓mq只能內(nèi)網(wǎng)訪問
brokerIP1 = 10.100.232.171
# nameServer地址,分號(hào)分割
namesrvAddr=10.100.232.171:9876;10.100.232.172:9876
# 在發(fā)送消息時(shí),自動(dòng)創(chuàng)建服務(wù)器不存在的Topic,默認(rèn)創(chuàng)建的隊(duì)列數(shù)
defaultTopicQueueNums=4
# 是否允許Broker 自動(dòng)創(chuàng)建Topic, 建議線下開啟, 線上關(guān)閉
autoCreateTopicEnable=true
# 是否允許Broker 自動(dòng)創(chuàng)建訂閱組, 建議線下開啟, 線上關(guān)閉
autoCreateSubscriptionGroup=true
# Broker 對(duì)外服務(wù)的監(jiān)聽端口
listenPort=10921
# 刪除文件時(shí)間點(diǎn),默認(rèn)是凌晨4點(diǎn)
deleteWhen=04
# 文件保留時(shí)間,默認(rèn)是48小時(shí)
fileReservedTime=48
# commitLog每個(gè)文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每個(gè)文件默認(rèn)存30w條, 根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=30000
# destroyMapedFileIntervalForcibly=12000
# redeleteHangedFileInterval=12000
# 檢測(cè)物理文件磁盤空間
diskMaxUsedSpaceRatio=88
# 限制的消息大小
maxMessageSize=65536
# flushCommitLogLeastPages=4
# flushConsumeQueueLeastPages=2
# flushCommitLogThoroughInterval=10000
# flushConsumeQueueThoroughInterval=60000
# Broker的角色
# -ASYNC_MASTER 異步復(fù)制Master
# -SYNC_MASTER 同步雙寫Master
# -SLAVE
brokerRole=SLAVE
# 刷盤方式
# - ASYNC_FLUSH 異步刷盤
# - SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
# checkTransactionMessageEnable=false
# 發(fā)消息線程池?cái)?shù)量
# sendMessageTreadPoolNums=128
# 拉消息線程池?cái)?shù)量
# pullMessageTreadPoolNums=128
# lushDiskType=ASYNC_FLUSH
創(chuàng)建docker-compose.yml
cd /opt/docker/rocketmq
vim docker-compose.yml
文件內(nèi)容
version: '3.5'
networks:
rmq:
name: rmq
driver: bridge
services:
rmqnamesrv:
image: rocketmqinc/rocketmq
container_name: rmqnamesrv
ports:
- 9876:9876
volumes:
- /opt/docker/rocketmq/nameserver/logs:/home/rocketmq/logs
- /opt/docker/rocketmq/nameserver/store:/home/rocketmq/store
restart: always
command: sh mqnamesrv
networks:
rmq:
aliases:
- rmqnamesrv
rmqbroker-master-a:
image: rocketmqinc/rocketmq
container_name: rmqbroker-master-a
ports:
- 10911:10911
- 10912:10912
- 10909:10909
volumes:
- /opt/docker/rocketmq/broker/master-a/logs:/home/rocketmq/logs
- /opt/docker/rocketmq/broker/master-a/store:/home/rocketmq/store
- /opt/docker/rocketmq/broker/master-a/conf/broker.conf:/home/rocketmq/conf/broker.conf
restart: always
environment:
JAVA_OPTS: "-Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
command: sh mqbroker -c /home/rocketmq/conf/broker.conf autoCreateTopicEnable=true &
links:
- rmqnamesrv:rmqnamesrv
networks:
rmq:
aliases:
- rmqbroker-master-a
rmqbroker-slave-b:
image: rocketmqinc/rocketmq
container_name: rmqbroker-slave-b
ports:
- 10921:10921
- 10922:10922
- 10919:10919
volumes:
- /opt/docker/rocketmq/broker/slave-b/logs:/home/rocketmq/logs
- /opt/docker/rocketmq/broker/slave-b/store:/home/rocketmq/store
- /opt/docker/rocketmq/broker/slave-b/conf/broker.conf:/home/rocketmq/conf/broker.conf
restart: always
environment:
JAVA_OPTS: "-Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
command: sh mqbroker -c /home/rocketmq/conf/broker.conf autoCreateTopicEnable=true &
links:
- rmqnamesrv:rmqnamesrv
networks:
rmq:
aliases:
- rmqbroker-slave-b
rmqconsole:
image: styletang/rocketmq-console-ng
container_name: rmqconsole
ports:
- 9101:8080
restart: always
environment:
JAVA_OPTS: -Drocketmq.namesrv.addr=10.100.232.171:9876;10.100.232.172:9876
-Dcom.rocketmq.sendMessageWithVIPChannel=false
-Duser.timezone='Asia/Shanghai'
networks:
rmq:
aliases:
- rmqconsole
構(gòu)建容器
docker-compose -f docker-compose.yml up -d
10.100.232.172機(jī)器
創(chuàng)建目錄用于映射
#nameserver映射目錄配置
mkdir -p /opt/docker/rocketmq/nameserver/logs
mkdir -p /opt/docker/rocketmq/nameserver/store
#broker-b的master映射配置
mkdir -p /opt/docker/rocketmq/broker/master-b/logs
mkdir -p /opt/docker/rocketmq/broker/master-b/store
mkdir -p /opt/docker/rocketmq/broker/master-b/conf
#broker-a的slave映射配置
mkdir -p /opt/docker/rocketmq/broker/slave-a/logs
mkdir -p /opt/docker/rocketmq/broker/slave-a/store
mkdir -p /opt/docker/rocketmq/broker/slave-a/conf
rmqbroker-master-b,修改master-b的配置文件
cd /opt/docker/rocketmq/broker/master-b/conf
vim broker.conf
master-b的broker配置文件內(nèi)容
brokerClusterName=rocketmq-cluster
# broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=b
# 0 表示Master,>0 表示Slave
brokerId=0
# 多網(wǎng)卡配置,不配置默認(rèn)為內(nèi)網(wǎng),讓mq只能內(nèi)網(wǎng)訪問
brokerIP1 = 10.100.232.172
# nameServer地址,分號(hào)分割
namesrvAddr=10.100.232.171:9876;10.100.232.172:9876
# 在發(fā)送消息時(shí),自動(dòng)創(chuàng)建服務(wù)器不存在的Topic,默認(rèn)創(chuàng)建的隊(duì)列數(shù)
defaultTopicQueueNums=4
# 是否允許Broker 自動(dòng)創(chuàng)建Topic, 建議線下開啟, 線上關(guān)閉
autoCreateTopicEnable=true
# 是否允許Broker 自動(dòng)創(chuàng)建訂閱組, 建議線下開啟, 線上關(guān)閉
autoCreateSubscriptionGroup=true
# Broker 對(duì)外服務(wù)的監(jiān)聽端口
listenPort=10921
# 刪除文件時(shí)間點(diǎn),默認(rèn)是凌晨4點(diǎn)
deleteWhen=04
# 文件保留時(shí)間,默認(rèn)是48小時(shí)
fileReservedTime=48
# commitLog每個(gè)文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每個(gè)文件默認(rèn)存30w條, 根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=30000
# destroyMapedFileIntervalForcibly=12000
# redeleteHangedFileInterval=12000
# 檢測(cè)物理文件磁盤空間
diskMaxUsedSpaceRatio=88
# 限制的消息大小
maxMessageSize=65536
# flushCommitLogLeastPages=4
# flushConsumeQueueLeastPages=2
# flushCommitLogThoroughInterval=10000
# flushConsumeQueueThoroughInterval=60000
# Broker的角色
# -ASYNC_MASTER 異步復(fù)制Master
# -SYNC_MASTER 同步雙寫Master
# -SLAVE
brokerRole=ASYNC_MASTER
# 刷盤方式
# - ASYNC_FLUSH 異步刷盤
# - SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
# checkTransactionMessageEnable=false
# 發(fā)消息線程池?cái)?shù)量
# sendMessageTreadPoolNums=128
# 拉消息線程池?cái)?shù)量
# pullMessageTreadPoolNums=128
# lushDiskType=ASYNC_FLUSH
rmqbroker-slave-a配置文件修改
cd /opt/docker/rocketmq/broker/slave-a/conf
vim broker.conf
slave-a配置文件
brokerClusterName=rocketmq-cluster
# broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=a
# 0 表示Master,>0 表示Slave
brokerId=1
# 多網(wǎng)卡配置,不配置默認(rèn)為內(nèi)網(wǎng),讓mq只能內(nèi)網(wǎng)訪問
brokerIP1 = 10.100.232.172
# nameServer地址,分號(hào)分割
namesrvAddr=10.100.232.171:9876;10.100.232.172:9876
# 在發(fā)送消息時(shí),自動(dòng)創(chuàng)建服務(wù)器不存在的Topic,默認(rèn)創(chuàng)建的隊(duì)列數(shù)
defaultTopicQueueNums=4
# 是否允許Broker 自動(dòng)創(chuàng)建Topic, 建議線下開啟, 線上關(guān)閉
autoCreateTopicEnable=true
# 是否允許Broker 自動(dòng)創(chuàng)建訂閱組, 建議線下開啟, 線上關(guān)閉
autoCreateSubscriptionGroup=true
# Broker 對(duì)外服務(wù)的監(jiān)聽端口
listenPort=10911
# 刪除文件時(shí)間點(diǎn),默認(rèn)是凌晨4點(diǎn)
deleteWhen=04
# 文件保留時(shí)間,默認(rèn)是48小時(shí)
fileReservedTime=48
# commitLog每個(gè)文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每個(gè)文件默認(rèn)存30w條, 根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=30000
# destroyMapedFileIntervalForcibly=12000
# redeleteHangedFileInterval=12000
# 檢測(cè)物理文件磁盤空間
diskMaxUsedSpaceRatio=88
# 限制的消息大小
maxMessageSize=65536
# flushCommitLogLeastPages=4
# flushConsumeQueueLeastPages=2
# flushCommitLogThoroughInterval=10000
# flushConsumeQueueThoroughInterval=60000
# Broker的角色
# -ASYNC_MASTER 異步復(fù)制Master
# -SYNC_MASTER 同步雙寫Master
# -SLAVE
brokerRole=SLAVE
# 刷盤方式
# - ASYNC_FLUSH 異步刷盤
# - SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
# checkTransactionMessageEnable=false
# 發(fā)消息線程池?cái)?shù)量
# sendMessageTreadPoolNums=128
# 拉消息線程池?cái)?shù)量
# pullMessageTreadPoolNums=128
# lushDiskType=ASYNC_FLUSH
創(chuàng)建docker-compose.yml
cd /opt/docker/rocketmq
vim docker-compose.yml
version: '3.5'
networks:
rmq:
name: rmq
driver: bridge
services:
rmqnamesrv:
image: rocketmqinc/rocketmq
container_name: rmqnamesrv
ports:
- 9876:9876
volumes:
- /opt/docker/rocketmq/nameserver/logs:/home/rocketmq/logs
- /opt/docker/rocketmq/nameserver/store:/home/rocketmq/store
restart: always
command: sh mqnamesrv
networks:
rmq:
aliases:
- rmqnamesrv
rmqbroker-master-b:
image: rocketmqinc/rocketmq
container_name: rmqbroker-master-b
ports:
- 10921:10921
- 10922:10922
- 10919:10919
volumes:
- /opt/docker/rocketmq/broker/master-b/logs:/home/rocketmq/logs
- /opt/docker/rocketmq/broker/master-b/store:/home/rocketmq/store
- /opt/docker/rocketmq/broker/master-b/conf/broker.conf:/home/rocketmq/conf/broker.conf
restart: always
environment:
JAVA_OPTS: "-Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
command: sh mqbroker -c /home/rocketmq/conf/broker.conf autoCreateTopicEnable=true &
links:
- rmqnamesrv:rmqnamesrv
networks:
rmq:
aliases:
- rmqbroker-master-a
rmqbroker-slave-a:
image: rocketmqinc/rocketmq
container_name: rmqbroker-slave-a
ports:
- 10911:10911
- 10912:10912
- 10909:10909
volumes:
- /opt/docker/rocketmq/broker/slave-a/logs:/home/rocketmq/logs
- /opt/docker/rocketmq/broker/slave-a/store:/home/rocketmq/store
- /opt/docker/rocketmq/broker/slave-a/conf/broker.conf:/home/rocketmq/conf/broker.conf
restart: always
environment:
JAVA_OPTS: "-Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
command: sh mqbroker -c /home/rocketmq/conf/broker.conf autoCreateTopicEnable=true &
links:
- rmqnamesrv:rmqnamesrv
networks:
rmq:
aliases:
- rmqbroker-slave-a
# rmqconsole:
# image: styletang/rocketmq-console-ng
# container_name: rmqconsole
# ports:
# - 9101:8080
# restart: always
# environment:
# JAVA_OPTS: -Drocketmq.namesrv.addr=10.100.232.171:9876;10.100.232.172:9876
# -Dcom.rocketmq.sendMessageWithVIPChannel=false
# -Duser.timezone='Asia/Shanghai'
# networks:
# rmq:
# aliases:
# - rmqconsole
構(gòu)建容器
docker-compose -f docker-compose.yml up -d
進(jìn)入docker容器命令
docker exec -it 容器id /bin/bash
java服務(wù)配置文件
rocketmq:
name-server: 10.100.232.171:9876;10.100.232.172:9876
自己去試試吧
收錄于合集 #IT學(xué)習(xí)道場(chǎng)靚文集錦
30個(gè)
上一篇
docker-compose部署redis三主三從集群
作者:IT學(xué)習(xí)道場(chǎng)
歡迎關(guān)注微信公眾號(hào) : IT學(xué)習(xí)道場(chǎng)