HAProxy 高可用部署方案详解

发布于:2025-06-11 ⋅ 阅读:(24) ⋅ 点赞:(0)

HAProxy 高可用部署方案详解

HAProxy 作为高性能的负载均衡器,在生产环境中通常需要高可用(High Availability, HA)部署以避免单点故障。以下是几种主流的 HAProxy 高可用方案:


1. 基于 Keepalived + VIP 的高可用方案

(1)架构

客户端 → 虚拟IP (VIP)
          ├── HAProxy 主节点(Active)
          └── HAProxy 备节点(Backup)
  • VIP (Virtual IP):客户端访问的浮动 IP,由 Keepalived 管理。
  • Keepalived:通过 VRRP 协议实现主备切换,检测 HAProxy 健康状态。

(2)部署步骤

① 安装 HAProxy 和 Keepalived
# Ubuntu/Debian
sudo apt install haproxy keepalived

# CentOS/RHEL
sudo yum install haproxy keepalived
② 配置 HAProxy

/etc/haproxy/haproxy.cfg

frontend http-in
    bind *:80
    default_backend servers

backend servers
    balance roundrobin
    server web1 192.168.1.101:80 check
    server web2 192.168.1.102:80 check
③ 配置 Keepalived

/etc/keepalived/keepalived.conf(主节点):

vrrp_script chk_haproxy {
    script "pidof haproxy"  # 检查 HAProxy 进程
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state MASTER           # 主节点
    interface eth0         # 网卡
    virtual_router_id 51   # VRRP 组 ID(必须相同)
    priority 100           # 主节点优先级(备节点设为 50)
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass 1234     # 主备节点密码一致
    }

    virtual_ipaddress {
        192.168.1.100/24   # VIP
    }

    track_script {
        chk_haproxy        # 关联健康检查
    }
}

备节点 只需修改 state BACKUPpriority 50

④ 启动服务
sudo systemctl start haproxy
sudo systemctl start keepalived
sudo systemctl enable haproxy keepalived

(3)故障切换测试

  • 手动停止主节点 HAProxy
    sudo systemctl stop haproxy
    
  • 观察 VIP 是否漂移到备节点
    ip addr show eth0
    

2. 基于 DNS 轮询 + 多活 HAProxy

(1)架构

客户端 → DNS 轮询
          ├── HAProxy 节点 1
          ├── HAProxy 节点 2
          └── HAProxy 节点 3
  • DNS 轮询:客户端请求分散到多个 HAProxy 实例。
  • 多活模式:所有 HAProxy 节点同时工作,无单点故障。

(2)部署方式

  • 在 DNS 解析(如 Cloudflare、AWS Route 53)中配置多个 A 记录:
    example.com → 192.168.1.100
    example.com → 192.168.1.101
    example.com → 192.168.1.102
    
  • 每个 HAProxy 节点独立运行,后端服务器相同。

(3)优缺点

  • 优点:无 VIP 依赖,适合云环境。
  • 缺点:DNS TTL 影响切换速度,客户端可能缓存旧 IP。

3. 基于云厂商 LB + HAProxy(AWS ALB/NLB)

(1)架构

客户端 → AWS ALB/NLB
          ├── HAProxy 节点 1
          └── HAProxy 节点 2
  • 云负载均衡器(如 AWS ALB) 作为入口,分发流量到多个 HAProxy 实例。
  • HAProxy 负责精细化流量管理(如会话保持、高级路由)。

(2)部署示例(AWS)

  1. 创建 Target Group,注册 HAProxy 实例。
  2. 配置 ALB/NLB 监听 80/443,指向 Target Group。
  3. 每个 HAProxy 节点独立运行相同配置。

(3)优缺点

  • 优点:云厂商 LB 自带高可用,无需额外维护 VIP。
  • 缺点:成本较高,依赖云服务。

4. 基于 Corosync+Pacemaker(企业级方案)

(1)架构

客户端 → VIP
          ├── HAProxy 节点 1(Pacemaker 主)
          └── HAProxy 节点 2(Pacemaker 备)
  • Pacemaker:集群资源管理器,提供更复杂的故障检测和恢复策略。
  • Corosync:集群通信层,确保节点状态同步。

(2)部署步骤

  1. 安装 Corosync+Pacemaker:
    sudo apt install pacemaker corosync
    
  2. 配置集群资源:
    sudo pcs resource create haproxy systemd:haproxy op monitor interval=5s
    sudo pcs resource vip IPaddr2 ip=192.168.1.100 cidr_netmask=24
    
  3. 测试故障转移:
    sudo pcs node standby <主节点>
    

(3)适用场景

  • 企业级高可用:需要更精细的控制(如脑裂防护)。
  • 复杂环境:如混合云、跨数据中心 HA。

5. 最佳实践总结

方案 适用场景 优点 缺点
Keepalived + VIP 传统服务器、私有云 简单可靠 依赖 VIP,可能脑裂
DNS 轮询 + 多活 云原生、K8s 无单点故障 DNS 缓存影响切换
云 LB + HAProxy AWS/Azure/GCP 免维护 LB 成本高
Pacemaker+Corosync 企业级高可用 高级策略支持 配置复杂

推荐选择

  • 大多数场景Keepalived + VIP(简单高效)。
  • 云环境DNS 轮询云厂商 LB
  • 企业级需求Pacemaker + Corosync

6. 监控与维护

  • 健康检查
    backend servers
        server web1 192.168.1.101:80 check inter 2s fall 3 rise 2
    
  • 日志监控
    tail -f /var/log/haproxy.log
    
  • Prometheus + Grafana:使用 haproxy_exporter 收集指标。

通过以上方案,可以确保 HAProxy 在故障时自动切换,保障业务连续性。