RabbitMQ默认集群非高可用,需同步.erlang.cookie、配置镜像策略、客户端显式传多地址;OTP版本须≥25.3,否则命令卡死;防火墙开放4369/25672端口;节点时间偏差≤60秒。

RabbitMQ 默认集群不是高可用方案,装完 rabbitmqctl join_cluster 显示三节点在线 ≠ 消息不丢、服务不断。必须同步 .erlang.cookie、配镜像策略、客户端显式传多地址,缺一不可。
OTP 版本不匹配会导致 rabbitmqctl status 卡住或报错
RabbitMQ 3.11+ 强制要求 OTP ≥ 25.3。CentOS/RHEL 自带的 erlang-24.x 或更低版本会直接导致 rabbitmqctl status 卡死,或报 {error,{"no such file or directory","rabbit.app"}}。
- 执行
erl -eval 'erlang:display(erlang:system_info(otp_release)), halt().' -noshell查实际 OTP 版本;输出是"24"或更小,必须卸载:yum remove erlang\* - 改用 Cloudsmith 官方源安装 Erlang:
yum install -y https://github.com/rabbitmq/erlang-rpm/releases/download/v25.3.2.8/erlang-25.3.2.8-1.el7.x86_64.rpm(注意系统版本对齐) - Ubuntu 用户别用
apt-get install erlang,它默认装旧版;应添加https://github.com/rabbitmq/erlang-debian/releases的源后安装
.erlang.cookie 不一致或权限错,节点根本连不上
90% 的集群握手失败源于这个文件:内容不一致、权限不对、属主错误,或 /etc/hosts 解析失败。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 所有节点的
/var/lib/rabbitmq/.erlang.cookie必须字节级一致;scp复制后务必补上:chmod 400 /var/lib/rabbitmq/.erlang.cookie && chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie -
/etc/hosts中每台机器都必须能反向解析其他节点的NODENAME,例如节点名是rabbit@rabbitmq1,则必须有172.16.9.8 rabbitmq1这一行,不能只写 IP 或用域名别名 - 验证命令:
erl -name test@rabbitmq1 -setcookie ABC -noinput -eval "net:ping('rabbit@rabbitmq2')."返回pong才算通
普通集群不镜像队列,宕机就丢消息
rabbitmqctl cluster_status 显示三节点,rabbitmqctl list_queues name node 却只在一个 node 上有记录 —— 这就是裸奔状态。RabbitMQ 默认只同步元数据,不复制消息。
- 必须手动设镜像策略:
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}';注意 JSON 里必须用双引号,单引号会解析失败 - 策略生效后,再查:
rabbitmqctl list_queues name slave_pids,对应队列的slave_pids列非空才算真正镜像成功 - 防火墙必须放行
4369(epmd)和25672(节点间通信),仅开5672和15672不够
客户端不传多地址,集群等于摆设
服务端搭好了,客户端不配合照样单点失效。RabbitMQ 不会帮你自动切换节点,全靠 SDK 自己实现重试与故障转移。
- Spring Boot 中要显式配置多个地址:
spring.rabbitmq.addresses=node1:5672,node2:5672,node3:5672,并禁用简化模式:spring.rabbitmq.dynamic=false - Python Pika、Java AMQP Client 等主流 SDK 都支持传入多个 URL,但默认行为往往不是自动重试;必须检查文档确认是否启用
connection_attempts、retry_delay等参数 - 节点间系统时间偏差不能超过 60 秒,否则分布式通信失败 —— 这个细节容易被忽略,但会导致
net:ping返回pang或连接超时

















