环境说明

  • 主节点(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

八、关键注意事项

  1. IP 地址:所有配置文件中的 10.XX.XX.5 和 10.XX.XX.6 要替换成你实际的两台服务器 IP。

  2. 端口冲突:确保不同 Broker 的 listenPort 不冲突(同一台服务器上的两个 Broker 端口必须不同)。

  3. 存储目录:每个 Broker 的 storePathRootDir 必须独立,不能共用。

  4. 防火墙:开放 9876、10911、11911 等端口(firewall-cmd --add-port=9876/tcp --permanent && firewall-cmd --reload)。

  5. IPv6 问题:如果遇到 BindException,可在 runserver.sh 和 runbroker.sh 的 JAVA_OPT 中添加 -Djava.net.preferIPv4Stack=true(你们已经做了)。

  6. 环境变量:每次新开终端记得 source /etc/profile 或者重新登录。

Logo

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

更多推荐