Apache通过lbset参数实现主备分层调度:lbset=0为主层,全部失效后才启用lbset=1备层;需配合mod_proxy_hcheck健康检查、retry、timeout等参数确保自动故障转移与可靠性。

Apache 本身不直接提供“主备切换”功能,但通过 mod_proxy_balancer 搭配 lbset 参数和健康检查,可实现后端服务的冗余备份与自动故障转移。核心不是靠 Apache 多活,而是让它智能识别哪些后端可用、按优先级调度。
配置带主备层级的后端集群
使用 lbset 明确划分主层(lbset=0)和备层(lbset=1),Apache 默认只在主层内轮询;只有主层全部失效时,才启用备层。
- 确保已启用模块:
mod_proxy、mod_proxy_http、mod_proxy_balancer、mod_lbmethod_byrequests、mod_proxy_hcheck(推荐 2.4.43+) - 定义均衡器,例如两台主服务 + 一台热备:
BalancerMember http://192.168.10.20:8080 lbset=0 hcmethod=GET hcuri=/health hcinterval=10
BalancerMember http://192.168.10.21:8080 lbset=0 hcmethod=GET hcuri=/health hcinterval=10
BalancerMember http://192.168.10.22:8080 lbset=1 hcmethod=GET hcuri=/health hcinterval=10
</Proxy>
ProxyPass / balancer://app/
ProxyPassReverse / balancer://app/
其中 hcmethod 和 hcuri 启用主动健康探测,hcinterval=10 表示每 10 秒检查一次。失败后节点自动标记为 down,不参与调度。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
关键参数说明与调优建议
单靠 lbset 不足以应对真实故障,需配合以下参数提升可靠性:
-
retry=60:节点被标记为 down 后,60 秒内不再尝试连接,避免雪崩 -
timeout=5:代理连接或等待响应超时设为 5 秒,防止请求卡死 -
failonstatus=500-599:HTTP 状态码落在该范围时,立即视为失败并触发重试或降级 - 避免使用
nofailover=On—— 它会禁用整个 failover 逻辑,与冗余目标相悖
后端一致性与状态管理
冗余生效的前提是所有后端行为一致,否则用户可能因切换节点而丢失上下文:
- 代码版本、运行环境(PHP/Tomcat 版本)、配置必须完全同步
- 禁止共享 NFS 存储 session 文件;改用 Redis 或数据库集中管理会话
- 静态资源建议托管到对象存储(如 S3)或 CDN,Apache 仅作反向代理,不承担文件分发压力
验证与日常维护要点
上线前务必验证健康检查是否真正生效,不能只依赖配置语法正确:
- 手动访问
/balancer-manager(需授权)查看各节点状态和最近探测结果 - 临时停掉一台主服务,确认流量是否平稳切到另一台主节点;再停掉全部主节点,观察是否升至备层
- 定期备份
/etc/apache2/(Debian/Ubuntu)或/etc/httpd/(RHEL/CentOS),含所有sites-enabled和conf.d配置

















