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 BACKUP
和 priority 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)
- 创建 Target Group,注册 HAProxy 实例。
- 配置 ALB/NLB 监听 80/443,指向 Target Group。
- 每个 HAProxy 节点独立运行相同配置。
(3)优缺点
- 优点:云厂商 LB 自带高可用,无需额外维护 VIP。
- 缺点:成本较高,依赖云服务。
4. 基于 Corosync+Pacemaker(企业级方案)
(1)架构
客户端 → VIP
├── HAProxy 节点 1(Pacemaker 主)
└── HAProxy 节点 2(Pacemaker 备)
- Pacemaker:集群资源管理器,提供更复杂的故障检测和恢复策略。
- Corosync:集群通信层,确保节点状态同步。
(2)部署步骤
- 安装 Corosync+Pacemaker:
sudo apt install pacemaker corosync
- 配置集群资源:
sudo pcs resource create haproxy systemd:haproxy op monitor interval=5s sudo pcs resource vip IPaddr2 ip=192.168.1.100 cidr_netmask=24
- 测试故障转移:
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 在故障时自动切换,保障业务连续性。