apache负载均衡备用服务器通过balancermember的status=+h实现热备,配合健康检查(ping)、超时(timeout)、重试(retry)等参数自动故障切换,主备节点支持粘性会话与自动恢复。

Apache 负载均衡配置备用服务器,核心是实现“故障自动切换”——当主服务器不可用时,请求自动转到备用节点。这不是靠额外加一台“闲置机器”,而是通过模块内置的容错机制,在 BalancerMember 中明确标记其角色与行为。
启用健康检查与失效转移
默认情况下,Apache 不会主动探测后端是否宕机。必须开启健康检查(health check),否则即使某台服务器已死,请求仍会持续转发过去,导致失败。
- 确保已启用
mod_proxy、mod_proxy_balancer、mod_proxy_http和lbmethod_byrequests(或对应算法模块) - 在
<proxy></proxy>块中为每个后端成员添加状态参数:BalancerMember http://primary.example.com:8080 status=+DBalancerMember http://backup.example.com:8080 status=+H -
status=+D表示该节点为“禁用”(disabled),但可被手动启用;status=+H表示“热备”(hot standby),仅当其他成员全部失效时才参与负载
设置超时与重试策略
光有备用标识还不够,得让 Apache 快速判断主服务器是否真的挂了,并及时切走流量。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
ping=5:每 5 秒向后端发送一次 HEAD 请求探测存活(需后端支持) -
timeout=10:连接超时设为 10 秒,避免长时间等待 -
retry=60:某节点失败后,60 秒内不再尝试,期间所有请求由其他节点或备用节点承接 -
maxattempts=1:单次请求最多尝试 1 次失败节点,立即转向下一个可用成员
完整配置示例(含主备+粘性会话)
以下是一个生产级可用的主备结构配置,放在虚拟主机或 .htaccess(需允许 override)中:
<proxy balancer:>
BalancerMember http://192.168.1.10:8080 route=primary loadfactor=5 ping=5 timeout=10 retry=60 maxattempts=1
BalancerMember http://192.168.1.11:8080 route=backup loadfactor=1 status=+H
ProxySet lbmethod=byrequests
ProxySet stickysession=ROUTEID|JSESSIONID
</proxy><p>ProxyPass / balancer://myapp/
ProxyPassReverse / balancer://myapp/</p><h1>为粘性会话注入路由 Cookie</h1><p>Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/; HttpOnly" env=BALANCER_ROUTE_CHANGED</p>
说明:
– 主节点权重更高(5 vs 1),正常情况下几乎全量承接
– 备节点带 status=+H,平时不收任何请求
– ROUTEID Cookie 确保用户会话始终落在同一台活跃服务器上(包括切换后仍延续原 route)
验证备用机制是否生效
不要只靠访问测试,要模拟真实故障场景:
- 临时停掉主服务器(
systemctl stop tomcat或关网卡) - 用
curl -I http://yourdomain.com连续请求几次,观察响应头中的Server或自定义标识 - 查看 Apache 的
error.log,应出现类似proxy: BALANCER: (balancer://myapp). All workers are in error state,随后切换至 backup 成员 - 恢复主服务器后,它会在
retry时间过后自动重新加入集群(无需重启 Apache)










