docker-compose搭建Dledger模式rocketMq高可用集群
资源清单
机器 | ip | 基础设施 | name-server | broker0 id | broker1 id | broker2 id | dashboard |
node0 | 192.168.1.81 | centos7、docker_20.10.18、docker-compose_2.10.2 | 存在 | 0 | 2 | 1 | - |
node1 | 192.168.1.123 | centos7、docker_20.10.18、docker-compose_2.10.2 | 存在 | 1 | 0 | 2 | - |
node2 | 192.168.1.172 | centos7、docker_20.10.18、docker-compose_2.10.2 | 存在 | 2 | 1 | 0 | 存在 |
初始化文件目录
# 所有机器
# 创建rocket目录
mkdir -p /home/docker/rocketMq
cd /home/docker/rocketMq
# 创建rocket存储、日志、配置目录
mkdir -p /home/docker/rocketMq/data/broker-n{0..2}/store
mkdir -p /home/docker/rocketMq/data/broker-n{0..2}/conf
mkdir -p /home/docker/rocketMq/data/broker-n{0..2}/logs
mkdir -p /home/docker/rocketMq/data/broker-n{0..2}/commitlog
创建配置
node0相关配置
broker-n0
vi /home/docker/rocketMq/data/broker-n0/conf/broker.properties
# broker名,名称一样的节点就是一组主从节点。
brokerName=broker0
# broker对外服务的监听端口
listenPort=30911
# 所属集群名,名称一样的节点就在同一个集群内
brokerClusterName=DefaultCluster
# brokerid,0就表示是Master,>0的都是表示Slave
brokerId=0
# 删除文件时间点,默认凌晨4点
deleteWhen=04
# 文件保留时间,默认48 小时
fileReservedTime=48
# broker角色,ASYNC_MASTER异步复制Master,SYNC_MASTER同步双写Master,SLAVE
brokerRole=ASYNC_MASTER
# 刷盘方式,ASYNC_FLUSH异步刷盘,SYNC_FLUSH同步刷盘
flushDiskType=ASYNC_FLUSH
# broker ip多网卡配置,容器配置宿主机网卡ip
brokerIP1=192.168.1.81
# name-server地址,分号间隔
namesrvAddr=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
# 存储路径
storePathRootDir=/home/rocketmq/store
# commitLog存储路径
storePathCommitLog=/home/rocketmq/commitlog
# 是否允许broker自动创建Topic
autoCreateTopicEnable=true
# 是否允许broker自动创建订阅组
autoCreateSubscriptionGroup=true
# 是否启动DLedger
enableDLegerCommitLog=true
# DLedger Raft Group的名字,建议和brokerName保持一致
dLegerGroup=broker0
# DLedger Group内各节点的端口信息,同一个Group内的各个节点配置必须要保证一致
dLegerPeers=n0-192.168.1.81:40911;n1-192.168.1.123:40911;n2-192.168.1.172:40911
# 节点id, 必须属于dLegerPeers中的一个;同Group内各个节点要唯一
dLegerSelfId=n0
broker-n1
vi /home/docker/rocketMq/data/broker-n1/conf/broker.properties
brokerName=broker1
listenPort=30912
brokerClusterName=DefaultCluster
brokerId=2
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
brokerIP1=192.168.1.81
namesrvAddr=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
storePathRootDir=/home/rocketmq/store
storePathCommitLog=/home/rocketmq/commitlog
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
enableDLegerCommitLog=true
dLegerGroup=broker1
dLegerPeers=n0-192.168.1.81:40912;n1-192.168.1.123:40912;n2-192.168.1.172:40912
dLegerSelfId=n0
broker-n2
vi /home/docker/rocketMq/data/broker-n2/conf/broker.properties
brokerName=broker2
listenPort=30913
brokerClusterName=DefaultCluster
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
brokerIP1=192.168.1.81
namesrvAddr=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
storePathRootDir=/home/rocketmq/store
storePathCommitLog=/home/rocketmq/commitlog
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
enableDLegerCommitLog=true
dLegerGroup=broker2
dLegerPeers=n0-192.168.1.81:40913;n1-192.168.1.123:40913;n2-192.168.1.172:40913
dLegerSelfId=n0
docker-compose
vi /home/docker/rocketMq/docker-compose.yaml
version: '3'
services:
namesrv:
restart: always
image: apache/rocketmq:5.1.3
container_name: namesrv
ports:
- 9876:9876
environment:
- JAVA_OPT_EXT=-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn256m
- TZ=Asia/Shanghai
volumes:
- /home/docker/rocketMq/data/namesrv/logs:/home/rocketmq/logs/rocketmqlogs/rocketmqlogs
command: sh mqnamesrv
broker-n0:
restart: always
image: apache/rocketmq:5.1.3
container_name: broker-n0
ports:
- 30911:30911
- 40911:40911
environment:
- NAMESRV_ADDR=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
- JAVA_OPT_EXT=-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn256m
- TZ=Asia/Shanghai
volumes:
- /home/docker/rocketMq/data/broker-n0/logs:/home/rocketmq/logs/rocketmqlogs
- /home/docker/rocketMq/data/broker-n0/store:/home/rocketmq/store
- /home/docker/rocketMq/data/broker-n0/commitlog:/home/rocketmq/commitlog
- /home/docker/rocketMq/data/broker-n0/conf/broker.properties:/home/rocketmq/conf/broker.properties
command: sh mqbroker -c /home/rocketmq/conf/broker.properties
broker-n1:
restart: always
image: apache/rocketmq:5.1.3
container_name: broker-n1
ports:
- 30912:30912
- 40912:40912
environment:
- NAMESRV_ADDR=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
- JAVA_OPT_EXT=-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn256m
- TZ=Asia/Shanghai
volumes:
- /home/docker/rocketMq/data/broker-n1/logs:/home/rocketmq/logs/rocketmqlogs
- /home/docker/rocketMq/data/broker-n1/store:/home/rocketmq/store
- /home/docker/rocketMq/data/broker-n1/commitlog:/home/rocketmq/commitlog
- /home/docker/rocketMq/data/broker-n1/conf/broker.properties:/home/rocketmq/conf/broker.properties
command: sh mqbroker -c /home/rocketmq/conf/broker.properties
broker-n2:
restart: always
image: apache/rocketmq:5.1.3
container_name: broker-n2
ports:
- 30913:30913
- 40913:40913
environment:
- NAMESRV_ADDR=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
- JAVA_OPT_EXT=-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn256m
- TZ=Asia/Shanghai
volumes:
- /home/docker/rocketMq/data/broker-n2/logs:/home/rocketmq/logs/rocketmqlogs
- /home/docker/rocketMq/data/broker-n2/store:/home/rocketmq/store
- /home/docker/rocketMq/data/broker-n2/commitlog:/home/rocketmq/commitlog
- /home/docker/rocketMq/data/broker-n2/conf/broker.properties:/home/rocketmq/conf/broker.properties
command: sh mqbroker -c /home/rocketmq/conf/broker.properties
node1相关配置
broker-n0
vi /home/docker/rocketMq/data/broker-n0/conf/broker.properties
brokerName=broker0
listenPort=30911
brokerClusterName=DefaultCluster
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
brokerIP1=192.168.1.123
namesrvAddr=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
storePathRootDir=/home/rocketmq/store
storePathCommitLog=/home/rocketmq/commitlog
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
enableDLegerCommitLog=true
dLegerGroup=broker0
dLegerPeers=n0-192.168.1.81:40911;n1-192.168.1.123:40911;n2-192.168.1.172:40911
dLegerSelfId=n1
broker-n1
vi /home/docker/rocketMq/data/broker-n1/conf/broker.properties
brokerName=broker1
listenPort=30912
brokerClusterName=DefaultCluster
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
brokerIP1=192.168.1.123
namesrvAddr=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
storePathRootDir=/home/rocketmq/store
storePathCommitLog=/home/rocketmq/commitlog
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
enableDLegerCommitLog=true
dLegerGroup=broker1
dLegerPeers=n0-192.168.1.81:40912;n1-192.168.1.123:40912;n2-192.168.1.172:40912
dLegerSelfId=n1
broker-n2
vi /home/docker/rocketMq/data/broker-n2/conf/broker.properties
brokerName=broker2
listenPort=30913
brokerClusterName=DefaultCluster
brokerId=2
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
brokerIP1=192.168.1.123
namesrvAddr=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
storePathRootDir=/home/rocketmq/store
storePathCommitLog=/home/rocketmq/commitlog
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
enableDLegerCommitLog=true
dLegerGroup=broker2
dLegerPeers=n0-192.168.1.81:40913;n1-192.168.1.123:40913;n2-192.168.1.172:40913
dLegerSelfId=n1
docker-compose
vi /home/docker/rocketMq/docker-compose.yaml
version: '3'
services:
namesrv:
restart: always
image: apache/rocketmq:5.1.3
container_name: namesrv
ports:
- 9876:9876
environment:
- JAVA_OPT_EXT=-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn256m
- TZ=Asia/Shanghai
volumes:
- /home/docker/rocketMq/data/namesrv/logs:/home/rocketmq/logs/rocketmqlogs
command: sh mqnamesrv
broker-n0:
restart: always
image: apache/rocketmq:5.1.3
container_name: broker-n0
ports:
- 30911:30911
- 40911:40911
environment:
- NAMESRV_ADDR=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
- JAVA_OPT_EXT=-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn256m
- TZ=Asia/Shanghai
volumes:
- /home/docker/rocketMq/data/broker-n0/logs:/home/rocketmq/logs/rocketmqlogs
- /home/docker/rocketMq/data/broker-n0/store:/home/rocketmq/store
- /home/docker/rocketMq/data/broker-n0/commitlog:/home/rocketmq/commitlog
- /home/docker/rocketMq/data/broker-n0/conf/broker.properties:/home/rocketmq/conf/broker.properties
command: sh mqbroker -c /home/rocketmq/conf/broker.properties
broker-n1:
restart: always
image: apache/rocketmq:5.1.3
container_name: broker-n1
ports:
- 30912:30912
- 40912:40912
environment:
- NAMESRV_ADDR=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
- JAVA_OPT_EXT=-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn256m
- TZ=Asia/Shanghai
volumes:
- /home/docker/rocketMq/data/broker-n1/logs:/home/rocketmq/logs/rocketmqlogs
- /home/docker/rocketMq/data/broker-n1/store:/home/rocketmq/store
- /home/docker/rocketMq/data/broker-n1/commitlog:/home/rocketmq/commitlog
- /home/docker/rocketMq/data/broker-n1/conf/broker.properties:/home/rocketmq/conf/broker.properties
command: sh mqbroker -c /home/rocketmq/conf/broker.properties
broker-n2:
restart: always
image: apache/rocketmq:5.1.3
container_name: broker-n2
ports:
- 30913:30913
- 40913:40913
environment:
- NAMESRV_ADDR=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
- JAVA_OPT_EXT=-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn256m
- TZ=Asia/Shanghai
volumes:
- /home/docker/rocketMq/data/broker-n2/logs:/home/rocketmq/logs/rocketmqlogs
- /home/docker/rocketMq/data/broker-n2/store:/home/rocketmq/store
- /home/docker/rocketMq/data/broker-n2/commitlog:/home/rocketmq/commitlog
- /home/docker/rocketMq/data/broker-n2/conf/broker.properties:/home/rocketmq/conf/broker.properties
command: sh mqbroker -c /home/rocketmq/conf/broker.properties
node2相关配置
broker-n0
vi /home/docker/rocketMq/data/broker-n0/conf/broker.properties
brokerName=broker0
listenPort=30911
brokerClusterName=DefaultCluster
brokerId=2
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
brokerIP1=192.168.1.172
namesrvAddr=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
storePathRootDir=/home/rocketmq/store
storePathCommitLog=/home/rocketmq/commitlog
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
enableDLegerCommitLog=true
dLegerGroup=broker0
dLegerPeers=n0-192.168.1.81:40911;n1-192.168.1.123:40911;n2-192.168.1.172:40911
dLegerSelfId=n2
broker-n1
vi /home/docker/rocketMq/data/broker-n1/conf/broker.properties
brokerName=broker1
listenPort=30912
brokerClusterName=DefaultCluster
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
brokerIP1=192.168.1.172
namesrvAddr=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
storePathRootDir=/home/rocketmq/store
storePathCommitLog=/home/rocketmq/commitlog
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
enableDLegerCommitLog=true
dLegerGroup=broker1
dLegerPeers=n0-192.168.1.81:40912;n1-192.168.1.123:40912;n2-192.168.1.172:40912
dLegerSelfId=n2
broker-n2
vi /home/docker/rocketMq/data/broker-n2/conf/broker.properties
brokerName=broker2
listenPort=30913
brokerClusterName=DefaultCluster
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
brokerIP1=192.168.1.172
namesrvAddr=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
storePathRootDir=/home/rocketmq/store
storePathCommitLog=/home/rocketmq/commitlog
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
enableDLegerCommitLog=true
dLegerGroup=broker2
dLegerPeers=n0-192.168.1.81:40913;n1-192.168.1.123:40913;n2-192.168.1.172:40913
dLegerSelfId=n2
docker-compose
vi /home/docker/rocketMq/docker-compose.yaml
version: '3'
services:
namesrv:
restart: always
image: apache/rocketmq:5.1.3
container_name: namesrv
ports:
- 9876:9876
environment:
- JAVA_OPT_EXT=-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn256m
- TZ=Asia/Shanghai
volumes:
- /home/docker/rocketMq/data/namesrv/logs:/home/rocketmq/logs/rocketmqlogs
command: sh mqnamesrv
broker-n0:
restart: always
image: apache/rocketmq:5.1.3
container_name: broker-n0
ports:
- 30911:30911
- 40911:40911
environment:
- NAMESRV_ADDR=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
- JAVA_OPT_EXT=-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn256m
- TZ=Asia/Shanghai
volumes:
- /home/docker/rocketMq/data/broker-n0/logs:/home/rocketmq/logs/rocketmqlogs
- /home/docker/rocketMq/data/broker-n0/store:/home/rocketmq/store
- /home/docker/rocketMq/data/broker-n0/commitlog:/home/rocketmq/commitlog
- /home/docker/rocketMq/data/broker-n0/conf/broker.properties:/home/rocketmq/conf/broker.properties
command: sh mqbroker -c /home/rocketmq/conf/broker.properties
broker-n1:
restart: always
image: apache/rocketmq:5.1.3
container_name: broker-n1
ports:
- 30912:30912
- 40912:40912
environment:
- NAMESRV_ADDR=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
- JAVA_OPT_EXT=-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn256m
- TZ=Asia/Shanghai
volumes:
- /home/docker/rocketMq/data/broker-n1/logs:/home/rocketmq/logs/rocketmqlogs
- /home/docker/rocketMq/data/broker-n1/store:/home/rocketmq/store
- /home/docker/rocketMq/data/broker-n1/commitlog:/home/rocketmq/commitlog
- /home/docker/rocketMq/data/broker-n1/conf/broker.properties:/home/rocketmq/conf/broker.properties
command: sh mqbroker -c /home/rocketmq/conf/broker.properties
broker-n2:
restart: always
image: apache/rocketmq:5.1.3
container_name: broker-n2
ports:
- 30913:30913
- 40913:40913
environment:
- NAMESRV_ADDR=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876
- JAVA_OPT_EXT=-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn256m
- TZ=Asia/Shanghai
volumes:
- /home/docker/rocketMq/data/broker-n2/logs:/home/rocketmq/logs/rocketmqlogs
- /home/docker/rocketMq/data/broker-n2/store:/home/rocketmq/store
- /home/docker/rocketMq/data/broker-n2/commitlog:/home/rocketmq/commitlog
- /home/docker/rocketMq/data/broker-n2/conf/broker.properties:/home/rocketmq/conf/broker.properties
command: sh mqbroker -c /home/rocketmq/conf/broker.properties
console:
restart: always
image: apacherocketmq/rocketmq-dashboard
container_name: console
ports:
- 19081:8080
environment:
TZ: "Asia/Shanghai"
JAVA_OPTS: "-Drocketmq.namesrv.addr=192.168.1.81:9876;192.168.1.123:9876;192.168.1.172:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
depends_on:
- namesrv
启动容器
# 所有机器
cd /home/docker/rocketMq
# 切记修改权限
chmod -R 777 ./data
docker compose up -d
验证
验证是否创建成功
浏览器访问192.168.1.172:19081
验证dledger
# 找到任意broker master所在宿主机
# 停调该broker master,这里以node0 broker-n2为例
docker compose stop broker-n2
可以看到node0 broker-n2已下线,node1 broker-n2已成为master