Skip to content
章节导航

双主双从高性能 MQ 服务架构

主从架构

Broker 角色,Master 提供读写,Slave 只支持读
Consumer 不用配置,当 Master 不可用或者繁忙的时候,Consumer 会自动切换到 Slave 节点进行能读取

架构

4 台机器

  • 两个部署 Broker-Master 和 NameServer
  • 两个部署 Broker-Slave 和 NameServer

RocketMQ 搭建双主双从集群环境

虚拟机角色分配

4 台机器,2 台部署 NameServer,4 台都部署 Broker,双主双从,同步复制,异步刷盘

角色IP部署nameServer部署Broker
Master1192.168.200.55部署 nameServerBroker-a
Master2192.168.200.56-Broker-b
Slave1192.168.200.57部署 nameServerBroker-a-s
Slave2192.168.200.58-Broker-b-s

基础环境安装

需要安装 JDK、Maven、以及 RocketMQ 安装编译,这里省略,可以见 【Linux 环境安装 RocketMQ】文章
本次安装之后 bin 目录完整路径:

shell
cd /usr/local/rocketmq/rocketmq-all-5.3.3-source-release/distribution/target/rocketmq-5.3.3/rocketmq-5.3.3

配置文件修改

虚拟机上把内存修改小,生产服务器上是否修改根据服务器配置来定,4 个节点虚拟机上的 RocketMQ 文件都要修改

修改 runserver

shell
vim bin/runserver.sh
# 修改内存配置等信息
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

修改 runbroker

shell
vim bin/runbroker.sh

JAVA_OPT="${JAVA_OPT} -server -Xms528m -Xmx528m -Xmn256m"

主从配置

master1 节点配置

修改配置文件 conf/2m-2s-sync/broker-a.properties,双主双从文件夹下的 broker-a.properties
2m-2s-sync:2m-2s:2master - 2slave,双主双从, sync:同步

shell
### 打开文件
vim conf/2m-2s-sync/broker-a.properties

配置信息如下

shell
### 重点两个配置,地址和集群名称
namesrvAddr=192.168.200.55:9876;192.168.200.57:9876
brokerClusterName=FlyUniCluster
defaultTopicQueueNums=4

### 下面信息是自带的,可以不用修改
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
# 同步复制
brokerRole=SYNC_MASTER
# 异步刷盘
flushDiskType=ASYNC_FLUSH

#是否允许自动创建Topic,建议线下开启,线上关闭
# autoCreateTopicEnable=true
#是否允许自动创建订阅组,建议线下开启,线上关闭 
# autoCreateSubscriptionGroup=false

#存储路径,根据需求进行配置绝对路径,默认是家目录下面
#storePathRootDir=  
#storePathCommitLog

slave1 节点配置

修改配置文件 conf/2m-2s-sync/broker-a-s.properties,双主双从文件夹下的 broker-a-s.properties

shell
# 打开文件
vim conf/2m-2s-sync/broker-a-s.properties

配置文件如下:

shell
### 重点配置
namesrvAddr=192.168.200.55:9876;192.168.200.57:9876
brokerClusterName=FlyUniCluster
defaultTopicQueueNums=4

### 下面系统默认配置
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
 
#是否允许自动创建Topic,建议线下开启,线上关闭 
# autoCreateTopicEnable=true
#是否允许自动创建订阅组,建议线下开启,线上关闭 
# autoCreateSubscriptionGroup=false

#存储路径,根据需求进行配置绝对路径,默认是家目录下面
# storePathRootDir=  
# storePathCommitLog

master2 节点配置

修改配置文件 conf/2m-2s-sync/broker-b.properties,双主双从文件夹下的 broker-b.properties

shell
### 打开文件
vim conf/2m-2s-sync/broker-b.properties

配置信息如下

shell
### 重点两个配置,地址和集群名称,这里配置第一对主从地址
namesrvAddr=192.168.200.55:9876;192.168.200.57:9876
brokerClusterName=FlyUniCluster
defaultTopicQueueNums=4

### 下面信息是自带的,可以不用修改
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
# 同步复制
brokerRole=SYNC_MASTER
# 异步刷盘
flushDiskType=ASYNC_FLUSH

#是否允许自动创建Topic,建议线下开启,线上关闭
# autoCreateTopicEnable=true
#是否允许自动创建订阅组,建议线下开启,线上关闭 
# autoCreateSubscriptionGroup=false

#存储路径,根据需求进行配置绝对路径,默认是家目录下面
#storePathRootDir=  
#storePathCommitLog

slave2 节点配置

修改配置文件 conf/2m-2s-sync/broker-b-s.properties,双主双从文件夹下的 broker-b-s.properties

shell
# 打开文件
vim conf/2m-2s-sync/broker-b-s.properties

配置文件如下:

shell
### 重点配置 这里配置第一对主从地址
namesrvAddr=192.168.200.55:9876;192.168.200.57:9876
brokerClusterName=FlyUniCluster
defaultTopicQueueNums=4

### 下面系统默认配置
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
 
#是否允许自动创建Topic,建议线下开启,线上关闭 
# autoCreateTopicEnable=true
#是否允许自动创建订阅组,建议线下开启,线上关闭 
# autoCreateSubscriptionGroup=false

#存储路径,根据需求进行配置绝对路径,默认是家目录下面
# storePathRootDir=  
# storePathCommitLog

启动

shell
cd /usr/local/rocketmq/rocketmq-all-5.3.3-source-release/distribution/target/rocketmq-5.3.3/rocketmq-5.3.3

启动 nameserver

启动两个机器的 master1slave1 上的 nameserver

shell
nohup sh bin/mqnamesrv &
 
 ### 查看启动日志
 tail -f nohup.out
 
 ### 查看是否启动成功 
 jps

启动 broker

shell
# master1
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a.properties &
# slave1
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a-s.properties &

# master2 
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b.properties &
# slave2
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b-s.properties &