【 RocketMQ 5.X 三主三从集群部署指南(保姆级操作教程)】

RocketMQ 5.X 三主三从集群部署指南(保姆级操作教程)

社区有很多关于讲解和部署Rockermq的学习文档,但是感觉总是参差不齐,在实际部署过程中会遇到很多意想不到的坑。这对于初识Rockermq的小白来说并不友好,这是其一;
其二目前Rockermq官方已更新到5.x版本,好多关于部署的文章内容版本都相对较旧,操作命令也与新版本有所却别;
其三,很难找到关于部署3M-3S的集群部署模式操作文档,我在初学时也遇到了此情况,于是为了便于小白更好了解部署Rockermq,按照此操作文档可完成部署基于Rockermq5.3.0部署3M-3S集群
此文章仅作为集群部署操作文档,Rockermq相关知识在此不做介绍。

1. 集群规划

1. 服务器规划

服务器角色架构模式
10.0.0.144NameServer、brokerbroker-a-master、broker-c-slave
10.0.0.145NameServer、brokerbroker-b-master、broker-a-slave
10.0.0.146NameServer、brokerbroker-c-master、broker-b-slave

架构图

在这里插入图片描述

组件规划:

  • NameServer:每台服务器运行一个 NameServer 实例。
  • Broker Master:每台服务器运行一个 Master Broker。
  • Broker Slave:每台服务器运行一个 Slave Broker,作为另一台服务器上的 Master Broker 的从节点。

2. 环境准备

操作系统:CentOS7.9

2.1 更新系统并安装必要依赖

在所有三台服务器上执行以下命令:

    安装java环境
    [root@node1 ~]# yum install java-1.8.0-openjdk-devel -y
    [root@node2 ~]# yum install java-1.8.0-openjdk-devel -y
    [root@node3 ~]# yum install java-1.8.0-openjdk-devel -y


    [root@node1 ~]# java -version
    openjdk version "1.8.0_412"
    OpenJDK Runtime Environment (build 1.8.0_412-b08)
    OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode)

    #设置环境变量
    echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk' >> /etc/profile
    echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile
    source /etc/profile

2.2 配置防火墙

确保以下端口开放:

  • NameServer:9876
  • Broker Master/Slave:10911, 10912, 10909,10910,10922,10919,1021
sudo firewall-cmd --zone=public --add-port=9876/tcp --permanent
sudo firewall-cmd --zone=public --add-port=10911-10912/tcp --permanent
sudo firewall-cmd --zone=public --add-port=10909/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --zone=public --add-port=109119-10922/tcp --permanent

3. RocketMQ 安装与配置

3.1 下载与解压 RocketMQ 5.3.0

下载地址:https://dist.apache.org/repos/dist/release/rocketmq/5.3.0/rocketmq-all-5.3.0-bin-release.zip

在所有三台服务器上执行:

#下载安装包
[root@node1 ~]# wget https://dist.apache.org/repos/dist/release/rocketmq/5.3.0/rocketmq-all-5.3.0-bin-release.zip

#将安装包拷贝到另外两台服务器上
[root@node1 ~]# scp rocketmq-all-5.3.0-bin-release.zip 10.0.0.145:
[root@node1 ~]# scp rocketmq-all-5.3.0-bin-release.zip 10.0.0.146:

#解压缩安装包
[root@node1 ~]# unzip rocketmq-all-5.3.0-bin-release.zip -d /opt/
[root@node2 ~]# unzip rocketmq-all-5.3.0-bin-release.zip -d /opt/
[root@node3 ~]# unzip rocketmq-all-5.3.0-bin-release.zip -d /opt/

#改名
[root@node1 opt]# mv rocketmq-all-5.3.0-bin-release/ rocketmq

4. NameServer 部署

在每台服务器上,执行以下命令启动 NameServer:

nohup sh $ROCKETMQ_HOME/bin/mqnamesrv &

#每台服务器分别创建日志文件夹
[root@node1 conf]# mkdir -p /opt/rocketmq/logs

#启动NameServer服务
[root@node1 conf]# nohup /opt/rocketmq/bin/mqnamesrv > /opt/rocketmq/logs/nameserver.log 2>&1 &

确保 NameServer 已成功启动:

tail -f $ROCKETMQ_HOME/logs/rocketmqlogs/namesrv.log

