apache负载均衡可通过配置实现运行时自动故障转移:启用ping=5探活、failonstatus=500-599判定失败、timeout=12和retry=15控制超时与恢复,并用status=+h标记热备节点;需为balancermember设置route参数,配合/balancer-manager验证状态切换。

Apache 负载均衡本身不提供“全自动、无干预”的故障转移,但通过合理配置健康探测、状态标记与重试逻辑,可实现**运行时自动感知故障、跳过失效节点、转向可用后端**的效果。关键不是等待人工介入,而是让 Apache 在每次请求转发前主动判断并决策。
启用健康检查与失败判定
Apache 默认只做 TCP 连通性检测,对 Java 或 HTTP 服务不够可靠。需显式配置探测行为:
- 用 ping=5:每 5 秒向后端发 HEAD 请求探活,超时即本次跳过(不计入 retry)
- 设 failonstatus=500-599:收到任意 5xx 响应立即触发失效流程,不只是连接断开才处理
- 配 timeout=12:单次请求最长等待 12 秒,超时后自动尝试下一可用节点
- 加 retry=15:节点失败后冷却 15 秒再重新纳入调度——避免刚恢复就遭洪峰冲击
定义可自动切换的后端成员
在 <proxy balancer:></proxy> 中声明后端时,必须包含可被动态识别的状态标识:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 每个
BalancerMember必须带 route=xxx 参数(如route=tomcat1),用于会话粘滞和状态追踪 - 避免使用
loadfactor=0模拟下线——这会永久剔除该节点;应改用status=+H标记为热备节点(仅当所有主节点都 Down 时启用) - 若用 AJP 协议,确保 Tomcat 的
server.xml中<engine></engine>含jvmRoute="tomcat1",使 session ID 自动携带路由标识
验证自动转移是否生效
不依赖猜测,用实际手段确认机制在工作:
- 启用
/balancer-manager管理界面(限内网访问),实时查看各节点状态是 Up、Down 还是 Hot Standby (H) - 手动停掉一个 Tomcat 实例,观察 Apache 是否在几秒内将其标为 Down,并将后续请求分发到其余节点
- 用
curl -I http://your-apache/多次请求,配合后端 access log 查看请求是否已避开故障节点
增强探测能力(可选进阶)
若后端提供 HTTP 健康端点(如 Spring Boot 的 /actuator/health),可搭配 mod_proxy_hcheck 实现更精准判断:
- 要求 Apache ≥2.4.41,启用模块
mod_proxy_hcheck.so - 配置示例:
BalancerMember http://192.168.1.10:8080 route=tomcat1 hcmethod=HTTP hcuri="/actuator/health" hcinterval=3 hcfail=2 hcpass=2 - 当探测返回非 200(如 503)且连续失败 2 次,Apache 自动标记该节点为 Down









