侧边栏壁纸
博主头像
ProSayJ 博主等级

Talk is cheap. Show me the code.

  • 累计撰写 43 篇文章
  • 累计创建 16 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

关于 RabbitMQ 集群节点的运维

YangJian
2025-06-21 / 0 评论 / 0 点赞 / 15 阅读 / 0 字

RabbitMQ 集群的节点加入与移除是日常运维中非常关键的操作,下面为你提供 详细操作步骤、注意事项、命令解释和推荐实践


✅ 集群角色说明

RabbitMQ 节点分为两类:

类型

描述

RAM 节点

元数据只存在内存,性能高但重启丢失,需要至少一个 Disk 节点

Disk 节点(默认)

元数据持久化,推荐大多数节点使用 Disk


✅ 一、RabbitMQ 节点加入集群

🚧 前提要求

  1. 所有节点必须:

  • 安装相同版本的 RabbitMQ 和 Erlang

  • 配置相同的 cookie 文件(用于认证)

  1. 所有节点需能通过主机名通信(推荐设置 /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 

主节点:

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"}'

✅ 四、集群场景推荐

场景

配置建议

小型集群(2~3 台)

所有节点用 Disk 模式

大型集群(5+ 台)

主节点为 Disk,其余为 RAM(提升性能)

数据强一致要求

所有重要队列配置镜像策略


✅ 五、查看集群拓扑/状态命令

rabbitmqctl cluster_status              # 查看集群节点
rabbitmqctl list_nodes                  # 列出现有节点
rabbitmqctl list_queues -p /            # 查看所有队列
rabbitmqctl list_users                  # 用户列表
rabbitmqctl list_vhosts                 # 虚拟主机列表


0

评论区