5. Broker 配置与部署

5.1 配置文件准备

在每台服务器上创建并编辑 Broker 配置文件。

node1配置

#Slave1服务器配置信息
[root@node1 ]# cat /opt/rocketmq/conf/broker-a.properties 
brokerClusterName=RocketMQCluster
brokerName=broker-a
brokerId=0
namesrvAddr=10.0.0.144:9876;10.0.0.145:9876;10.0.0.146:9876
listenPort=10910
#Broker角色,异步Master(ASYNC_MASTER)/同步Master(SYNC_MASTER)/SLAVE
brokerRole=ASYNC_MASTER
storePathRootDir=/opt/rocketmq/a-m-store
storePathCommitLog=/opt/rocketmq/a-m-store/commitlog
brokerIP1=10.0.0.144
#Consumer queue存储路径
storePathConsumerQueue=/opt/rocketmq/store/a-m-store/consumequeue
#Commit Log文件最大大小,默认1024 * 1024 * 1024(1G)
mapedFileSizeCommitLog=1073741824
#何时删除过期的Commit Log,默认凌晨4点
deleteWhen=04
#Commit Log生存时间,单位小时,默认72小时,即3天
fileReservedTime=72
#数据刷新到磁盘方式,同步(SYNC_FLUSH)/异步(ASYNC_FLUSH),默认异步方式
#同步刷新:在响应客户端之前就会把Message刷新到磁盘
flushDiskType=ASYNC_FLUSH


[root@node1 ]# cat /opt/rocketmq/conf/broker-c-s.properties 
brokerClusterName=RocketMQCluster
brokerName=broker-c-s
brokerId=1
namesrvAddr=10.0.0.144:9876;10.0.0.145:9876;10.0.0.146:9876
listenPort=10921
brokerRole=SLAVE
storePathRootDir=/opt/rocketmq/c-s-store/slave
storePathCommitLog=/opt/rocketmq/c-s-store/slave/commitlog
brokerIP1=10.0.0.144
#Consumer queue存储路径
storePathConsumerQueue=/opt/rocketmq/store/c-s-store/consumequeue
#Commit Log文件最大大小,默认1024 * 1024 * 1024(1G)
mapedFileSizeCommitLog=1073741824
#何时删除过期的Commit Log,默认凌晨4点
deleteWhen=04
#Commit Log生存时间,单位小时,默认72小时,即3天
fileReservedTime=72
#数据刷新到磁盘方式,同步(SYNC_FLUSH)/异步(ASYNC_FLUSH),默认异步方式
#同步刷新:在响应客户端之前就会把Message刷新到磁盘
flushDiskType=ASYNC_FLUSH

node2

#Slave2配置信息
[root@node2 ~]# cat /opt/rocketmq/conf/broker-b.properties 
brokerClusterName=RocketMQCluster
brokerName=broker-b
brokerId=0
namesrvAddr=10.0.0.144:9876;10.0.0.145:9876;10.0.0.146:9876
listenPort=10910
brokerIP1=10.0.0.145
brokerRole=ASYNC_MASTER
storePathRootDir=/opt/rocketmq/b-m-store
storePathCommitLog=/opt/rocketmq/b-m-store/commitlog
#Consumer queue存储路径
storePathConsumerQueue=/opt/rocketmq/store/b-m-store/consumequeue
#Commit Log文件最大大小,默认1024 * 1024 * 1024(1G)
mapedFileSizeCommitLog=1073741824
#何时删除过期的Commit Log,默认凌晨4点
deleteWhen=04
#Commit Log生存时间,单位小时,默认72小时,即3天
fileReservedTime=72
#数据刷新到磁盘方式,同步(SYNC_FLUSH)/异步(ASYNC_FLUSH),默认异步方式
#同步刷新:在响应客户端之前就会把Message刷新到磁盘
flushDiskType=ASYNC_FLUSH

