RocketMQ-Dledger高可用集群搭建

本文详细介绍如何使用DLedger构建RocketMQ集群,包括下载、配置和启动过程。通过三台服务器配置,实现主从切换,确保消息系统的高可用性。

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


构建集群需要至少3台服务器

构建安装DLedger

  1. git clone https://github.com/openmessaging/openmessaging-storage-dledger.git
  2. cd openmessaging-storage-dledger
  3. mvn clean install -DskipTests

下载RocketMQ

  1. 从 https://github.com/apache/rocketmq/releases 这里下载需要的RocketMQ版本

  2. unzip rocketmq-all-4.7.0-source-release.zip

  3. cd rocketmq-all-4.7.0/

  4. mvn -Prelease-all -DskipTests clean install -U

  5. cd distribution/target/rocketmq-4.7.0/rocketmq-4.7.0

    可以将该文件拷出

    cp rocketmq-all-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0 /opt/rocketmq-4.7.0

修改配置文件

服务器说明:(生产中应该将 NameServer 部署到其他服务器中,在这为了方便,与Broker部署在一起)

服务器ip安装的服务
服务器1-主192.168.56.102DLedger,Broker,NameServer
服务器2-从192.168.56.103DLedger,Broker,NameServer
服务器3-从192.168.56.104DLedger,Broker,NameServer

服务器1配置-Master

  1. vim conf/dledger/broker-n0.conf
  2. 修改Broker配置
## 集群名
brokerClusterName = RaftCluster
## broker组名,同一个RaftClusterGroup内,brokerName名要一样
brokerName=RaftNode00
## 监听的端口
listenPort=30911
## 你设置的NameServer地址和端口
namesrvAddr=192.168.56.102:9876;192.168.56.103:9876;192.168.56.104:9876
storePathRootDir=/tmp/rmqstore/node00
storePathCommitLog=/tmp/rmqstore/node00/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
## n0 n1 n2 分别是broker1,broker2,broker3 的 dLegerSelfId
## 例如:dLegerPeers=n0-服务器1的IP:40911;n1-服务器2的IP:40912;n2-服务器3的IP:40913
dLegerPeers=n0-192.168.56.102:40911;n1-192.168.56.103:40912;n2-192.168.56.104:40913
## must be unique
## 这个值必须是在同一个RaftClusterGroup内唯一的
dLegerSelfId=n0
sendMessageThreadPoolNums=16
## 由于我的虚拟机配置了多个网卡,所以会绑定ip错误,因此我配置了这项,
brokerIP1=192.168.56.102

其他配置与详细说明:Broker 配置

服务器2配置-Slave

  1. vim conf/dledger/broker-n1.conf
  2. 修改Broker配置
brokerClusterName = RaftCluster
brokerName=RaftNode00
listenPort=30921
namesrvAddr=192.168.56.102:9876;192.168.56.103:9876;192.168.56.104:9876
storePathRootDir=/tmp/rmqstore/node01
storePathCommitLog=/tmp/rmqstore/node01/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
dLegerPeers=n0-192.168.56.102:40911;n1-192.168.56.103:40912;n2-192.168.56.104:40913
## must be unique
dLegerSelfId=n1
sendMessageThreadPoolNums=16
brokerIP1=192.168.56.103

服务器3配置-Slave

  1. vim conf/dledger/broker-n2.conf
  2. 修改Broker配置
brokerClusterName = RaftCluster
brokerName=RaftNode00
listenPort=30931
namesrvAddr=192.168.56.102:9876;192.168.56.103:9876;192.168.56.104:9876
storePathRootDir=/tmp/rmqstore/node02
storePathCommitLog=/tmp/rmqstore/node02/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
dLegerPeers=n0-192.168.56.102:40911;n1-192.168.56.103:40912;n2-192.168.56.104:40913
## must be unique
dLegerSelfId=n2
sendMessageThreadPoolNums=16
brokerIP1=192.168.56.104

启动集群

  1. 在服务器1 执行
nohup sh bin/mqnamesrv > nohubNameserv &
nohup sh bin/mqbroker  > nohubBroker -c conf/dledger/broker-n0.conf &
  1. 在服务器2 执行
