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

Apache 负载均衡本身不自动检查后端健康状态,必须显式配置才能实现故障节点自动屏蔽。关键在于启用主动探测模块、正确设置检查参数,并配合被动容错策略——否则节点宕机后仍会持续转发请求,直到首次失败才临时跳过,且无法自动恢复。
启用必要模块并确认版本支持
健康检查功能依赖 mod_proxy_hcheck 模块,仅 Apache 2.4.33 及以上版本支持。需确保以下模块已加载:
mod_proxymod_proxy_balancer-
mod_proxy_hcheck(必须启用,a2enmod proxy_hcheck)
旧版本(如 2.4.32 及以下)即使配置了 hcmethod 参数也会被忽略,日志中无报错但实际不生效。
配置主动健康检查参数
在 <proxy balancer:></proxy> 块内为每个后端成员添加探测规则:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
hcmethod=HTTP:使用 HTTP 请求探测(推荐 HEAD,避免触发业务逻辑) -
hcuri=/health:指向后端真实暴露的健康端点(如 Spring Boot 的/actuator/health),不能是 Apache 自身路径 -
hcinterval=10:每 10 秒探测一次 -
hcfail=3:连续 3 次失败标记为 Down -
hcpass=2:连续 2 次成功才恢复为 Up -
hctimeout=3:单次探测超时设为 3 秒(应小于后端健康接口实际响应时间)
示例配置片段:
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
补充被动检查与容错策略
主动检查无法覆盖所有异常场景(如连接建立但响应卡死),需叠加被动机制:
-
retry=60:节点被标记 Down 后,60 秒内不尝试调度(防止雪崩) -
failonstatus=500,502,503,504:将这些状态码视为单次请求失败,计入失败计数 -
loadfactor=1:结合权重,在疑似异常时降低其流量占比(可选)
注意:retry 不是“定时重试”,而是冷却期;若设为 0,则节点永久隔离,必须手动干预。
验证与排障要点
别只依赖 /balancer-manager 页面显示的状态——它只反映最终结果,不展示探测过程。
- 开启详细日志:
LogLevel proxy_hcheck:trace8,在 error.log 中搜索hcheck关键字,确认是否发出了探测、收到什么响应、为何判定失败 - 后端健康端点必须返回明确的 2xx 状态码;若默认只认 2xx/3xx,而你的服务返回 204 或 200+JSON,需用
ProxyHCExpr自定义判断逻辑 - 所有后端均 Down 时,Apache 默认返回 503,建议配置自定义错误页或
failonstatus增强用户体验









