HAProxy+Keepalived高可用集群需协同配置:HAProxy负责七层负载均衡与健康检查,Keepalived通过VRRP管理VIP实现秒级故障切换,二者须避免脑裂、时间同步、真实IP通信及日志统一。

用 HAProxy + Keepalived 搭建 Linux 高可用负载均衡集群,核心是让流量智能分发、后端服务故障时自动切换、VIP(虚拟 IP)不中断。这不是简单装两个软件就能跑起来的,关键在配置协同与状态同步。
HAProxy 负载均衡配置要点
HAProxy 作为七层代理,负责 HTTP/HTTPS 流量分发。需明确后端服务器健康检查机制、负载算法和超时策略。
- 启用 http-check 或 option httpchk,用 HEAD /health 检查后端 Web 服务是否存活
- 推荐使用 balance roundrobin 或 balance leastconn,避免单节点过载
- 设置 timeout connect 5s、timeout server 30s,防止慢连接拖垮整个代理
- 前端绑定 bind *:80 和 bind *:443 ssl crt /etc/haproxy/certs.pem,支持 HTTPS 卸载
Keepalived 实现 VIP 高可用
Keepalived 通过 VRRP 协议管理虚拟 IP,主节点持有 VIP,故障时从节点秒级接管。它不转发流量,只保障入口地址永续。
- 主节点 priority 100,从节点设为 90,确保主优先;都开启 preempt 实现故障恢复后自动切回
- 用 vrrp_script 监控 HAProxy 进程:若 killall -0 haproxy 失败,则降低本机优先级触发切换
- VIP 绑定网卡要和实际业务网段一致,例如 virtual_ipaddress { 192.168.1.100/24 dev eth0 }
- 关闭防火墙或放行 VRRP 组播(协议号 112),否则节点间无法通信
双机协同的关键细节
HAProxy 和 Keepalived 同机部署时,必须避免“脑裂”和“假死切换”。不能只依赖进程存在,而要结合服务响应能力判断真实状态。
- Keepalived 的 check 脚本建议每 2 秒执行一次,失败 3 次再降权,避免瞬时抖动误判
- 两台机器时间必须同步(chrony/NTP),否则 VRRP 报文可能被丢弃
- HAProxy 配置里后端 server 行不要写 localhost 或 127.0.0.1,要用真实内网 IP,否则从节点接管 VIP 后无法连通后端
- 日志统一收集:HAProxy 记录到 rsyslog 的 local2,Keepalived 输出到 local0,便于排查切换原因
验证与日常巡检项
上线前必须模拟故障验证流程,运行中也要定期确认核心状态是否符合预期。
- 用 ip a 查看 VIP 是否仅在一台机器上出现;用 curl -I http://VIP 确认服务可达
- 手动 kill -9 haproxy 进程,观察 keepalived 日志(/var/log/messages)是否触发 state transition
- 检查 ps aux | grep keepalived 和 systemctl status keepalived,确认主从角色未异常反转
- HAProxy 的 stats 页面(需配置 listen stats)可实时查看后端状态、当前连接数、错误率等
不复杂但容易忽略。配对使用时,HAProxy 是“干活的人”,Keepalived 是“守门的人”,两者配合好了,高可用才算真正落地。










