likes
comments
collection
share

RocketMQ5.0 Broker主备自动切换模式消息不丢失部署方案

作者站长头像
站长
· 阅读数 42

RocketMQ5.0主备自动切换模式下消息的不丢失方案如何进行部署?下面就来看一下

1. 下载RocketMQ5.0

首先我们去官网将RocketMQ5.0的版本下载下来。

$ wget https://dlcdn.apache.org/rocketmq/5.0.0/rocketmq-all-5.0.0-bin-release.zip

RocketMQ5.0 Broker主备自动切换模式消息不丢失部署方案

下载完成后解压到本地:

$ unzip rocketmq-all-5.0.0-bin-release.zip

RocketMQ5.0 Broker主备自动切换模式消息不丢失部署方案

以上就完成准备工作。

2. 部署NameServer

这里消息不丢失方案采用的是基于DLedger Controller的主备自动切换模式。DLedger Controller的部署采用内嵌NameServer进行部署:

RocketMQ5.0 Broker主备自动切换模式消息不丢失部署方案

$ cd rocketmq-all-5.0.0-bin-release
$ nohup sh bin/mqnamesrv -c ./conf/controller/cluster-3n-namesrv-plugin/namesrv-n0.conf &
$ nohup sh bin/mqnamesrv -c ./conf/controller/cluster-3n-namesrv-plugin/namesrv-n1.conf &
$ nohup sh bin/mqnamesrv -c ./conf/controller/cluster-3n-namesrv-plugin/namesrv-n2.conf &

启动一个NameServer集群。

RocketMQ5.0 Broker主备自动切换模式消息不丢失部署方案

通过命令查看是否启动完成:

RocketMQ5.0 Broker主备自动切换模式消息不丢失部署方案

Tips: 可以在RocketMQ的namesrv.log日志文件中查看日志是否有启动完成

这里部署是将NameServer集群全部部署在一台机器上面,所以修改了Nameserver的启动时候的JVM内存,将内存设置为512M.默认是4G,如果是生产的不同的环境可以执行修改脚本。另外由于部署在同一台机器上面所以都是用接口的不同来区分。下面来看一下配置文件namesrv-n0.conf,另外两个大同小异:

#Namesrv config
listenPort = 9876
enableControllerInNamesrv = true  

#controller config
controllerDLegerGroup = group1
controllerDLegerPeers = n0-127.0.0.1:9878;n1-127.0.0.1:9868;n2-127.0.0.1:9858
controllerDLegerSelfId = n0

上面配置中主要分为两大部分:

  • 配置NameServer
  • 配置DLedger Controller

如果DLedger内嵌NameServer记得设置 enableControllerInNamesrv = true 默认为false。

3. 部署Broker

Broker的部署方式和RocketMQ4.x的部署方式没有区别,有区别的在于需要配置开启Controller模式以及配置DLedger Controller的一些信息。配置文件如下所示:

#Broker1
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = -1
brokerRole = SLAVE
deleteWhen = 04
fileReservedTime = 48
enableControllerMode = true
controllerAddr = 127.0.0.1:9878
namesrvAddr = 127.0.0.1:9876
allAckInSyncStateSet=true
listenPort=30911
storePathRootDir=/tmp/rmqstore/node00
storePathCommitLog=/tmp/rmqstore/node00/commitlog

#Broker2
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = -1
brokerRole = SLAVE
deleteWhen = 04
fileReservedTime = 48
enableControllerMode = true
controllerAddr = 127.0.0.1:9878
namesrvAddr = 127.0.0.1:9876
allAckInSyncStateSet=true
listenPort=30911
storePathRootDir=/tmp/rmqstore/node00
storePathCommitLog=/tmp/rmqstore/node00/commitlog

配置说明:

  • brokerRole为SLAVE还是MASTER在Controller模式下是不生效的,这里一般配置SLAVE,到底哪个Broker作为MASTER有DLedger Controller选主决定
  • enableControllerMode设置为true来开启Controller模式,默认是关闭的。
  • allAckInSyncStateSet为true是保证即使在主备切换模式下消息不丢失的重要配置

启动Broker服务:

### start broker
$ nohup sh bin/mqbroker --enable-proxy=false -c ./conf/controller/quick-start/broker-n0.conf &
$ nohup sh bin/mqbroker --enable-proxy=false -c ./conf/controller/quick-start/broker-n1.conf &

当这样部署完成后就完成了主备自动切换模式消息不丢失部署方案。

Tips: 这里没有使用proxy进行部署,直接部署的broker.

4. 总结

主备自动切换模式消息不丢失部署方案主要有几个关键点:

  • 部署DLedger Controller,无论是独立部署还是内嵌NameServer进行部署。这个组件一定需要部署
  • Broker需要开启Controller模式
  • Broker设置allAckInSyncStateSet=true,这个是非常重要的一个配置

我是蚂蚁背大象(GitHub:mxsm),文章对你有帮助点赞关注我,文章有不正确的地方请您斧正留言评论~谢谢!

转载自:https://juejin.cn/post/7158466516185268238
评论
请登录