HAProxy 生产环境如何配合 Keepalived 实现高可用漂移?
核心结论:通过 Keepalived 的 VRRP 协议实现 VIP 漂移,当主节点 HAProxy 故障时,备节点可在 1 秒内(advert_int 设置为 1)接管虚拟 IP 192.168.0.133,确保服务连续性。
原因分析
Keepalived 工作在 OSI 模型中的四层传输层,通过 VRRP(虚拟路由冗余协议)解决静态路由单点故障问题。Keepalived 同时运行于主服务器 (Master) 和备服务器 (Backup) 之上,主服务器周期性发送广播至备服务器,如果在配置的同步超时时间内主服务器节点未能发出广播,Keepalived 将启动高可用切换机制选出新的主服务器。HAProxy 作为七层负载均衡器,特别适用于负载压力大的 web 站点,支持数以万计的并发连接,但单一节点存在宕机风险,因此需要 Keepalived 提供高可用保障。
Keepalived 配置文件关键参数
在/etc/keepalived/keepalived.conf 中配置以下核心参数:
global_defs { router_id LVS_DEVEL_shuishui }
vrrp_script chk_haproxy { script "killall -0 haproxy" interval 1 weight 2 }
vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 88 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 172.16.7.88/16 dev eth0 } }
其中 priority 主节点设为 100,备节点设为 99;virtual_router_id 设为 88;advert_int 设为 1 秒;weight 设为 2 表示 HAProxy 上线时权重加 2,下线时权重减 2。
HAProxy 配置文件关键参数
在/etc/haproxy/haproxy.cfg 中配置:
global log 127.0.0.1 local0 maxconn 65535 chroot /usr/local/haproxy uid 99 gid 99 daemon nbproc 8
defaults mode http option httplog option httpclose retries 2 maxconn 65535 contimeout 5000 clitimeout 50000 srvtimeout 50000
listen chinaapp.sinaapp.com bind *:80 balance source server web1 192.168.0.134:80 weight 5 check inter 2000 rise 2 fall 3 server web2 192.168.0.135:80 weight 5 check inter 2000 rise 2 fall 3
HAProxy 版本 1.4.21 及以上支持上述配置,maxconn 设置为 65535 可支持高并发场景。
双主模式与主备模式对比
主备模式:一台 HAProxy 为 MASTER(priority 100),另一台为 BACKUP(priority 99),正常时只有 MASTER 承载流量。适用场景:对数据一致性要求高、不希望出现双写冲突的场景。
双主模式:两台 HAProxy 都配置为 MASTER,但使用不同的 virtual_router_id(如实例 1 的 VRID 为 88,实例 2 的 VRID 为 89),各自管理不同的 VIP。适用场景:需要充分利用两台服务器性能、可接受部分流量切换的场景。
注意事项
1. 启动 HAProxy 时可能出现警告:[WARNING] 217/202150 (2857) : Proxy 'chinaapp.sinaapp.com': in multi-process mode,这是多进程模式的正常提示,不影响功能。
2. 防火墙策略需提前关闭或放行 VRRP 协议(协议号 112),否则 Keepalived 无法正常工作。执行service iptables stop和chkconfig iptables off。
3. SELinux 需设置为 disabled,执行sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config后重启服务器。
4. 健康检查间隔 inter 设置为 2000 毫秒,rise 设为 2 表示连续 2 次检查成功才标记为可用,fall 设为 3 表示连续 3 次检查失败才标记为不可用,避免网络波动导致误判。
5. Keepalived 版本 1.2.1 及以上支持上述配置,生产环境建议使用 1.3.5 以上版本以获得更好的稳定性。
参考来源
来源:51CTO 博客 - haproxy+keepalived 实现负载均衡及高可用(2017 年 11 月 15 日)
来源:阿里云开发者社区 - 企业实战 (22) 基于 Haproxy 负载均衡+Keepalived 高可用集群实战详解(2023 年 10 月 20 日)
来源:CSDN 技术社区 - HAProxy+Keepalived 高可用负载均衡配置(2017 年 11 月 15 日)
来源:知乎专栏 - Keepalived+HAProxy 搭建高可用负载均衡(2023 年 11 月 9 日)