[root@node2 ~]# cat /opt/rocketmq/conf/broker-a-s.properties 
brokerClusterName=RocketMQCluster
brokerName=broker-a-s
brokerId=2
namesrvAddr=10.0.0.144:9876;10.0.0.145:9876;10.0.0.146:9876
listenPort=10921
storePathRootDir=/opt/rocketmq/a-s-store/slave
storePathCommitLog=/opt/rocketmq/a-s-store/slave/commitlog
brokerRole=SLAVE
brokerIP1=10.0.0.145
#Consumer queue存储路径
storePathConsumerQueue=/opt/rocketmq/store/a-s-store/consumequeue
#Commit Log文件最大大小,默认1024 * 1024 * 1024(1G)
mapedFileSizeCommitLog=1073741824
#何时删除过期的Commit Log,默认凌晨4点
deleteWhen=04
#Commit Log生存时间,单位小时,默认72小时,即3天
fileReservedTime=72
#数据刷新到磁盘方式,同步(SYNC_FLUSH)/异步(ASYNC_FLUSH),默认异步方式
#同步刷新:在响应客户端之前就会把Message刷新到磁盘
flushDiskType=ASYNC_FLUSH

node3

#Slave3配置信息
[root@node3 ~]# cat /opt/rocketmq/conf/broker-c.properties 
brokerClusterName=RocketMQCluster
brokerName=broker-c
brokerId=0
namesrvAddr=10.0.0.144:9876;10.0.0.145:9876;10.0.0.146:9876
listenPort=10910
storePathRootDir=/opt/rocketmq/c-m-store
storePathCommitLog=/opt/rocketmq/c-m-store/commitlog
brokerRole=ASYNC_MASTER
brokerIP1=10.0.0.146
#Consumer queue存储路径
storePathConsumerQueue=/opt/rocketmq/store/c-m-store/consumequeue
#Commit Log文件最大大小,默认1024 * 1024 * 1024(1G)
mapedFileSizeCommitLog=1073741824
#何时删除过期的Commit Log,默认凌晨4点
deleteWhen=04
#Commit Log生存时间,单位小时,默认72小时,即3天
fileReservedTime=72
#数据刷新到磁盘方式,同步(SYNC_FLUSH)/异步(ASYNC_FLUSH),默认异步方式
#同步刷新:在响应客户端之前就会把Message刷新到磁盘
flushDiskType=ASYNC_FLUSH

#Slave
[root@node3 ~]# cat /opt/rocketmq/conf/broker-b-s.properties 
brokerClusterName=RocketMQCluster
brokerName=broker-b-s
brokerId=3
namesrvAddr=10.0.0.144:9876;10.0.0.145:9876;10.0.0.146:9876
listenPort=10921
storePathRootDir=/opt/rocketmq/b-s-store/slave
storePathCommitLog=/opt/rocketmq/b-s-store/slave/commitlog
brokerRole=SLAVE
brokerIP1=10.0.0.146
#Consumer queue存储路径
storePathConsumerQueue=/opt/rocketmq/store/b-s-store/consumequeue
#Commit Log文件最大大小,默认1024 * 1024 * 1024(1G)
mapedFileSizeCommitLog=1073741824
#何时删除过期的Commit Log,默认凌晨4点
deleteWhen=04
#Commit Log生存时间,单位小时,默认72小时,即3天
fileReservedTime=72
#数据刷新到磁盘方式,同步(SYNC_FLUSH)/异步(ASYNC_FLUSH),默认异步方式
#同步刷新:在响应客户端之前就会把Message刷新到磁盘
flushDiskType=ASYNC_FLUSH

5.2 启动 Broker

在每台服务器上执行以下命令启动 Master 和 Slave Broker:

#[NODE1]
[root@node1 ~]# nohup /opt/rocketmq/bin/mqbroker -c /opt/rocketmq/conf/broker-a.properties > /opt/rocketmq/logs/broker-a.properties.log 2>&1 &
[root@node1 ~]# nohup /opt/rocketmq/bin/mqbroker -c /opt/rocketmq/conf/broker-c-s.properties > /opt/rocketmq/logs/broker-c-s.properties.log 2>&1 &

#[NODE2]
[root@node2 ~]# nohup /opt/rocketmq/bin/mqbroker -c /opt/rocketmq/conf/broker-b.properties > /opt/rocketmq/logs/broker-b.properties.log 2>&1 &
[root@node2 ~]# nohup /opt/rocketmq/bin/mqbroker -c /opt/rocketmq/conf/broker-a-s.properties > /opt/rocketmq/logs/broker-a-s.properties.log 2>&1 &


