Apache负载均衡健康检查通过mod_proxy_balancer和mod_proxy_hcheck实现主动探测,配置hcmethod、hcuri等参数可自动隔离异常节点,支持主被动双机制及手动干预。

Apache 的负载均衡健康检查机制,核心是通过 mod_proxy_balancer 和 mod_proxy_hcheck(Apache 2.4.33+)实现主动探测后端节点状态,并自动隔离异常服务器,避免请求转发失败。
启用健康检查模块与基础配置
确保已加载必要模块:
LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_balancer_module modules/mod_proxy_balancer.so-
LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so(仅 Apache ≥2.4.33)
在 <Proxy balancer://mycluster> 中定义后端时,使用 hcmethod、hcuri、hcinterval 等参数开启主动健康检查:
<Proxy balancer://mycluster>
BalancerMember http://192.168.1.10:8080 route=server1 hcmethod=HTTP hcuri=/health hcinterval=10 hcfail=3 hcpass=2
BalancerMember http://192.168.1.11:8080 route=server2 hcmethod=HTTP hcuri=/health hcinterval=10 hcfail=3 hcpass=2
</Proxy>
其中:hcmethod=HTTP 表示发送 HTTP 请求探测;hcuri=/health 是后端需暴露的健康端点(返回 2xx 即视为健康);hcinterval=10 每 10 秒检查一次;hcfail=3 连续 3 次失败则标记为 down;hcpass=2 连续 2 次成功才恢复为 up。
故障隔离行为与状态管理
当某节点被健康检查标记为 down 后,Apache 会自动将其从可用成员中剔除,新请求不再路由过去。该节点仍保留在 balancer 列表中,但状态显示为 Down,可通过 /balancer-manager 页面实时查看。
- 隔离是临时的,不重启服务,恢复依赖后续健康检查结果
- 若所有后端均 down,Apache 默认返回 503 Service Unavailable(可配合
failonstatus或自定义错误页优化用户体验) - 支持手动干预:在 balancer-manager 页面点击“Mark as Up”或“Mark as Down”,也可通过
proxy-status查看详细响应时间与失败计数
补充策略:被动健康检查与容错增强
除主动探测外,Apache 还支持被动健康检查(基于实际请求失败反馈):
-
retry=60:节点失败后,60 秒内不尝试转发请求(单位为秒) -
failonstatus=500,502,503,504:若后端返回这些状态码,视为单次请求失败,计入失败计数(触发retry或最终 down) -
loadfactor=1可结合使用,动态调整权重,降低问题节点流量占比
建议同时启用主被动两种机制:主动检查快速发现宕机,被动检查捕获偶发超时或应用级错误。
验证与调试要点
健康检查是否生效,不能只看配置语法正确,关键看实际行为:
- 确认后端
/health接口可被 Apache 进程访问(注意防火墙、SELinux、反向代理链路) - 查看 Apache error_log,搜索
health check或对应后端 IP,确认探测日志(如Health check on ... succeeded/failed) - 模拟后端宕机(如停掉服务),观察 balancer-manager 页面状态是否在
hcinterval×hcfail时间内变为 Down - 注意时间单位:
hcinterval、retry均为秒,不是毫秒;timeout(连接超时)默认 300 秒,可单独设为更短值防阻塞










