📝 RocketMQ 双主双从集群 完整版总结(带注释 + 重启步骤 + 常用命令)

一、我们最终完成了什么?

  1. 搭建成功:RocketMQ 4.9.4 双主双从异步复制集群(2m-2s-async)
  2. 服务器节点
    • 10.XX.XX.5:broker-a (主)、broker-b (从)
    • 10.XX.XX.6:broker-b (主)、broker-a (从)
  3. 统一规范路径(所有配置 / 日志 / 存储集中管理)
    • 配置文件:/apps/rocketmq/conf/
    • 日志文件:/apps/rocketmq/logs/
    • 存储文件:/apps/rocketmq/store*
  4. 配置系统环境变量:全局调用 mqadmin/mqnamesrv/mqbroker 命令
  5. 修复所有问题:端口占用、JVM 内存、IP 错误、集群注册失败、分隔符冲突

二、核心固定配置(牢记)

properties

# 集群名称
brokerClusterName=rocketmq-cluster
# NameServer地址(配置文件/命令行 分号!!!)
namesrvAddr=10.XX.XX.5:9876;10.XX.XX.6:9876

三、环境变量配置(已永久生效)

文件:/etc/profile(最后一行)

# ###################### RocketMQ 环境变量 ######################
# RocketMQ安装根目录
export ROCKETMQ_HOME=/usr/local/rocketmq/rocketmq-all-4.9.4-bin-release
# 将RocketMQ的bin目录加入系统PATH,全局调用命令
export PATH=$PATH:$ROCKETMQ_HOME/bin

✅ 生效命令(修改后执行):source /etc/profile


四、🔥 服务器重启后 | 完整启动步骤(必看!)

通用前提:两台服务器都执行

# 1. 杀死所有残留的RocketMQ进程(防止端口占用)
sh mqshutdown namesrv
sh mqshutdown broker
# 强制清理(备用)
ps -ef | grep -E "mqnamesrv|mqbroker" | grep -v grep | awk '{print $2}' | xargs kill -9 2>/dev/null

# 2. 创建日志目录(防止启动失败)
mkdir -p /apps/rocketmq/logs/

步骤 1:在 10.XX.XX.5 执行

# 启动NameServer(加载自定义配置文件)
nohup sh mqnamesrv -c /apps/rocketmq/conf/namesrv.properties  >/apps/rocketmq/logs/mqnamesrv.log 2>&1 & tail -f /apps/rocketmq/logs/mqnamesrv.log

# 启动 broker-a 主节点
nohup sh mqbroker -c /apps/rocketmq/conf/broker-a.properties >/apps/rocketmq/logs/broker-a.log 2>&1 & tail -f /apps/rocketmq/logs/broker-a.log
# 启动 broker-b 从节点
nohup sh mqbroker -c /apps/rocketmq/conf/broker-b-s.properties >/apps/rocketmq/logs/broker-b-s.log 2>&1 & tail -f /apps/rocketmq/logs/broker-b-s.log

步骤 2:在 10.XX.XX.6 执行

# 启动NameServer(加载自定义配置文件)
nohup sh mqnamesrv -c /apps/rocketmq/conf/namesrv.properties  >/apps/rocketmq/logs/mqnamesrv.log 2>&1 & tail -f /apps/rocketmq/logs/mqnamesrv.log

# 启动 broker-b 主节点
nohup sh mqbroker -c /apps/rocketmq/conf/broker-b.properties >/apps/rocketmq/logs/broker-b.log 2>&1 & tail -f /apps/rocketmq/logs/broker-b.log
# 启动 broker-a 从节点
nohup sh mqbroker -c /apps/rocketmq/conf/broker-a-s.properties >/apps/rocketmq/logs/broker-a-s.log 2>&1 & tail -f /apps/rocketmq/logs/broker-a-s.log

五、✅ 集群验证命令(任意目录执行)

# 查看集群状态(最核心!显示4个节点=成功)
mqadmin clusterList -n 10.XX.XX.5:9876

六、常用运维命令(带注释)

# 1. 关闭NameServer
sh mqshutdown namesrv
# 2. 关闭Broker
sh mqshutdown broker
# 3. 查看NameServer日志
tail -f /apps/rocketmq/logs/mqnamesrv.log
# 4. 查看Broker日志
tail -f /apps/rocketmq/logs/broker-a.log
# 5. 检查端口监听(9876=NameServer,10911/11911=Broker)
netstat -lntp | grep -E '9876|10911|11911'
# 6. 检查RocketMQ进程
ps -ef | grep -E "mqnamesrv|mqbroker" | grep -v grep

七、关键注意事项(避坑)

  1. 启动顺序:必须先启动 NameServer,再启动 Broker
  2. 进程管理:重启前必须杀死旧进程,防止端口占用
  3. 配置统一:所有 Broker 的 brokerClusterName 必须完全一致
  4. 环境变量:修改 /etc/profile 后,必须执行 source /etc/profile 生效
  5. 日志路径:固定使用 /apps/rocketmq/logs/,方便排查问题

broker-a.properties

#所属集群名字

brokerClusterName=rocketmq-cluster

#broker名字,注意此处不同的配置文件填写的不一样

brokerName=broker-a

#0 表示 Master,>0 表示 Slave

brokerId=0

#nameServer地址,分号分割

namesrvAddr=10.XX.XX.5:9876;10.XX.XX.6:9876

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

defaultTopicQueueNums=4

#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭

autoCreateTopicEnable=true

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=true

#Broker 对外服务的监听端口

listenPort=10911

haListenPort=10912

#删除文件时间点,默认凌晨 4点

deleteWhen=18

#文件保留时间,默认 48 小时

fileReservedTime=48

#commitLog每个文件的大小默认1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/apps/rocketmq/store

