实战部署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 |
|---|
| # 检查集群状态
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
|