RocketMQ系列(二)双主双从集群搭建


上一篇 RocketMQ系列(一)下载安装介绍了单master模式,本文介绍双主双从的集群模式搭建。

一.配置文件

1.1 配置文件说明

安装包我们放在/data/applications/rocketmq目录下,
下载的安装包的 conf目录中,/data/applications/rocketmq/rocketmq-all-4.4.0-bin-release/conf ,内容如下:
在这里插入图片描述
其中:

  • 2m-2s-async :双主双从-异步模式的 配置文件样例
  • 2m-2s-sync :双主双从 -同步模式 配置文件样例
  • 2m-noslave:双主,没有从节点模式的 配置文件样例

本文我们搭建2m-2s-sync,所以基于此目录中的文件进行编辑:
在这里插入图片描述
其中:

  • broker-a.properties :主节点a;
  • broker-a-s.properties :从节点a;
  • broker-b.properties :主节点b
  • broker-b-s.properties:从节点b;

broker服务启动时,在启动命令中指定相应的配置文件即可。

1.2 服务环境准备

理论上总共4个broker,需要4台机器,再加上nameserver,可能至少5台;本文通过使用2台虚拟机配置不同端口模拟,因此,不同broker分布如下:
机器A(192.168.17.101)部署:broker-a、broker-b-s、namserver-1 ;
机器B(192.168.17.102)部署:broker-b、broker-a-s、namserver-2 ;

同一个broker的主从,尽量不要放在同一台服务上,免得当此服务宕机时,主从同时挂掉。

创建一些目录,用于修改默认配置路径:

mkdir /data/logs/rocketmqlogs
mkdir /data/applications/rocketmq/rootdir-m
mkdir /data/applications/rocketmq/rootdir-m/commitlog
mkdir /data/applications/rocketmq/rootdir-m/consumequeue
mkdir /data/applications/rocketmq/rootdir-m/index
mkdir /data/applications/rocketmq/rootdir-m/checkpoint
mkdir /data/applications/rocketmq/rootdir-m/abort
mkdir /data/applications/rocketmq/rootdir-s
mkdir /data/applications/rocketmq/rootdir-s/commitlog
mkdir /data/applications/rocketmq/rootdir-s/consumequeue
mkdir /data/applications/rocketmq/rootdir-s/index
mkdir /data/applications/rocketmq/rootdir-s/checkpoint
mkdir /data/applications/rocketmq/rootdir-s/abort

其他准备:
防火墙开启相应端口,这里我们直接关闭防火墙;

1.3 配置文件修改

下面是4个broker配置文件的内容,注意的是,同一台机器上的两个broker监听端口号是不一样的:

master1:

#所属集群名字,同一个集群名字必须一致
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样,同一个主从,名字一致
brokerName=broker-a
#0 表示 Master,>0 (大于0) 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.17.101:9876;192.168.17.102:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/data/applications/rocketmq/rootdir-m
#commitLog 存储路径
storePathCommitLog=/data/applications/rocketmq/rootdir-m/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/data/applications/rocketmq/rootdir-m/consumequeue
#消息索引存储路径
storePathIndex=/data/applications/rocketmq/rootdir-m/index
#checkpoint 文件存储路径
storeCheckpoint=/data/applications/rocketmq/rootdir-m/checkpoint
#abort 文件存储路径
abortFile=/data/applications/rocketmq/rootdir-m/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

slave2:

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=192.168.17.101:9876;192.168.17.102:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/data/applications/rocketmq/rootdir-s
#commitLog 存储路径
storePathCommitLog=/data/applications/rocketmq/rootdir-s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/data/applications/rocketmq/rootdir-s/consumequeue
#消息索引存储路径
storePathIndex=/data/applications/rocketmq/rootdir-s/index
#checkpoint 文件存储路径
storeCheckpoint=/data/applications/rocketmq/rootdir-s/checkpoint
#abort 文件存储路径
abortFile=/data/applications/rocketmq/rootdir-s/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

master2:

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.169.17.101:9876;192.168.17.102:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/data/applications/rocketmq/rootdir-m
#commitLog 存储路径
storePathCommitLog=/data/applications/rocketmq/rootdir-m/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/data/applications/rocketmq/rootdir-m/consumequeue
#消息索引存储路径
storePathIndex=/data/applications/rocketmq/rootdir-m/index
#checkpoint 文件存储路径
storeCheckpoint=/data/applications/rocketmq/rootdir-m/checkpoint
#abort 文件存储路径
abortFile=/data/applications/rocketmq/rootdir-m/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

