要在 Windows 或 Linux(CentOS 7.9) 上搭建 RabbitMQ 集群,基本思路是:
🗂️ 架构说明
主机 | 角色 | IP | 节点名称 |
---|---|---|---|
A | 主节点 | 10.152.132.1 |
rabbit@node1 |
B | 备节点 | 10.152.132.2 |
rabbit@node2 |
集群目标:两台 RabbitMQ 节点加入同一个集群。
🧱 搭建 RabbitMQ 集群步骤(Linux/CentOS)
说明:默认你已安装好 RabbitMQ 和 Erlang,并能访问
rabbitmqctl
命令。
✅ 1. 设置主机名 & 配置 hosts
在两台机器上,设置好各自主机名,并写入 /etc/hosts
文件:
🖥️ 节点 A(主节点:10.152.132.1)
hostnamectl set-hostname node1
echo "10.152.132.1 node1" >> /etc/hosts
echo "10.152.132.2 node2" >> /etc/hosts
🖥️ 节点 B(备节点:10.152.132.2)
hostnamectl set-hostname node2
echo "10.152.132.1 node1" >> /etc/hosts
echo "10.152.132.2 node2" >> /etc/hosts
✅ 2. 保证 Erlang Cookie 一致
在 RabbitMQ 中,Erlang Cookie 是集群通信的“密码”。必须在所有节点中一致。
在主节点 node1
上执行:
cat /var/lib/rabbitmq/.erlang.cookie
将内容复制到备节点 node2
的相同位置,命令如下:
scp /var/lib/rabbitmq/.erlang.cookie root@10.152.132.2:/var/lib/rabbitmq/
复制后请确保权限正确:
chmod 400 /var/lib/rabbitmq/.erlang.cookie
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
✅ 3. 启动主节点
在主节点 10.152.132.1
启动 RabbitMQ:
systemctl start rabbitmq-server
rabbitmqctl status
✅ 4. 加入备节点到主节点的集群
在 备节点 执行:
# 停止 rabbitmq 应用
rabbitmqctl stop_app
# 将本节点重置(清空现有状态)
rabbitmqctl reset
# 加入主节点的集群
rabbitmqctl join_cluster rabbit@node1
# 启动 rabbitmq 应用
rabbitmqctl start_app
✅ 5. 查看集群状态
在任意一个节点执行:
rabbitmqctl cluster_status
应看到:
{nodes,[{disc,[rabbit@node1,rabbit@node2]}]}
✅ 6. 开启 Web 管理插件并访问
rabbitmq-plugins enable rabbitmq_management
访问地址:
- 节点1: http://10.152.132.1:15672
- 节点2: http://10.152.132.2:15672
默认账号:guest
/guest
✅ 7. 添加 HA 队列策略(可选)
让所有队列在两个节点间自动同步复制:
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
🚨 注意事项
问题 | 原因 / 解决方式 |
---|---|
加入失败 | Cookie 不一致,或 /etc/hosts 未配置 |
连接被拒绝 | RabbitMQ 未启动,或防火墙阻止了端口 |
Web 访问不了 | 端口 15672 未开放,或服务未启用 |
✅ 所需开放端口(两节点之间必须互通)
端口号 | 说明 |
---|---|
4369 | epmd(Erlang 分布式端口管理) |
5672 | RabbitMQ AMQP 服务端口 |
15672 | Web UI 管理端口(HTTP) |
25672 | RabbitMQ 节点间通信端口 |