如何在Linux中安装并配置RabbitMQ集群 Linux实现消息中间件的方法

落宇酱_7189

落宇酱_7189

2026-05-29

798人浏览

原创

rabbitmq默认集群非高可用,必须同步.erlang.cookie、配置镜像策略、客户端显式传多地址;缺一不可,否则仍为单点故障放大器。

如何在linux中安装并配置rabbitmq集群 linux实现消息中间件的方法

RabbitMQ 默认集群不是高可用方案,装完 rabbitmqctl join_cluster 显示三节点在线 ≠ 消息不丢、服务不断。必须同步 .erlang.cookie、配镜像策略、客户端显式传多地址,缺一不可。

安装前先确认 Erlang 版本是否匹配 RabbitMQ

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 和 /etc/hosts

节点间无法握手,90% 是这两个文件出问题:一个内容不一致,一个解析失败。

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载
  • /var/lib/rabbitmq/.erlang.cookie 必须在所有节点上完全相同(字节级一致),权限严格为 400,属主为 rabbitmq:rabbitmq;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 默认只同步元数据(exchange、binding、队列定义),不复制消息。

  • 必须手动设镜像策略:rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}';注意 JSON 里必须用双引号,单引号会解析失败
  • 策略生效后,再查:rabbitmqctl list_queues name slave_pids,对应队列的 slave_pids 列非空才算镜像成功
  • 不要无差别对所有队列启用 ha-mode: all,镜像会显著增加磁盘 I/O 和网络压力;按业务重要性分级,比如只对 ^critical\. 开镜像

客户端连集群却还是单点失效?因为它根本不知道要切节点

RabbitMQ 不提供 VIP、DNS 转发或自动重定向。客户端硬编码 localhost:5672 或只传一个地址,节点挂了就直接报 Connection refused。

  • Spring Boot 必须显式配置多个地址:spring.rabbitmq.addresses=rabbitmq1:5672,rabbitmq2:5672,rabbitmq3:5672,并关闭动态连接池:spring.rabbitmq.dynamic=false
  • Python Pika 要传 connection_params = [pika.ConnectionParameters(host) for host in ["rabbitmq1", "rabbitmq2", "rabbitmq3"]],且启用 retry_delay 和 connection_attempts
  • 管理界面打不开?检查 listeners.tcp.default 是否监听 0.0.0.0,以及插件是否启用:rabbitmq-plugins enable rabbitmq_management

最常被跳过的环节是:镜像策略没验证、.erlang.cookie 权限漏改、客户端地址写死。这三个点任何一个没踩实,集群就只是“看起来很美”的单点故障放大器。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux rabbitmq

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
rabbitmq和kafka有什么区别
rabbitmq和kafka有什么区别

rabbitmq和kafka的区别:1、语言与平台;2、消息传递模型;3、可靠性;4、性能与吞吐量;5、集群与负载均衡;6、消费模型;7、用途与场景;8、社区与生态系统;9、监控与管理;10、其他特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

604

5

Java 消息队列与异步架构实战
Java 消息队列与异步架构实战

本专题系统讲解 Java 在消息队列与异步系统架构中的核心应用,涵盖消息队列基本原理、Kafka 与 RabbitMQ 的使用场景对比、生产者与消费者模型、消息可靠性与顺序性保障、重复消费与幂等处理,以及在高并发系统中的异步解耦设计。通过实战案例,帮助学习者掌握 使用 Java 构建高吞吐、高可靠异步消息系统的完整思路。

2026.01.28

968

20

RabbitMQ使用教程合集
RabbitMQ使用教程合集

RabbitMQ使用教程合集整理 RabbitMQ 基础教程、消息队列开发案例、生产者消费者、交换机与队列实战内容。

2026.05.20

184

15

RabbitMQ集群部署指南
RabbitMQ集群部署指南

RabbitMQ集群部署指南聚合 RabbitMQ 集群部署、高可用架构、镜像队列、故障恢复、监控与运维优化内容。

2026.05.20

137

12

RabbitMQ Docker实战指南
RabbitMQ Docker实战指南

RabbitMQ Docker实战指南提供 RabbitMQ Docker 镜像部署、Docker Compose、Kubernetes Operator 与云原生实践教程。

2026.05.20

142

10

什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

2024.05.11

649

5

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

2025.12.18

624

18

ThinkPHP中间件机制与请求拦截处理实践
ThinkPHP中间件机制与请求拦截处理实践

本专题围绕 ThinkPHP 中间件体系展开,深入讲解中间件的定义、注册与执行流程。内容包括全局中间件与路由中间件的区别、请求前后处理逻辑、自定义中间件开发以及权限验证与日志处理应用。通过实际案例,帮助开发者掌握中间件在项目中的核心作用与最佳实践。

2026.03.31

438

17

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4170

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习