RocketMQ DLedger 多副本即主从切换配置

0、快速配置

背景补充

我是基于现有测试环境下3主3从的异步复制的集群下进行配置的。

没有过多考虑配置变更后rocketmq消息数据的一致性问题。建议在安装部署时就按改方案进行。

配置过程

为了完成这次配置看了好多资料,但是并没有任何一篇技术文档提供“傻瓜式配置”和注意事项,所以为了弄清楚一些概念和验证一些配置的必要性上花了较长的时间,最后回过头来看就是那么几个步骤:

1、 关闭需要配置的broker的所有实例。

2、使用md5sum校验同一个broker name下的所有commitlog 的一致性,如果不一致就采用最新版本进行各节点同步(copy paste 到各节点)。

3、在broker 配置文件(每一个broker对应一个配置文件,每一个都要修改,原有的主从/集群配置可以完全不变)下加入如下内容(注意参数名字和值前后不要有空格,否则系统不认,我就是在这一细节上绕了好久):

#开启主从切换的关键参数

enableDLegerCommitLog=true

#官方建议使用与broker name一样的名字。

dLegerGroup=broker-a

#以下参数端口号不限,只要不被占用就可以了

dLegerPeers=n0-192.168.0.1:40911;n1-192.168.0.2:40912;n2-192.168.0.3:40913

#这个要求是唯一id,根据节点分配,要与dLegerPeers保持一致。

dLegerSelfId=n0

4、启动实例

5、查看集群状态,这是你会发现这个broker下的主节点不再是按你配置文件所设定顺序和角色来的。即是:你原来的设定10.87.132.66 的brokerid=0 brokerrole=ASNC_MASTER,但是配置了DLedger后,就是按选举结果来决定的。

6、测试:

  • 关闭brokerid=0的实例
  • 查看集群状态,立刻从现有实例选举一个新的主实例出来。并且发送这个broker上特有消息,成功发送。
  • 验证,配置成功

知识点补充

 DLedger 这个组件已经集成在rocketmq 4.5..2 上,不需要额外安装。

在$ROCKETMQ_HOME/bin下有一个dledger 目录,里面有一个脚本就是官方的示例。

执行脚本,./fast-try.sh start 就会在本机上创建一个nameserver, 1主两从的broker +dledger 机制下的主从切换。

配置文件存放在: $ROCKETMQ_HOME/dledger ,配置文件很简单,具体如下:

brokerClusterName = RaftCluster

brokerName=RaftNode00

listenPort=30911

namesrvAddr=127.0.0.1:9876

storePathRootDir=/tmp/rmqstore/node00

storePathCommitLog=/tmp/rmqstore/node00/commitlog

enableDLegerCommitLog=true

dLegerGroup=RaftNode00

dLegerPeers=n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913

## must be unique

dLegerSelfId=n0

sendMessageThreadPoolNums=16

从上面内容看出来,rocketmq的配置是很简单的,不需要考虑太多的依赖关系,我做了一个验证:

把原有的集群名字、端口号改变后在再启动是没有问题的。

所以我感觉rocketmq 的设计应该更倾向于无状态设计。

 

 

参考文章:

 https://github.com/apache/rocketmq/blob/rocketmq-all-4.7.0/docs/cn/dledger/deploy_guide.md

https://www.geek-share.com/detail/2788006760.html

你可能感兴趣的:(rocketmq)