温馨提示×

RabbitMQ高可用性Ubuntu上怎么实现

小樊
33
2025-11-29 04:36:43
栏目: 智能运维

在 Ubuntu 上实现 RabbitMQ 高可用

一、架构与前置准备

  • 架构建议:部署至少 3 个节点的集群,节点类型包含 磁盘节点(disc)内存节点(ram),其中磁盘节点至少 1 个(推荐 2 个),用于保障元数据与队列恢复能力。
  • 版本建议:优先使用 RabbitMQ 3.13+,队列类型优先选择 Quorum Queues(基于 Raft,强一致、自动选主),避免继续使用已弃用的 Classic Mirrored Queues
  • 主机名与解析:各节点主机名需可互相解析(/etc/hosts 或 DNS),节点名形如 rabbit@
  • 端口放通:确保节点间与客户端访问所需端口开放:4369(EPMD)25672(Erlang 分布式)5672(AMQP)15672(管理界面)
  • 一致性配置:建议将队列类型设置为 quorum 以获得更强的一致性与故障恢复能力。

二、安装与集群搭建步骤

  • 安装 RabbitMQ(所有节点)
    • 安装 Erlang 与 RabbitMQ(Ubuntu 22.04 示例):
      • sudo apt-get update && sudo apt-get install -y erlang rabbitmq-server
    • 启动服务并启用管理插件:
      • sudo systemctl enable --now rabbitmq-server
      • sudo rabbitmq-plugins enable rabbitmq_management
    • 访问管理界面:http://<节点IP>:15672(默认账号 guest/guest,仅本地访问;生产请创建管理员用户并赋权)。
  • 节点加入集群(以 node1/node2/node3 为例)
    • 统一 Erlang Cookie(首次搭建时执行一次即可):
      • 在 node1 查看:sudo cat /var/lib/rabbitmq/.erlang.cookie
      • 将内容复制到 node2/node3 相同路径,权限设为 400
    • 在 node2、node3 上执行:
      • sudo rabbitmqctl stop_app
      • sudo rabbitmqctl reset(首次加入集群需要)
      • sudo rabbitmqctl join_cluster rabbit@node1(如需内存节点:加入参数 –ram
      • sudo rabbitmqctl start_app
    • 验证集群状态:
      • sudo rabbitmqctl cluster_status(应看到 3 个节点,并区分 disc/ram 类型)。
  • 单机多节点(测试环境)
    • 通过环境变量区分节点与端口启动多个实例,再按上述步骤 join_cluster 组成集群。

三、队列高可用与数据保护

  • 使用 Quorum Queues(推荐)
    • 特性:基于 Raft 共识,提供更强的一致性与自动故障转移;队列至少 3 节点更稳健(奇数更佳)。
    • 声明方式(客户端示例):
      • channel.queueDeclare(“my-quorum-queue”, true, false, false, ImmutableMap.of(“x-queue-type”, “quorum”));
  • 如需兼容旧系统再考虑 Classic Mirrored Queues(不推荐)
    • 策略示例(将队列镜像到所有节点):
      • rabbitmqctl set_policy ha-all “^” ‘{“ha-mode”:“all”}’
  • 消息可靠性要点
    • 将队列与消息设为 durable,生产者开启 publisher confirms,消费者使用 手动确认(ack),避免消息丢失与重复消费。

四、入口流量与运维要点

  • 负载均衡与健康检查
    • 使用 HAProxy 对外暴露 AMQP 5672 与管理 15672,并开启后端健康检查,示例片段:
      • frontend rabbitmq bind *:5672 default_backend rabbitmq_nodes
      • backend rabbitmq_nodes balance roundrobin server rabbit1 192.168.1.101:5672 check server rabbit2 192.168.1.102:5672 check server rabbit3 192.168.1.103:5672 check
    • 管理界面可通过 HAProxy 统计页(如 :8100/stats)观察节点健康。
  • 用户与权限
    • 生产环境禁用远程 guest/guest,创建管理员用户并赋权:
      • rabbitmqctl add_user admin StrongPass!
      • rabbitmqctl set_user_tags admin administrator
      • rabbitmqctl set_permissions -p / admin “." ".” “.*”
  • 常用运维
    • 查看集群:rabbitmqctl cluster_status
    • 变更节点类型(需先 stop_app):rabbitmqctl change_cluster_node_type disc|ram
    • 移除故障节点:在其他节点执行 rabbitmqctl forget_cluster_node
  • 网络与分区
    • 保证节点间 4369/25672/5672/15672 端口互通;合理规划 分区(partition) 处理策略,避免脑裂导致的数据不一致。

0