RocketMQ5.0主备自动切换模式下消息的不丢失方案如何进行部署?下面就来看一下
1. 下载RocketMQ5.0
首先我们去官网将RocketMQ5.0的版本下载下来。
$ wget https://dlcdn.apache.org/rocketmq/5.0.0/rocketmq-all-5.0.0-bin-release.zip
复制代码
下载完成后解压到本地:
$ unzip rocketmq-all-5.0.0-bin-release.zip
复制代码
以上就完成准备工作。
2. 部署NameServer
这里消息不丢失方案采用的是基于DLedger Controller的主备自动切换模式。DLedger Controller的部署采用内嵌NameServer进行部署:
$ 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集群。
通过命令查看是否启动完成:
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,这个是非常重要的一个配置