#commitLog 存储路径

storePathCommitLog=/apps/rocketmq/store/commitlog

#消费队列存储路径存储路径

storePathConsumeQueue=/apps/rocketmq/store/consumequeue

#消息索引存储路径

storePathIndex=/apps/rocketmq/store/index

#checkpoint 文件存储路径

storeCheckpoint=/apps/rocketmq/store/checkpoint

#abort 文件存储路径

abortFile=/apps/rocketmq/store/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=ASYNC_FLUSH

#checkTransactionMessageEnable=false

#发消息线程池数量

sendMessageThreadPoolNums=128

#拉消息线程池数量

pullMessageThreadPoolNums=128

#打开锁

useReentrantLockWhenPutMessage=true

waitTimeMillsInSendQueue=3000

#强制指定本机IP,需要根据每台机器进行修改。官方介绍可为空,系统默认自动识别,但多网卡时IP地址可能读取错误

brokerIP1=10.XX.XX.5

broker-a-s.properties

#所属集群名字

brokerClusterName=rocketmq-cluster

#broker名字,注意此处不同的配置文件填写的不一样

brokerName=broker-a

#0 表示 Master,>0 表示 Slave

brokerId=1

#nameServer地址,分号分割

namesrvAddr=10.XX.XX.5:9876;10.XX.XX.6:9876

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

defaultTopicQueueNums=4

#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭

autoCreateTopicEnable=true

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=true

#Broker 对外服务的监听端口

listenPort=11911

haListenPort=11912

#删除文件时间点,默认凌晨 4点

deleteWhen=18

#文件保留时间,默认 48 小时

fileReservedTime=48

#commitLog每个文件的大小默认1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/apps/rocketmq/store-a-s

#commitLog 存储路径

storePathCommitLog=/apps/rocketmq/store-s/commitlog

#消费队列存储路径存储路径

storePathConsumeQueue=/apps/rocketmq/store-s/consumequeue

#消息索引存储路径

storePathIndex=/apps/rocketmq/store-s/index

#checkpoint 文件存储路径

storeCheckpoint=/apps/rocketmq/store-s/checkpoint

#abort 文件存储路径

abortFile=/apps/rocketmq/store-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

#打开锁

useReentrantLockWhenPutMessage=true

waitTimeMillsInSendQueue=3000

#强制指定本机IP,需要根据每台机器进行修改。官方介绍可为空,系统默认自动识别,但多网卡时IP地址可能读取错误

brokerIP1=10.XX.XX.6

broker-b.properties

#所属集群名字

brokerClusterName=rocketmq-cluster

#broker名字,注意此处不同的配置文件填写的不一样

brokerName=broker-b

#0 表示 Master,>0 表示 Slave

brokerId=0

#nameServer地址,分号分割

namesrvAddr=10.XX.XX.5:9876;10.XX.XX.6:9876

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

defaultTopicQueueNums=4

#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭

autoCreateTopicEnable=true

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=true

#Broker 对外服务的监听端口

listenPort=10911

haListenPort=10912

#删除文件时间点,默认凌晨 4点

deleteWhen=18

#文件保留时间,默认 48 小时

fileReservedTime=48

#commitLog每个文件的大小默认1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/apps/rocketmq/store-b

#commitLog 存储路径

storePathCommitLog=/apps/rocketmq/store/commitlog

#消费队列存储路径存储路径

storePathConsumeQueue=/apps/rocketmq/store/consumequeue

#消息索引存储路径

storePathIndex=/apps/rocketmq/store/index

#checkpoint 文件存储路径

storeCheckpoint=/apps/rocketmq/store/checkpoint

#abort 文件存储路径

abortFile=/apps/rocketmq/store/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=ASYNC_FLUSH

#checkTransactionMessageEnable=false

#发消息线程池数量

sendMessageThreadPoolNums=128

#拉消息线程池数量

pullMessageThreadPoolNums=128

#打开锁

useReentrantLockWhenPutMessage=true

waitTimeMillsInSendQueue=3000

#强制指定本机IP,需要根据每台机器进行修改。官方介绍可为空,系统默认自动识别,但多网卡时IP地址可能读取错误

brokerIP1=10.XX.XX.6

broker-b-s.properties

#所属集群名字

brokerClusterName=rocketmq-cluster

#broker名字,注意此处不同的配置文件填写的不一样

brokerName=broker-b

#0 表示 Master,>0 表示 Slave

brokerId=1

#nameServer地址,分号分割

namesrvAddr=10.XX.XX.5:9876;10.XX.XX.6:9876

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

defaultTopicQueueNums=4

#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭

autoCreateTopicEnable=true

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=true

#Broker 对外服务的监听端口

listenPort=11911

haListenPort=11912

#删除文件时间点,默认凌晨 4点

deleteWhen=18

#文件保留时间,默认 48 小时

fileReservedTime=48

#commitLog每个文件的大小默认1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/apps/rocketmq/store-b-s

#commitLog 存储路径

storePathCommitLog=/apps/rocketmq/store-s/commitlog

#消费队列存储路径存储路径

storePathConsumeQueue=/apps/rocketmq/store-s/consumequeue

#消息索引存储路径

storePathIndex=/apps/rocketmq/store-s/index

#checkpoint 文件存储路径

storeCheckpoint=/apps/rocketmq/store-s/checkpoint

#abort 文件存储路径

abortFile=/apps/rocketmq/store-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

#打开锁

useReentrantLockWhenPutMessage=true

waitTimeMillsInSendQueue=3000

#强制指定本机IP,需要根据每台机器进行修改。官方介绍可为空,系统默认自动识别,但多网卡时IP地址可能读取错误

brokerIP1=10.XX.XX.5

namesrv.properties

listenPort=9876

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