跳转至

实战部署Dledger集群

基于 DLedger 的可以自动容灾切换的 RocketMQ 集群

下载地址:https://rocketmq.apache.org/zh/download

RocketMQ-on-DLedger Group 是指一组相同名称的 Broker,至少需要 3 个节点,通过 Raft 自动选举出一个 Leader,其余节点 作为 Follower,并在 Leader 和 Follower 之间复制数据以保证高可用。 RocketMQ-on-DLedger Group 能自动容灾切换,并保证数据一致。 RocketMQ-on-DLedger Group 是可以水平扩展的,也即可以部署任意多个 RocketMQ-on-DLedger Group 同时对外提供服务。

需要RocketMQ 4.5以后支持

实战架构 172.16.1.137 172.16.1.138 172.16.1.139

Bash
# 架构图如下
+------------------------------------------------------------------+
|                      RocketMQ DLedger Cluster                    |
|                                                                  |
|  +----------------+    +----------------+    +----------------+  |
|  |   Node 0       |    |   Node 1       |    |   Node 2       |  |
|  | 172.16.1.137   |<-->| 172.16.1.138   |<-->| 172.16.1.139   |  |
|  |                |    |                |    |                |  |
|  | - NameServer   |    | - NameServer   |    | - NameServer   |  |
|  | - Broker       |    | - Broker       |    | - Broker       |  |
|  |   (DLedger)    |    |   (DLedger)    |    |   (DLedger)    |  |
|  +----------------+    +----------------+    +----------------+  |
|                                                                  |
+------------------------------------------------------------------+

三台主机提前准备

Bash
# 准备好JDK环境(这里通过解压java 包)
root@pts/0 # tar -zxvf /share/soft/java-1.8.0_111.tar.gz -C /opt
root@pts/0 # cd /opt/java/ && bash setENV.sh 

root@pts/0 # java -version
java version "1.8.0_431"
Java(TM) SE Runtime Environment (build 1.8.0_431-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.431-b10, mixed mode)

# 准备好二进制包,解压后进入目录
# 解压
root@pts/0 # unzip /share/soft/rocketmq/rocketmq-all-4.9.4-bin-release.zip -d /opt/
root@pts/0 # cd /opt/rocketmq-all-4.9.4-bin-release
root@pts/0 # pwd
/opt/rocketmq-all-4.9.4-bin-release
# 创建存储目录
mkdir -p {store,logs}

NameServer 配置(三台机器都启动)

Bash
# 在两台机器上都执行

# 修改 JVM 参数(根据机器配置调整)
vim bin/runserver.sh
# 手动设置 JAVA_HOME - 添加这行
export JAVA_HOME=/opt/java
# 将默认的JVM参数修改为适合你机器的配置,例如:
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

# 启动nameserver服务
nohup sh bin/mqnamesrv &
# 停服命令
bash /opt/rocketmq-all-4.9.4-bin-release/bin/mqshutdown namesrv

# 启动会有如下GC的警告(表示一些即将弃用参数警官,优化可以自行搜索)
# cat nohup.out 
Java HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
The Name Server boot success. serializeType=JSON

Broker DLedger 集群配置

Node 0 (172.16.1.137) 配置

Bash
# 将原配置备份
cp -rf conf/dledger/broker-n0.conf conf/dledger/broker-n0.conf-bak

vim conf/dledger/broker-n0.conf 

# 基础配置
brokerClusterName=RocketMQ-Cluster
brokerName=BrokerGroup-01
brokerId=0

# DLedger 配置 - 启用自动主从切换
enableDLegerCommitLog=true
dLegerGroup=BrokerGroup-01
dLegerPeers=n0-172.16.1.137:40911;n1-172.16.1.138:40911;n2-172.16.1.139:40911
# 不同主机不同配置 must be unique
dLegerSelfId=n0
# 发送线程个数,建议配置成 Cpu 核数
sendMessageThreadPoolNums=2

# 存储路径
storePathRootDir=/opt/rocketmq-all-4.9.4-bin-release/store/node00
storePathCommitLog=/opt/rocketmq-all-4.9.4-bin-release/store/node00/commitlog
storePathConsumeQueue=/opt/rocketmq-all-4.9.4-bin-release/store/node00/consumequeue
storePathIndex=/opt/rocketmq-all-4.9.4-bin-release/store/node00/index

# NameServer 地址
namesrvAddr=172.16.1.137:9876;172.16.1.138:9876;172.16.1.139:9876

# 网络监听
# 客户端连接端口(生产者/消费者)
listenPort=30911

# 刷盘策略 (性能和可靠性平衡)
flushDiskType=ASYNC_FLUSH
# 消息在硬盘保留时间,默认72小时
fileReservedTime=48
# 消息清理的执行时间,格式:24小时制,04表示凌晨4点
deleteWhen=04

# 生产环境安全设置
# 关闭自动创建Topic
autoCreateTopicEnable=false
# 关闭自动创建Topic
autoCreateSubscriptionGroup=false

Node 1 (172.16.1.138) 配置

