Keepalived在Apache高可用中通过VRRP协议实现主备故障自动切换,工作在网络层,用虚拟IP(VIP)屏蔽单点故障;通过vrrp_script健康检查联动Apache状态,解耦网络与应用高可用;切换时依赖免费ARP刷新缓存并防脑裂;其VRRP仅支持主备,不直接负载均衡Apache。

Keepalived 在 Apache 高可用架构中,核心是通过 VRRP(Virtual Router Redundancy Protocol)协议实现主备服务器之间的故障自动切换。它不依赖 Apache 自身的集群机制,而是工作在网络层(OSI 第三层),让多台物理服务器“共享”一个虚拟 IP(VIP),对外表现为单一入口,从而屏蔽后端节点的单点故障。
VRRP 是如何让多台服务器“假装”成一台路由器的
VRRP 本质是一种选举协议,把一组运行 Keepalived 的服务器组成一个 VRRP 路由器组(VRID 组),组内选举出一台 Master,其余为 Backup。Master 独占并响应 VIP 的 ARP 请求,同时周期性发送 VRRP 通告报文(组播地址 224.0.0.18);Backup 持续监听这些报文,一旦在超时时间内收不到通告,就触发重新选举,新 Master 立即绑定 VIP 并接管流量。
对客户端而言,始终只访问 VIP,完全感知不到后端哪台机器在提供服务。
Keepalived 如何与 Apache 协同工作
Keepalived 本身不管理 Apache 进程,它通过 vrrp_script + track_script 机制实现健康检查联动:
- 定义一个检测脚本(如检查
curl -s http://127.0.0.1/health是否返回 200) - 将该脚本绑定到 VRRP 实例,并设置权重增减规则(例如:检测失败则本机优先级减 20)
- 当 Apache 崩溃或响应异常,脚本失败 → 权重下降 → 若低于 Backup 的优先级,Master 自动降级,Backup 升为 Master
这种设计解耦了网络高可用(VRRP)和应用高可用(Apache 健康状态),灵活且可靠。
VIP 切换的关键细节:ARP 刷新与脑裂防护
VIP 切换不是简单地 ifconfig up/down,必须确保全网及时更新 ARP 缓存:
- Master 上线时主动发送 免费 ARP(Gratuitous ARP),通知交换机和客户端“VIP 现在映射到我的 MAC”
- Backup 升为 Master 后同样触发免费 ARP,强制下游刷新缓存,避免流量黑洞
- 为防脑裂(双 Master),建议启用 unicast_peer 或配置严格一致的 vrrp_sync_group、密码认证、相同 VRID 和优先级步长
为什么不用 keepalived 直接负载均衡 Apache
Keepalived 的 VRRP 只支持主备(Active-Standby),不支持主主(Active-Active)流量分发。若需多台 Apache 同时处理请求,应在其前端叠加 LVS(DR/TUN 模式)或用 Nginx/Haproxy 做七层负载均衡;Keepalived 此时可用来保障该负载均衡器自身的高可用 —— 这才是它最典型、最稳定的使用方式。