slave1:

brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=192.168.17.101:9876;192.168.17.102:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/data/applications/rocketmq/rootdir-s
#commitLog 存储路径
storePathCommitLog=/data/applications/rocketmq/rootdir-s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/data/applications/rocketmq/rootdir-s/consumequeue
#消息索引存储路径
storePathIndex=/data/applications/rocketmq/rootdir-s/index
#checkpoint 文件存储路径
storeCheckpoint=/data/applications/rocketmq/rootdir-s/checkpoint
#abort 文件存储路径
abortFile=/data/applications/rocketmq/rootdir-s/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

注意事项:

  1. 同一台服务器上的不同broker的storePathRootDir属性必须不同,否则会出现Lock报错;
    #存储路径
    storePathRootDir=/data/applications/rocketmq/rootdir-s
  2. 同一个主从的brokerName是一样的,不同主从是不一样的;
  3. 如果broker启动失败,很可能是配置文件某些属性错误,可以先使用安装包默认配置文件中的属性启动,然后在增加配置项,逐一排查;

二.集群启动

启动前注意检查:
jvm堆内存配置,要进行修改,上一篇文章中已经修改过。

2.1 启动nameserver集群

分别在192.168.17.101和192.168.17.102两台机器上启动即可:

cd /data/applications/rocketmq/rocketmq-all-4.4.0-bin-release/bin
nohup sh mqnamesrv > /data/logs/rocketmqlogs/mqnamesrv.log 2>&1 & 

执行后分别查看进程:
在这里插入图片描述

2.2 启动borker集群

1.在192.168.17.101启动master1和slave2:

master1:

cd /data/applications/rocketmq/rocketmq-all-4.4.0-bin-release/bin
nohup sh mqbroker -c /data/applications/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-a.properties > /data/logs/rocketmqlogs/broker-a.log 2>&1 & 

slave2:

cd /data/applications/rocketmq/rocketmq-all-4.4.0-bin-release/bin
nohup sh mqbroker -c /data/applications/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-b-s.properties > /data/logs/rocketmqlogs/broker-b-s.log 2>&1 & 

2.在192.168.17.102 启动master2 和 slave1:

master2:

cd /data/applications/rocketmq/rocketmq-all-4.4.0-bin-release/bin
nohup sh mqbroker -c /data/applications/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-b.properties > /data/logs/rocketmqlogs/broker-b.log 2>&1 & 

slave1:

cd /data/applications/rocketmq/rocketmq-all-4.4.0-bin-release/bin
nohup sh mqbroker -c /data/applications/rocketmq/rocketmq-all-4.4.0-bin-release/conf/2m-2s-sync/broker-a-s.properties > /data/logs/rocketmqlogs/broker-a-s.log 2>&1 & 

执行后分别查看进程,发现有一个namesrv和两个broker就对了:
在这里插入图片描述

停止broker:

cd /data/applications/rocketmq/rocketmq-all-4.4.0-bin-release/bin
sh mqshutdown broker

三.rocketmq-console控制台

集群启动之后,虽然可以使用mqadmin命令查看集群状态,但是不够直观,而rocketmq-console控制台提供了界面,下面我们搭建一个看看。

3.1 下载rocketmq-externals

rocketmq-console在github的扩展项目中:https://github.com/apache/rocketmq-externals
在这里插入图片描述

下载后,是个springboot项目,这里需要配置namesrv集群地址:
在这里插入图片描述
然后,编译并打出jar包:

mvn clean package -Dmaven.test.skip=true

在这里插入图片描述

3.2 启动rocketmq-console

将打包好的jar文件,上传至linux服务器,然后启动:

cd /data/applications/rocketmq-console
nohup java -jar rocketmq-console-ng-2.0.0.jar &

启动成功:
在这里插入图片描述

3.3 访问rocketmq-console

默认使用8080端口,然后我们使用的服务器地址是192.168.17.101
访问192.168.17.101:8080,显示如下:
在这里插入图片描述

由于我们还没发送过消息,所以图标是空的。

切换到集群菜单,有我们启动的4个broker信息,
在这里插入图片描述
本文就到这里,后续我们会结合springboot进行消息生产和消费,到时候在观察此控制台。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值