Dledger模式rocketMq高可用集群

本文介绍使用docker-compose搭建Dledger模式RocketMQ高可用集群。包含资源清单、初始化文件目录、创建各节点相关配置及docker-compose文件,启动容器后进行验证,通过浏览器访问特定地址查看创建情况,还能看到节点状态,如node0 broker-n2下线,node1 broker-n2成master。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker-compose搭建Dledger模式rocketMq高可用集群

资源清单

机器ip基础设施name-serverbroker0 idbroker1 idbroker2 iddashboard
node0192.168.1.81centos7、docker_20.10.18、docker-compose_2.10.2存在021-
node1192.168.1.123centos7、docker_20.10.18、docker-compose_2.10.2存在102-
node2192.168.1.172centos7、docker_20.10.18、docker-compose_2.10.2存在210存在

初始化文件目录

# 所有机器

# 创建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

master选举成功
可以看到node0 broker-n2已下线,node1 broker-n2已成为master

### RocketMQDLedger集成概述 RocketMQ支持通过DLedger协议来增强其高可用性和数据一致性。DLedger是一种分布式账本技术,能够提供强一致性的日志复制功能[^1]。 ### 配置环境准备 为了使RocketMQ集群利用DLedger特性,需先安装并配置好Java运行环境以及下载对应版本的RocketMQ二进制包。解压后进入`bin`目录执行命令启动NameServer服务: ```bash nohup sh mqnamesrv & ``` 对于Broker节点,则要修改`conf/broker.conf`文件中的相关参数以启用DLedger模式,并指定相应的Group ID、Peers列表等信息[^4]。 ### 修改Broker配置文件 编辑`broker.conf`时应加入如下几行设置用于开启DLedger功能: ```properties enableDLegerCommitLog=true dledgerGroup=group_name dledgerSelfId=broke_id dledgerPeerList=peer1:port,peer2:port,... ``` 其中`enableDLegerCommitLog`选项用来激活DLedger提交日志;而`dledgerGroup`, `dledgerSelfId`和`dledgerPeerList`分别定义了当前Broker所属组名、自身ID及其余成员地址。 ### 启动Broker实例 完成上述更改之后保存退出,在终端输入以下指令即可让Broker按照新的设定正常运作起来: ```bash nohup sh mqbroker -n localhost:9876 & ``` 此时该Broker将会自动尝试连接到其他已知的DLedger Group内的伙伴来进行同步操作[^3]。 ### 数据存储优化建议 考虑到性能因素,推荐采用内存映射的方式处理Commit Log从而提高写入效率。这不仅依赖于操作系统层面的支持还需要合理调整JVM堆外内存大小及其他关联属性确保最佳实践效果[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值