Apache负载均衡需显式启用mod_proxy_hcheck模块(仅2.4.33+支持),配置hcmethod、hcuri、hcinterval等主动探测参数,并叠加retry、failonstatus等被动策略,才能实现故障节点自动屏蔽与恢复。

Apache 负载均衡本身不主动检查后端健康状态,必须显式配置才能实现故障节点自动屏蔽。关键在于启用主动探测模块、正确设置检查参数,并配合被动容错策略——否则节点宕机后仍会持续转发请求,直到首次失败才临时跳过,且无法自动恢复。
确认版本与启用必要模块
健康检查功能依赖 mod_proxy_hcheck 模块,仅 Apache 2.4.33 及以上版本支持。低于该版本(如 2.4.32)即使写入 hcmethod 等参数也完全无效,日志无报错但不执行探测。
- 确保以下模块已启用:
mod_proxy、mod_proxy_balancer、mod_proxy_hcheck - Debian/Ubuntu 系统运行:
a2enmod proxy_hcheck;CentOS/RHEL 手动在 httpd.conf 中添加LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so - 重启 Apache 后,用
httpd -M | grep hcheck或apache2ctl -M | grep hcheck验证是否加载成功
配置主动健康检查参数
在 <Proxy balancer://xxx></Proxy> 块内为每个 BalancerMember 添加探测规则。推荐使用 HEAD 方法避免触发业务逻辑,且需后端真实提供健康端点(如 Spring Boot 的 /actuator/health)。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- hcmethod=HEAD:发起轻量 HTTP HEAD 请求(比 GET 更安全)
- hcuri=/health:指向后端暴露的健康接口路径(不能是 Apache 自身路径)
- hcinterval=10:每 10 秒探测一次
- hcfail=3:连续 3 次失败标记为 Down
- hcpass=2:连续 2 次成功才恢复为 Up
- hctimeout=3:单次探测超时设为 3 秒(应略小于后端健康接口实际响应时间)
示例:
<Proxy balancer://backend_cluster>BalancerMember http://192.168.1.10:8080 hcmethod=HEAD hcuri=/health hcinterval=10 hcfail=3 hcpass=2 hctimeout=3
BalancerMember http://192.168.1.11:8080 hcmethod=HEAD hcuri=/health hcinterval=10 hcfail=3 hcpass=2 hctimeout=3
</Proxy>
叠加被动检查与容错策略
主动探测无法覆盖连接建立但响应卡死、慢响应等场景,必须补充基于真实请求反馈的被动机制:
- retry=60:节点被标记 Down 后,60 秒内不调度新请求(注意:这不是“定时重试”,而是冷却期;设为 0 则永久隔离)
- failonstatus=500,502,503,504:将这些状态码视为单次失败,计入失败计数(可加速异常识别)
- timeout=5:设置代理超时,避免请求长期挂起
- loadfactor=1(可选):结合权重,在疑似异常时自然降低流量占比
验证与排障要点
别只看 /balancer-manager 页面显示的状态——它只反映最终结果,不展示探测过程。
- 开启详细日志:
LogLevel proxy_hcheck:trace8,在 error.log 中搜索hcheck关键字,确认是否发出探测、收到什么响应、是否被判定为失败 - 手动 curl 测试后端健康端点,确认返回 2xx 且响应时间稳定(建议 ≤2s)
- 检查防火墙或 SELinux 是否拦截了 Apache 主进程对后端的出站探测请求
- 若所有后端均 Down,Apache 默认返回 503;可通过
ErrorDocument 503自定义提示页

















