apache本身不执行故障自动切换,其热备依赖外部组件:一用mod_proxy_balancer配置status=+h实现http层热备;二用keepalived基于vrrp协议通过健康检查实现vip漂移。

Apache 本身不执行“故障自动切换”,它不是集群管理器,而是被代理的后端服务或轻量级反向代理节点。所谓“备用节点自动切换”,实际依赖外部高可用组件(如 Keepalived、HAProxy)或 Apache 自身的 mod_proxy_balancer 健康探测机制来实现——二者路径不同,适用场景也不同。下面分两种主流方式说明:
一、用 mod_proxy_balancer 实现热备节点(Apache 兼任 LB)
适用于小规模、HTTP 层负载均衡,无需额外软件。
-
确保启用必要模块:
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
-
配置带 Hot Standby 的后端组:
<proxy balancer:> BalancerMember http://192.168.1.10:8080 loadfactor=10 ping=3 timeout=5 BalancerMember http://192.168.1.11:8080 loadfactor=10 ping=3 timeout=5 BalancerMember http://192.168.1.12:8080 status=+H ping=3 timeout=5 </proxy> ProxyPass / balancer://myapp/ ProxyPassReverse / balancer://myapp/ -
关键点:
-
status=+H表示该节点仅在其余所有成员全部失败时才启用 -
ping=3让 Apache 每 3 秒发一次 HEAD 请求探测存活 -
timeout=5控制连接和响应超时,避免卡住请求 - 不设
loadfactor给热备节点,也不设为 0 ——+H已隐含零流量语义
-
验证方式:
启用/balancer-manager(仅限内网),访问后可见热备节点状态为 Hot Standby (H),且初始为 Stopped;主节点全部不可达后,状态自动变为 Up 并开始承接请求。
二、用 Keepalived 实现 VIP 漂移(Apache 作为后端服务)
适用于要求强一致性和秒级切换的生产环境,Apache 只需提供健康接口。
-
在每台 Apache 服务器上部署轻量健康端点:
echo "OK" > /var/www/html/health chmod 644 /var/www/html/health
确保
curl -f http://127.0.0.1/health返回 HTTP 200。 -
Keepalived 配置中加入自定义检查脚本(例如
/etc/keepalived/check_apache.sh):#!/bin/bash if systemctl is-active --quiet apache2 && curl -f http://127.0.0.1/health > /dev/null 2>&1; then exit 0 else exit 1 fi赋予可执行权限,并在
keepalived.conf中引用:vrrp_script chk_http { script "/etc/keepalived/check_apache.sh" interval 2 fall 2 rise 2 } 主备节点通过 VRRP 协议竞争 VIP,当主节点上的 Apache 崩溃或健康检查失败,Keepalived 自动降权并释放 VIP,备机升为 Master 并接管流量。
-
注意事项:
- 关闭防火墙对 VRRP 协议(IP 协议号 112)的拦截
- 设置
arp_ignore和arp_announce防止 ARP 冲突 - 双节点必须配置仲裁或非抢占模式(
nopreempt),避免脑裂
不复杂但容易忽略。选哪种方式,取决于你当前架构角色:Apache 是代理层还是纯后端?前者用 status=+H,后者配 Keepalived 更稳妥。











