Apache负载均衡默认不主动检查后端健康状态,必须启用mod_proxy_hcheck模块(2.4.33+)、配置hcmethod、hcuri、hcinterval等主动探测参数,并叠加retry、failonstatus等被动策略,才能实现故障节点自动屏蔽与恢复。

确认版本与启用必要模块
健康检查功能依赖 mod_proxy_hcheck 模块,仅 Apache 2.4.33 及以上版本支持。低于该版本(如 2.4.32)即使写入 hcmethod 等参数也完全无效,且无报错提示。
需确保以下模块已加载:
- mod_proxy
- mod_proxy_balancer
- mod_proxy_hcheck(必须启用:运行 a2enmod proxy_hcheck)
配置主动健康检查参数
在 <Proxy balancer://xxx></Proxy> 块内,为每个 BalancerMember 添加探测规则。推荐使用 HTTP HEAD 方式,轻量且不触发业务逻辑:
- hcmethod=HEAD:发送 HEAD 请求(也可用 GET 或 OPTIONS)
-
hcuri=/health:指向后端真实暴露的健康端点(如 Spring Boot 的
/actuator/health),不能是 Apache 自身路径 - hcinterval=10:每 10 秒探测一次
- hcfail=3:连续 3 次失败标记为 Down
- hcpass=2:连续 2 次成功才恢复为 Up
- hctimeout=3:单次探测超时设为 3 秒(应明显小于后端健康接口实际响应时间)
示例片段:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
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:将这些状态码视为单次请求失败,计入失败计数,加速 Down 判定
- timeout=5:设置代理超时,避免请求长期挂起
- loadfactor=1(可选):配合权重,在节点疑似异常时降低其流量占比
验证与排障关键点
别只看 /balancer-manager 页面的状态显示——它只反映最终结果,不展示探测过程。
开启详细日志定位问题:
- 在 Apache 配置中添加:
LogLevel proxy_hcheck:trace8 - 在
error.log中搜索hcheck关键字,确认是否发出探测、收到什么响应、是否匹配预期状态码或响应体 - 检查后端健康接口是否真实可用(curl -I http://ip:port/health)、是否返回 2xx、是否被防火墙拦截

















