Linux服务器高可用教程_HAProxyKeepalived实战案例

15次阅读

HAproxy+Keepalived是linux下成熟轻量的高可用方案,核心在于配置清晰、故障响应快、切换无感知;HAProxy通过global/defaults/frontend/backend四段实现七层流量分发,Keepalived通过VRRP协议实现VIP主备漂移,需注意防火墙、SELinux、mcast_src_ip及日志配置等细节。

Linux服务器高可用教程_HAProxyKeepalived实战案例

用 HAProxy 做七层负载均衡,再配 Keepalived 实现主备自动切换,是 Linux 环境下最成熟、最轻量的高可用方案之一。核心不在于组件多高级,而在于配置逻辑清晰、故障响应快、切换无感知。

HAProxy 配置要点:聚焦业务流量分发

HAProxy 负责把用户请求按规则转发给后端真实服务器(如 Web 服务)。关键不是参数,而是理清四块结构:

  • global:设日志地址(如 log 127.0.0.1 local3 info)、最大连接数(maxconn 4096)、运行用户(user haproxy)和后台模式(daemon
  • defaults:定义通用行为,比如健康检查失败次数(retries 3)、超时时间(timeout connect 5000mstimeout client 60s)、重试转发(option redispatch
  • frontend:监听入口,如 bind *:80,配合 ACL 实现基于域名或路径的路由(例:acl bbs hdr_dom(host) -i bbs.example.comuse_backend bbs_pool if bbs
  • backend:定义真实服务器池,启用健康检查(check inter 2000 rise 2 fall 3),支持轮询(balance roundrobin)或最小连接(leastconn)等算法

Keepalived 配置要点:确保 VIP 可靠漂移

Keepalived 通过 VRRP 协议让两台 HAProxy 服务器共享一个虚拟 IP(VIP),主节点挂了,VIP 自动切到备节点。重点看三处:

  • router_id:每台机器必须唯一,如 LVS_MASTERLVS_BACKUP
  • vrrp_instance:主节点设 state MASTER、高优先级(如 priority 100);备节点设 state BACKUP、低优先级(如 priority 90);禁用抢占(nopreempt)可避免频繁来回切
  • virtual_ipaddress:写明 VIP,如 192.168.2.62/24 dev eth0;确保该网段能被客户端直连(云环境需额外申请弹性 IP 或开启辅助 IP 权限)

协同工作与验证方式

HAProxy 和 Keepalived 不是简单装上就跑通,必须确认它们真正联动:

  • 两台服务器都启动 HAProxy(systemctl start haproxy),再启动 Keepalived(systemctl start keepalived
  • 在主节点执行 ip addr show eth0,应看到 VIP;在备节点不应出现;手动停主节点的 Keepalived,VIP 应 2 秒内出现在备节点
  • 浏览器curl http://[VIP] 访问,反复刷新,观察后端服务器响应内容是否轮换(如返回 web1/web2);同时访问 http://[VIP]/haproxy?stats 查看实时状态页(需配 stats auth
  • 模拟后端宕机:停掉一台 Web 服务,HAProxy 日志应报 Server xxx is DOWN,流量自动切到剩余节点,不影响用户访问

常见踩坑提醒

实际部署中,这几个细节最容易导致“看着配对了,但就是不生效”:

  • 防火墙没关或没放行 VRRP 组播(协议号 112)和 HAProxy 端口(如 80、1080),centos 7+ 默认用 firewalld,执行 firewall-cmd --permanent --add-port=80/tcp 并重载
  • SELinux 开启状态下,HAProxy 无法绑定非标准端口或访问网络,临时关闭验证:setenforce 0;长期方案是调整策略或设为 permissive
  • Keepalived 的 mcast_src_ip 必须填本机真实 IP(非 127.0.0.1),否则 VRRP 报文发不出去;两节点的 virtual_router_id 必须一致(如都为 51)
  • HAProxy 日志默认不输出到文件,需在 rsyslog 中显式配置 local3.* /var/log/haproxy.log 并重启 rsyslog 服务
text=ZqhQzanResources