Apache需主动配置健康检查才能实现故障自动转移:启用status=+H被动检查、failonstatus指定错误码、retry设置恢复时间、ping添加主动探测,并通过/balancer-manager实时验证状态变化。
apache 本身不自动感知后端宕机并立即转移请求,必须靠健康检查机制主动探测+合理调度策略才能实现故障时的平滑转移。默认配置下,一个后端节点挂了,apache 可能仍持续向它转发请求,直到超时失败,造成用户看到 502/503/504,而不是立刻切到备用节点。
启用并正确配置被动健康检查(status=+H)
这是最基础也最关键的一步。仅开启 mod_proxy_balancer 不够,必须显式启用基于响应状态码的故障判定:
- 在每个 BalancerMember 后添加 status=+H,表示启用被动健康检查
- 搭配 failonstatus 精确指定哪些 HTTP 状态码应触发故障标记(如 500,502,503,504),避免把 401/403 这类业务正常响应误判为故障
- 确保后端服务在真正不可用时(如进程退出、连接拒绝)返回上述状态码,而非长时间无响应或直接断连
设置 retry 参数让节点可恢复、可重试
节点一旦被标记为 down,默认不会自动恢复。retry 决定了它多久后重新参与探测:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 在 ProxySet 中设置 retry=30(单位秒),表示 30 秒后尝试再次发请求探测该节点
- 若探测返回非 failonstatus 的状态码(如 200),该节点会自动恢复为 up 状态,并重新纳入负载池
- 切忌设为 retry=0 或不写——这会导致节点 permanently down,无法自动恢复
补充主动探测(ping)提升故障发现速度
被动检查依赖真实请求触发,首次故障可能已有用户请求打到坏节点。加一层主动探测可提前暴露问题:
- 在 BalancerMember 中增加 ping=5,表示每 5 秒对后端发起一次 HEAD 请求
- 目标路径建议是轻量、高可靠的心跳接口(如 /ping),避免用 /health 这类可能偶发超时的路径
- 确保该路径稳定返回 2xx,否则 ping 会持续失败,等同于一直标记为 down
验证与观察是否生效
别只靠日志猜,直接看运行时状态:
- 启用 mod_status 并开放 /balancer-manager(需授权),实时查看各成员的 Status 列(up/down)、Elected 次数、Load 值
- 手动停掉主节点,观察几秒内其状态是否变红(down),且流量是否明显转向备用节点
- 再启动主节点,确认 30 秒左右其状态恢复为 up,Elected 计数开始上升

















