RocketMQ 双主双从集群 deepseek总结版本
环境说明
-
主节点(Master1 + Slave2):
10.XX.XX.5 -
从节点(Master2 + Slave1):
10.XX.XX.6 -
RocketMQ 安装路径:
/usr/local/rocketmq/rocketmq-all-4.9.4-bin-release -
配置文件统一放在
/apps/rocketmq/conf/下(方便管理) -
日志放在
/apps/rocketmq/logs/ -
数据存储放在
/apps/rocketmq/store-*下(每个 Broker 独立目录)
一、环境变量配置(两台服务器都要做)
编辑 /etc/profile,末尾添加:
# RocketMQ 环境变量 export ROCKETMQ_HOME=/usr/local/rocketmq/rocketmq-all-4.9.4-bin-release export PATH=$PATH:$ROCKETMQ_HOME/bin
使生效:
source /etc/profile
二、创建必要目录(两台服务器)
mkdir -p /apps/rocketmq/{conf,logs}
# 存储目录会在 Broker 启动时自动创建,也可以手动预创建
mkdir -p /apps/rocketmq/store-a /apps/rocketmq/store-b /apps/rocketmq/store-a-s /apps/rocketmq/store-b-s
三、准备配置文件(放在 /apps/rocketmq/conf/)
1. NameServer 配置文件 namesrv.properties
内容可为空(使用默认),也可以指定监听端口等。
如果不需要特殊配置,可以省略 -c 参数,直接启动。
2. Broker 配置文件(示例)
主节点(10.XX.XX.5)上的两个配置文件:
broker-a.properties(主,brokerName=broker-a,brokerId=0)
properties
brokerClusterName=rocketmq-cluster brokerName=broker-a brokerId=0 namesrvAddr=10.XX.XX.5:9876;10.XX.XX.6:9876 listenPort=10911 storePathRootDir=/apps/rocketmq/store-a brokerIP1=10.XX.XX.5 autoCreateTopicEnable=true autoCreateSubscriptionGroup=true
broker-b-s.properties(从,brokerName=broker-b,brokerId=1)
properties
brokerClusterName=rocketmq-cluster brokerName=broker-b brokerId=1 namesrvAddr=10.XX.XX.5:9876;10.XX.XX.6:9876 listenPort=11911 storePathRootDir=/apps/rocketmq/store-b-s brokerIP1=10.XX.XX.5 autoCreateTopicEnable=true autoCreateSubscriptionGroup=true
从节点(10.XX.XX.6)上的两个配置文件:
broker-b.properties(主,brokerName=broker-b,brokerId=0)
properties
brokerClusterName=rocketmq-cluster brokerName=broker-b brokerId=0 namesrvAddr=10.XX.XX.5:9876;10.XX.XX.6:9876 listenPort=10911 storePathRootDir=/apps/rocketmq/store-b brokerIP1=10.XX.XX.6 autoCreateTopicEnable=true autoCreateSubscriptionGroup=true
broker-a-s.properties(从,brokerName=broker-a,brokerId=1)
properties
brokerClusterName=rocketmq-cluster brokerName=broker-a brokerId=1 namesrvAddr=10.XX.XX.5:9876;10.XX.XX.6:9876 listenPort=11911 storePathRootDir=/apps/rocketmq/store-a-s brokerIP1=10.XX.XX.6 autoCreateTopicEnable=true autoCreateSubscriptionGroup=true
注意:
namesrvAddr使用 分号;分隔多个地址(也可以用逗号,但最终实测分号成功)。brokerIP1必须填写本机实际 IP,否则其他节点无法访问。
四、启动集群的正确顺序
1. 在两台服务器上分别启动 NameServer
# 进入 RocketMQ bin 目录 cd /usr/local/rocketmq/rocketmq-all-4.9.4-bin-release/bin # 启动 NameServer(无配置文件则省略 -c) nohup sh mqnamesrv > /apps/rocketmq/logs/mqnamesrv.log 2>&1 & # 验证启动成功 tail -f /apps/rocketmq/logs/mqnamesrv.log # 应看到 "The Name Server boot success."
2. 启动 Broker(按角色启动)
在主节点(10.XX.XX.5)执行:
cd /usr/local/rocketmq/rocketmq-all-4.9.4-bin-release/bin # 启动 broker-a(主) nohup sh mqbroker -c /apps/rocketmq/conf/broker-a.properties > /apps/rocketmq/logs/broker-a.log 2>&1 & # 启动 broker-b-s(从) nohup sh mqbroker -c /apps/rocketmq/conf/broker-b-s.properties > /apps/rocketmq/logs/broker-b-s.log 2>&1 &
在从节点(10.XX.XX.6)执行:
cd /usr/local/rocketmq/rocketmq-all-4.9.4-bin-release/bin # 启动 broker-b(主) nohup sh mqbroker -c /apps/rocketmq/conf/broker-b.properties > /apps/rocketmq/logs/broker-b.log 2>&1 & # 启动 broker-a-s(从) 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-*.log查看日志,看到boot success即成功。
五、验证集群状态
在任意一台服务器执行:
mqadmin clusterList -n 10.XX.XX.5:9876,10.XX.XX.6:9876
(注意这里 -n 后面可以用逗号,也可以只用单个地址)
期望输出类似:
#Cluster Name #Broker Name #BID #Addr #Version rocketmq-cluster broker-a 0 10.XX.XX.5:10911 V4_9_4 rocketmq-cluster broker-a 1 10.XX.XX.6:11911 V4_9_4 rocketmq-cluster broker-b 0 10.XX.XX.6:10911 V4_9_4 rocketmq-cluster broker-b 1 10.XX.XX.5:11911 V4_9_4
六、停止集群(优雅关闭)
# 停止所有 Broker sh mqshutdown broker # 停止所有 NameServer sh mqshutdown namesrv
如果遇到进程残留,可强制清理:
ps -ef | grep -E 'mqnamesrv|mqbroker' | grep -v grep | awk '{print $2}' | xargs kill -9
七、下次重启的简化命令(已注释)
在主节点(10.XX.XX.5):
# 1. 进入 bin 目录 cd /usr/local/rocketmq/rocketmq-all-4.9.4-bin-release/bin # 2. 启动 NameServer nohup sh mqnamesrv > /apps/rocketmq/logs/mqnamesrv.log 2>&1 & echo "NameServer started, check log: tail -f /apps/rocketmq/logs/mqnamesrv.log" # 3. 启动 broker-a 和 broker-b-s nohup sh mqbroker -c /apps/rocketmq/conf/broker-a.properties > /apps/rocketmq/logs/broker-a.log 2>&1 & nohup sh mqbroker -c /apps/rocketmq/conf/broker-b-s.properties > /apps/rocketmq/logs/broker-b-s.log 2>&1 & echo "Brokers started, check logs with: tail -f /apps/rocketmq/logs/broker-*.log"
在从节点(10.XX.XX.6):
# 1. 进入 bin 目录 cd /usr/local/rocketmq/rocketmq-all-4.9.4-bin-release/bin # 2. 启动 NameServer nohup sh mqnamesrv > /apps/rocketmq/logs/mqnamesrv.log 2>&1 & echo "NameServer started" # 3. 启动 broker-b 和 broker-a-s nohup sh mqbroker -c /apps/rocketmq/conf/broker-b.properties > /apps/rocketmq/logs/broker-b.log 2>&1 & nohup sh mqbroker -c /apps/rocketmq/conf/broker-a-s.properties > /apps/rocketmq/logs/broker-a-s.log 2>&1 & echo "Brokers started"
验证(任意节点):
mqadmin clusterList -n 10.XX.XX.5:9876,10.XX.XX.6:9876
八、关键注意事项
-
IP 地址:所有配置文件中的
10.XX.XX.5和10.XX.XX.6要替换成你实际的两台服务器 IP。 -
端口冲突:确保不同 Broker 的
listenPort不冲突(同一台服务器上的两个 Broker 端口必须不同)。 -
存储目录:每个 Broker 的
storePathRootDir必须独立,不能共用。 -
防火墙:开放 9876、10911、11911 等端口(
firewall-cmd --add-port=9876/tcp --permanent && firewall-cmd --reload)。 -
IPv6 问题:如果遇到
BindException,可在runserver.sh和runbroker.sh的JAVA_OPT中添加-Djava.net.preferIPv4Stack=true(你们已经做了)。 -
环境变量:每次新开终端记得
source /etc/profile或者重新登录。
更多推荐
所有评论(0)