RabbitMQ 集群的节点加入与移除是日常运维中非常关键的操作,下面为你提供 详细操作步骤、注意事项、命令解释和推荐实践。
✅ 集群角色说明
RabbitMQ 节点分为两类:
✅ 一、RabbitMQ 节点加入集群
🚧 前提要求
所有节点必须:
安装相同版本的 RabbitMQ 和 Erlang
配置相同的 cookie 文件(用于认证)
所有节点需能通过主机名通信(推荐设置 /etc/hosts 或使用静态 IP)
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.55.33 rabbitmq01
172.16.55.34 rabbitmq02
172.16.55.35 rabbitmq03
✅ 步骤 1:确认所有节点 RabbitMQ 关闭状态
systemctl stop rabbitmq-server.service
✅ 步骤 2:拷贝 cookie 文件(必须)
主节点:
cat /var/lib/rabbitmq/.erlang.cookie
将它的内容拷贝到新节点:
echo 'cookie值' > /var/lib/rabbitmq/.erlang.cookie
chmod 400 /var/lib/rabbitmq/.erlang.cookie
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
echo 'GGSJRHRPKSRZWJPOLPQY' > /var/lib/rabbitmq/.erlang.cookie
chmod 400 /var/lib/rabbitmq/.erlang.cookie
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
✅ 步骤 3:启动主节点
systemctl restart rabbitmq-server.service
✅ 步骤 4:启动新节点
systemctl restart rabbitmq-server.service
✅ 步骤 5:让新节点加入集群(在新节点执行)
加入为 Disk 节点(默认):
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@主节点主机名
rabbitmqctl join_cluster rabbit@rabbitmq01
rabbitmqctl start_app
rabbitmq01
加入为 RAM 节点(可选):
rabbitmqctl join_cluster --ram rabbit@主节点主机名
替换 rabbit@主节点主机名,比如 rabbit@node1
✅ 步骤 6:验证集群状态(任一节点执行)
rabbitmqctl cluster_status
输出示例:
Cluster status of node rabbit@node1 ...
[{nodes,[{disc,[rabbit@node1,rabbit@node2]}]},
{running_nodes,[rabbit@node1,rabbit@node2]},
{cluster_name,<<"rabbit@node1">>}]
✅ 二、RabbitMQ 节点移除集群
🚨 注意事项
移除前请确认节点没有持久化队列、没有正在消费的客户端
移除后节点上的所有队列与消息将清除(reset)
✅ 正确移除步骤(在任一集群节点执行)
rabbitmqctl forget_cluster_node rabbit@待移除节点主机名
示例:
rabbitmqctl forget_cluster_node rabbit@node2
然后到该节点执行:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app # 此时它是独立节点
⚠️ 如果节点宕机,也可以使用 --offline 移除:
rabbitmqctl forget_cluster_node --offline rabbit@node2
✅ 三、持久性设置建议(推荐做法)
在集群中,每个节点默认保存其消息队列,但你应该确保所有持久化队列都启用镜像(HA),否则节点宕机会丢失数据。
# 示例:设置所有队列在多个节点镜像
rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'
✅ 四、集群场景推荐
✅ 五、查看集群拓扑/状态命令
rabbitmqctl cluster_status # 查看集群节点
rabbitmqctl list_nodes # 列出现有节点
rabbitmqctl list_queues -p / # 查看所有队列
rabbitmqctl list_users # 用户列表
rabbitmqctl list_vhosts # 虚拟主机列表
评论区