双主双从高性能 MQ 服务架构
主从架构
Broker 角色,Master 提供读写,Slave 只支持读
Consumer 不用配置,当 Master 不可用或者繁忙的时候,Consumer 会自动切换到 Slave 节点进行能读取
架构
4 台机器
- 两个部署 Broker-Master 和 NameServer
- 两个部署 Broker-Slave 和 NameServer
RocketMQ 搭建双主双从集群环境
虚拟机角色分配
4 台机器,2 台部署 NameServer,4 台都部署 Broker,双主双从,同步复制,异步刷盘
| 角色 | IP | 部署nameServer | 部署Broker |
|---|---|---|---|
| Master1 | 192.168.200.55 | 部署 nameServer | Broker-a |
| Master2 | 192.168.200.56 | - | Broker-b |
| Slave1 | 192.168.200.57 | 部署 nameServer | Broker-a-s |
| Slave2 | 192.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=
#storePathCommitLogslave1 节点配置
修改配置文件 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=
# storePathCommitLogmaster2 节点配置
修改配置文件 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=
#storePathCommitLogslave2 节点配置
修改配置文件 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
启动两个机器的 master1 和 slave1 上的 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 &
剑鸣秋朔