nohup sh bin/mqnamesrv > nohubNameserv &
nohup sh bin/mqbroker  > nohubBroker -c conf/dledger/broker-n1.conf &
  1. 在服务器3 执行
nohup sh bin/mqnamesrv > nohubNameserv &
nohup sh bin/mqbroker  > nohubBroker -c conf/dledger/broker-n2.conf &

查看集群情况

sh bin/mqadmin clusterList -n 127.0.0.1:9876

[root@localhost rocketmq-4.7.1]# sh bin/mqadmin clusterList -n 127.0.0.1:9876
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
#Cluster Name     #Broker Name            #BID  #Addr                  #Version                #InTPS(LOAD)       #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
RaftCluster       RaftNode00              0     192.168.56.102:30911   V4_7_1                   0.00(0,0ms)         0.00(0,0ms)          0 442545.08 -1.0000
RaftCluster       RaftNode00              2     192.168.56.103:30921   V4_7_1                   0.00(0,0ms)         0.00(0,0ms)          0 442545.08 -1.0000
RaftCluster       RaftNode00              3     192.168.56.104:30931   V4_7_1                   0.00(0,0ms)         0.00(0,0ms)          0 442545.08 -1.0000

BID 为 0 的是Master

kill 主broker 并再次查看集群情况

sh bin/mqshutdown broker

sh bin/mqadmin clusterList -n 127.0.0.1:9876

[root@localhost rocketmq-4.7.1]# sh bin/mqadmin clusterList -n 127.0.0.1:9876
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
#Cluster Name     #Broker Name            #BID  #Addr                  #Version                #InTPS(LOAD)       #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
RaftCluster       RaftNode00              0     192.168.56.104:30931   V4_7_1                   0.00(0,0ms)         0.00(0,0ms)          0 442545.18 -1.0000
RaftCluster       RaftNode00              2     192.168.56.103:30921   V4_7_1                   0.00(0,0ms)         0.00(0,0ms)          0 442545.18 -1.0000

Master切换成功

备注

Broker 配置

参考文档:

参数名默认值说明
listenPort10911接受客户端连接的监听端口
namesrvAddrnullnameServer 地址
brokerIP1网卡的 InetAddress当前 broker 监听的 IP
brokerIP2跟 brokerIP1 一样存在主从 broker 时,如果在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步
brokerNamenullbroker 的名称
brokerClusterNameDefaultCluster本 broker 所属的 Cluser 名称
brokerId0broker id, 0 表示 master, 其他的正整数表示 slave
storePathCommitLog$HOME/store/commitlog/存储 commit log 的路径
storePathConsumerQueue$HOME/store/consumequeue/存储 consume queue 的路径
mappedFileSizeCommitLog1024 * 1024 * 1024(1G)commit log 的映射文件大小
deleteWhen04在每天的什么时间删除已经超过文件保留时间的 commit log
fileReservedTime72以小时计算的文件保留时间
brokerRoleASYNC_MASTERSYNC_MASTER/ASYNC_MASTER/SLAVE
flushDiskTypeASYNC_FLUSHSYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保证在收到确认生产者之前将消息刷盘。ASYNC_FLUSH 模式下的 broker 则利用刷盘一组消息的模式,可以取得更好的性能。
enableDLegerCommitLog是否启动 DLedgertrue
dLegerGroupDLedger Raft Group的名字,建议和 brokerName 保持一致RaftNode00
dLegerPeersDLedger Group 内各节点的端口信息,同一个 Group 内的各个节点配置必须要保证一致n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913
dLegerSelfId节点 id, 必须属于 dLegerPeers 中的一个;同 Group 内各个节点要唯一n0
sendMessageThreadPoolNums发送线程个数,建议配置成 Cpu 核数16

启动内存不够

修改 bin/runbroker.shbin/runserver.sh 中的

JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g

将参数调低 (可以改为别的值)

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"

报连接超时

查看防火墙服务状态 systemctl status firewalld

将防火墙关闭 systemctl stop firewalld

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值