#[NODE3]
[root@node3 ~]# nohup /opt/rocketmq/bin/mqbroker -c /opt/rocketmq/conf/broker-c.properties > /opt/rocketmq/logs/broker-c.properties.log 2>&1 &
[root@node3 ~]# nohup /opt/rocketmq/bin/mqbroker -c /opt/rocketmq/conf/broker-b-s.properties > /opt/rocketmq/logs/broker-b-s.properties.log 2>&1 &


#查看启动端口信息:
[root@node3 ~]# ss -ntl
State      Recv-Q Send-Q                                                                                 Local Address:Port                                                                                                Peer Address:Port              
LISTEN     0      128                                                                                                *:111                                                                                                            *:*                  
LISTEN     0      128                                                                                                *:22                                                                                                             *:*                  
LISTEN     0      100                                                                                        127.0.0.1:25                                                                                                             *:*                  
LISTEN     0      128                                                                                             [::]:10908                                                                                                       [::]:*                  
LISTEN     0      128                                                                                             [::]:10910                                                                                                       [::]:*                  
LISTEN     0      50                                                                                              [::]:10911                                                                                                       [::]:*                  
LISTEN     0      128                                                                                             [::]:10919                                                                                                       [::]:*                  
LISTEN     0      128                                                                                             [::]:10921                                                                                                       [::]:*                  
LISTEN     0      50                                                                                              [::]:10922                                                                                                       [::]:*                  
LISTEN     0      128                                                                                             [::]:111                                                                                                         [::]:*                  
LISTEN     0      128                                                                                             [::]:9876                                                                                                        [::]:*                  
LISTEN     0      128                                                                                             [::]:22                                                                                                          [::]:*                  
LISTEN     0      100                                                                                            [::1]:25                                                                                                          [::]:*              



检查 Broker 是否成功启动:

tail -f $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log

6. 验证部署

6.1 检查 NameServer

在任意一台服务器上执行:

[root@node1 ~]# bash /opt/rocketmq/bin/mqadmin clusterList -n 127.0.0.1:9876
#Cluster Name           #Broker Name            #BID  #Addr                  #Version              #InTPS(LOAD)     #OutTPS(LOAD)  #Timer(Progress)        #PCWait(ms)  #Hour         #SPACE    #ACTIVATED
RocketMQCluster         broker-a                0     10.0.0.144:10910       V5_3_0                 0.00(0,0ms)       0.00(0,0ms)  0-0(0.0w, 0.0, 0.0)               0  479118.43     0.0500          true
RocketMQCluster         broker-a-s              2     10.0.0.145:10921       V5_3_0                 0.00(0,0ms)       0.00(0,0ms)  260-0(0.0w, 0.0, 0.0)             0  479118.43     0.0500         false
RocketMQCluster         broker-b                0     10.0.0.145:10910       V5_3_0                 0.00(0,0ms)       0.00(0,0ms)  0-0(0.0w, 0.0, 0.0)               0  479118.43     0.0500          true
RocketMQCluster         broker-b-s              3     10.0.0.146:10921       V5_3_0                 0.00(0,0ms)       0.00(0,0ms)  290-0(0.0w, 0.0, 0.0)             0  479118.43     0.0500         false
RocketMQCluster         broker-c                0     10.0.0.146:10910       V5_3_0                 0.00(0,0ms)       0.00(0,0ms)  0-0(0.0w, 0.0, 0.0)               0  479118.43     0.0500          true
RocketMQCluster         broker-c-s              1     10.0.0.144:10921       V5_3_0                 0.00(0,0ms)       0.00(0,0ms)  302-0(0.0w, 0.0, 0.0)             0  479118.43     0.0500         false

7. 生产环境推荐配置

  • 数据持久化:配置日志与数据持久化路径,保证数据不会因系统重启丢失。
  • 监控与报警:部署监控工具(如 Prometheus、Grafana)实时监控 RocketMQ 集群的健康状态。
  • 定期备份:定期备份消息数据与配置文件,防止数据丢失。

8. 常见问题与排查

  • 端口冲突:检查服务器上是否有其他服务占用 RocketMQ 的端口。
  • 内存不足:调整 JVM 参数,确保 Broker 有足够的内存运行。
  • 网络问题:确保各服务器之间的网络畅通,防火墙规则正确配置。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值