apache通过mod_proxy_balancer实现主备故障转移:主节点设status=ok,备节点设status=+h并配合ping、retry实现自动切换;健康检查确保失效时流量转向热备,恢复后不自动抢回,需人工干预或重载配置。
apache http server 可以通过 mod_proxy_balancer 模块实现主备(active-passive)故障转移,核心思路是让一个后端节点承担全部流量,另一个仅在主节点失效时自动接管——这正对应 active-passive 影子主模式。
启用必要模块并配置基础代理
确保以下模块已加载(通常在 httpd.conf 或 mods-enabled/ 中启用):
mod_proxymod_proxy_httpmod_proxy_balancer-
mod_slotmem_shm(用于共享会话状态,推荐启用)
在虚拟主机或全局配置中添加基本代理设置:
<proxy>
BalancerMember http://192.168.1.10:8080 status=+H
BalancerMember http://192.168.1.20:8080 status=OK
</proxy>
ProxyPass "/" "balancer://mycluster/"
ProxyPassReverse "/" "balancer://mycluster/"
其中:
status=+H 表示该成员为“热备”(hot standby),默认不参与负载,仅当其他成员失效时启用;
status=OK 表示该成员为活跃主节点(Active)。
启用健康检查与自动故障检测
仅靠静态 status 标记不够可靠,需配合周期性健康检查实现真正的自动 fail-over:
- 添加
ping=5参数,让 Apache 每 5 秒向后端发 HEAD 请求探测存活 - 使用
retry=60设置故障节点恢复前的冷却时间(单位:秒) - 完整示例:
BalancerMember http://192.168.1.10:8080 status=+H ping=5 retry=60 BalancerMember http://192.168.1.20:8080 status=OK ping=5 retry=60
当主节点(.20)连续失败,Apache 会将其标记为 DOWN,并自动将流量切至备用节点(.10);待其恢复且超时后,再重新纳入服务(但不会自动抢回主角色,仍保持 Passive 状态)。
⚠️ 已弃用 — 该技能已拆分为两个独立技能,以提升模块化程度:**webchat-https-proxy**(HTTPS/WSS 反向代理)和 **webchat-voi...**
验证与监控入口
启用 mod_status 并开放 balancer-manager:
<location>
SetHandler balancer-manager
Require ip 127.0.0.1 192.168.1.0/24
</location>
访问 http://your-apache/balancer-manager 可实时查看各成员状态(OK、DIS、ERR、PROB)、请求计数和故障原因,便于快速定位 fail-over 是否触发。
关键注意事项
这种主备模式下资源利用率天然受限,符合 Active-Passive 设计本质:
- 备用节点全程空闲,不处理任何正常请求,不消耗业务 CPU/内存
- 无 session 复制机制,切换后用户可能丢失会话(需搭配 sticky session 或外部 session 存储)
- Apache 不提供跨机房自动 DNS 切换或网络层隔离,故障判定仅基于 HTTP 层连通性
- 若需更细粒度控制(如按响应码判定失败),可结合
mod_proxy_hcheck(Apache 2.4.43+)增强探测逻辑
配置得当的话,整个故障转移过程对客户端透明,通常在一次请求超时内完成切换,满足多数 Web 服务的高可用要求。









