温馨提示×

rabbitmq在centos上的高可用性怎么实现

小樊
39
2025-12-11 13:55:33
栏目: 智能运维

在 CentOS 上实现 RabbitMQ 高可用

一、总体架构

  • 采用 3 台 RabbitMQ 节点组成集群,至少包含 1 个磁盘节点(建议全部为磁盘节点以降低复杂度),队列通过 镜像队列实现多副本,保证单节点故障不影响可用性。
  • 在集群前部署 HAProxyTCP 四层负载均衡(5672)与健康检查,客户端不直接连节点。
  • 使用 Keepalived 为 HAProxy 提供 VIP(虚拟 IP) 与故障漂移,消除入口单点。
  • 管理与监控通过 **管理插件(15672)**与 HAProxy 统计页面完成。
  • 典型端口:5672(AMQP)、15672(管理)、8100(HAProxy 统计)。

二、部署步骤

  • 准备与基础配置

    • 三台主机配置 /etc/hosts 可互相解析主机名;安装 ErlangRabbitMQ(版本需匹配);启动服务并启用管理插件:
      • 启用管理:rabbitmq-plugins enable rabbitmq_management
      • 访问控制台:http://<节点IP>:15672
    • 同步 Erlang Cookie(同一集群必须一致):
      • 常见路径:/var/lib/rabbitmq/.erlang.cookie$HOME/.erlang.cookie
      • 建议权限:chmod 600,并使用 scp 同步到所有节点。
  • 组建 RabbitMQ 集群

    • 选择一台为基准节点(如 rabbit@node1),另外两台执行:
      • rabbitmqctl stop_app
      • (可选)rabbitmqctl reset(清空本节点历史资源)
      • rabbitmqctl join_cluster rabbit@node1(如需内存节点加 --ram
      • rabbitmqctl start_app
    • 任意节点查看状态:rabbitmqctl cluster_status,确认 disc 节点列表与 running_nodes 正常。
  • 配置镜像队列

    • 全量镜像(适合小规模,3 节点):
      • rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
    • 过半写策略(适合更大集群,如 5 节点同步到 3 个副本):
      • rabbitmqctl set_policy ha-two "^" '{"ha-mode":"exactly","ha-params":3,"ha-sync-mode":"automatic"}'
    • 说明:镜像队列会将队列与消息复制到多个节点,提升可用性,但会带来 网络与磁盘 IO 开销
  • 部署 HAProxy

    • 建议版本 ≥ 1.6,配置示例(/etc/haproxy/haproxy.cfg):
      • 全局与默认
        global
          log 127.0.0.1 local0 info
          maxconn 5120
          daemon
        defaults
          log global
          mode tcp
          option tcplog
          retries 3
          timeout connect 10s
          timeout client  10s
          timeout server  15s
        
      • RabbitMQ AMQP 监听(TCP 四层)
        listen rabbitmq_cluster
          bind 0.0.0.0:5672
          mode tcp
          balance roundrobin
          server mq1 192.168.1.101:5672 check inter 5000 rise 2 fall 2
          server mq2 192.168.1.102:5672 check inter 5000 rise 2 fall 2
          server mq3 192.168.1.103:5672 check inter 5000 rise 2 fall 2
        
      • 统计页面(便于运维观测)
        listen stats
          bind 0.0.0.0:8100
          mode http
          stats enable
          stats uri /rabbitmq-stats
          stats refresh 5s
        
    • 启动:/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
  • 部署 Keepalived 实现 VIP 漂移

    • 两台 HAProxy 节点安装 Keepalived,配置 VRRP健康检查脚本(检测 HAProxy 进程/端口),主节点 state MASTER、备节点 state BACKUP,设置 virtual_router_id 一致、priority 主高备低,并配置 virtual_ipaddress(如 192.168.1.160)。
    • 应用通过 VIP:5672 访问,实现入口高可用。

三、防火墙与网络

  • 放通必要端口(以 firewalld 为例):
    • firewall-cmd --add-port=5672/tcp --permanent
    • firewall-cmd --add-port=15672/tcp --permanent
    • firewall-cmd --reload
  • 集群节点间需能互相访问 4369(epmd)25672(集群通信) 等端口;生产环境建议 内网隔离安全组白名单

四、验证与运维要点

  • 验证集群:rabbitmqctl cluster_status 应显示 3 个节点running_nodes 正常;管理界面可查看节点与队列分布。
  • 验证高可用:
    • 在控制台创建队列并观察 镜像副本数
    • 停掉主镜像或某节点,确认队列仍可用、消息不丢失;
    • 通过 VIP:8100/rabbitmq-stats 查看后端节点健康与切换。
  • 扩缩容与下线:
    • 新增节点:先加入集群,再按需设置镜像策略;
    • 下线节点:先 rabbitmqctl stop,再在其他节点执行 rabbitmqctl forget_cluster_node <node>;若节点无法启动,可使用 forget_cluster_node <node> -offline 强制剔除。

五、注意事项与优化

  • 节点角色:集群至少 1 个磁盘节点,建议 全部磁盘节点 以避免元数据与队列创建受限。
  • 镜像策略:
    • 小规模(3 节点)可用 ha-mode: all
    • 更大集群建议 ha-mode: exactly + 过半写(如 N/2+1),并开启 ha-sync-mode: automatic 提升故障切换后的同步效率。
  • 性能权衡:镜像队列会显著增加 网络带宽与磁盘 IO,需结合业务吞吐与一致性要求选择策略。
  • 客户端连接:生产建议使用 VIP:5672 与连接重试/重连机制,避免直连单节点。
  • 版本匹配:部署前务必核对 Erlang 与 RabbitMQ 版本兼容矩阵,避免启动或集群异常。

0