Bash
# 将原配置备份
cp -rf conf/dledger/broker-n1.conf conf/dledger/broker-n1.conf-bak

vim conf/dledger/broker-n1.conf 

# 基础配置
brokerClusterName=RocketMQ-Cluster
brokerName=BrokerGroup-01
brokerId=1

# DLedger 配置 - 启用自动主从切换
enableDLegerCommitLog=true
dLegerGroup=BrokerGroup-01
dLegerPeers=n0-172.16.1.137:40911;n1-172.16.1.138:40911;n2-172.16.1.139:40911
# 不同主机不同配置 must be unique
dLegerSelfId=n1
# 发送线程个数,建议配置成 Cpu 核数
sendMessageThreadPoolNums=2

# 存储路径
storePathRootDir=/opt/rocketmq-all-4.9.4-bin-release/store/node01
storePathCommitLog=/opt/rocketmq-all-4.9.4-bin-release/store/node01/commitlog
storePathConsumeQueue=/opt/rocketmq-all-4.9.4-bin-release/store/node01/consumequeue
storePathIndex=/opt/rocketmq-all-4.9.4-bin-release/store/node01/index

# NameServer 地址
namesrvAddr=172.16.1.137:9876;172.16.1.138:9876;172.16.1.139:9876

# 网络监听
# 客户端连接端口(生产者/消费者)
listenPort=30911

# 刷盘策略 (性能和可靠性平衡)
flushDiskType=ASYNC_FLUSH
# 消息在硬盘保留时间,默认72小时
fileReservedTime=48
# 消息清理的执行时间,格式:24小时制,04表示凌晨4点
deleteWhen=04

# 生产环境安全设置
# 关闭自动创建Topic
autoCreateTopicEnable=false
# 关闭自动创建Topic
autoCreateSubscriptionGroup=false

Node 2 (172.16.1.139) 配置

Bash
# 将原配置备份
cp -rf conf/dledger/broker-n2.conf conf/dledger/broker-n2.conf-bak

vim conf/dledger/broker-n2.conf 

# 基础配置
brokerClusterName=RocketMQ-Cluster
brokerName=BrokerGroup-01
brokerId=2

# DLedger 配置 - 启用自动主从切换
enableDLegerCommitLog=true
dLegerGroup=BrokerGroup-01
dLegerPeers=n0-172.16.1.137:40911;n1-172.16.1.138:40911;n2-172.16.1.139:40911
# 不同主机不同配置 must be unique
dLegerSelfId=n2
# 发送线程个数,建议配置成 Cpu 核数
sendMessageThreadPoolNums=2

# 存储路径
storePathRootDir=/opt/rocketmq-all-4.9.4-bin-release/store/node02
storePathCommitLog=/opt/rocketmq-all-4.9.4-bin-release/store/node02/commitlog
storePathConsumeQueue=/opt/rocketmq-all-4.9.4-bin-release/store/node02/consumequeue
storePathIndex=/opt/rocketmq-all-4.9.4-bin-release/store/node02/index

# NameServer 地址
namesrvAddr=172.16.1.137:9876;172.16.1.138:9876;172.16.1.139:9876

# 网络监听
# 客户端连接端口(生产者/消费者)
listenPort=30911

# 刷盘策略 (性能和可靠性平衡)
flushDiskType=ASYNC_FLUSH
# 消息在硬盘保留时间,默认72小时
fileReservedTime=48
# 消息清理的执行时间,格式:24小时制,04表示凌晨4点
deleteWhen=04

# 生产环境安全设置
# 关闭自动创建Topic
autoCreateTopicEnable=false
# 关闭自动创建Topic
autoCreateSubscriptionGroup=false

启动 Broker 集群

Bash
# 两台主机修改jvm参数

# 修改 JVM 参数(根据机器配置调整)
vim bin/runbroker.sh
# 手动设置 JAVA_HOME - 添加这行
export JAVA_HOME=/opt/java
# 将默认的JVM参数修改为适合你机器的配置,例如:
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g"

# 在 172.16.1.137 启动
nohup sh bin/mqbroker -c conf/dledger/broker-n0.conf  &

# 在 172.16.1.138 启动
nohup sh bin/mqbroker -c conf/dledger/broker-n1.conf  &

# 在 172.16.1.139 启动
nohup sh bin/mqbroker -c conf/dledger/broker-n2.conf  &

# 停服命令
bash /opt/rocketmq-all-4.9.4-bin-release/bin/mqshutdown broker

验证集群状态

Bash
1
2
3
4
5
6
7
8
# 检查集群状态
sh bin/mqadmin clusterList -n "172.16.1.137:9876;172.16.1.138:9876;172.16.1.139:9876"

# 检查 Broker 状态
sh bin/mqadmin brokerStatus -n "172.16.1.137:9876;172.16.1.138:9876;172.16.1.139:9876" -b 172.16.1.137:30911

# 创建测试 Topic
sh bin/mqadmin updateTopic -n "172.16.1.137:9876;172.16.1.138:9876;172.16.1.139:9876" -c RocketMQ-Cluster -t TopicTest