apache通过lbset分组+failonstatus+retry实现多后端自动故障转移:lbset=0主集群优先,全失效后降级lbset=1,再失效才启用lbset=2;配合健康检查与503兜底页保障高可用。
apache 本身不内置“故障转移”逻辑,必须依赖 mod_proxy 和 mod_proxy_balancer 搭配分组策略与健康感知机制来实现后端节点自动切换。核心不是主动切流,而是按优先级逐层降级、靠状态识别失效、用重试兜底。
用 lbset 实现层级化自动降级
通过 lbset 参数为后端成员划分优先级组,数值越小优先级越高。Apache 严格按组顺序调度:只有当前组全部不可用时,才启用下一组。
- 主集群设为
lbset=0:如BalancerMember http://10.0.1.10:8080/ lbset=0 retry=15 failonstatus=500,502,503,504 - 同城备用集群设为
lbset=1:如BalancerMember http://10.0.2.10:8080/ lbset=1 retry=30 - 异地灾备集群设为
lbset=2:如BalancerMember http://10.3.1.10:8080/ lbset=2 retry=60
让失效识别更及时准确
仅靠连接超时无法发现“假活”服务(例如线程卡死但 TCP 仍通),必须结合响应内容和重试行为:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
failonstatus=500,502,503,504:后端返回这些网关错误即刻标记为 DOWN -
retry=15:节点失败后 15 秒内不参与调度,避免反复试探 -
maxattempts=2配合lbmethod=byrequests:单次请求最多尝试两个节点,失败即走下一组
启用主动健康检查(推荐)
Apache 2.4.47+ 支持 proxy_hcheck 模块,可周期性发送探针(如 HEAD /health),比被动错误触发更早发现问题:
- 启用模块:
LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so - 为成员添加检查:
BalancerMember http://10.0.1.10:8080/ lbset=0 hcmethod=HEAD hcuri=/health hcfail=3 hcpass=2
全部失效时返回本地兜底页
当所有 lbset 组均无可用成员时,mod_proxy_balancer 默认返回 503。可通过以下方式拦截并返回静态维护页:
- 确保
/maintenance.html存在于DocumentRoot下,且不被代理:ProxyPass /maintenance.html ! - 配置错误文档:
ErrorDocument 503 /maintenance.html - 开启覆盖:
ProxyErrorOverride On










