apache 不支持跨集群故障转移,但可通过 mod_proxy_balancer 的权重、状态标记与健康探测模拟切换:用 balancermember 分组并设不同权重/状态,结合 balancer-manager 动态调整、健康端点探测(ping/failonstatus)及渐进式回切,实现故障转移预演。

Apache 本身不提供跨集群(cross-cluster)级别的故障转移能力,它不具备跨物理集群或跨地域集群的自动调度、状态同步与决策能力。但你可以通过 组合 mod_proxy_balancer 的权重操控、状态标记与健康探测机制,在单个 Apache 负载均衡器前端,模拟跨集群的流量切换行为——这正是“故障转移预演”的核心:不是真实迁移集群,而是验证流量能否按预期从一个后端集群快速、安全地切到另一个集群。
用 BalancerMember 分组模拟逻辑集群
将不同物理集群的节点归入同一 balancer 组,但用命名和权重做逻辑隔离:
- 为北京集群节点统一加前缀或注释,例如:
BalancerMember http://bj-app1:8080 loadfactor=5 status=+H - 为上海集群节点单独配置,初始权重设为 0 或低值:
BalancerMember http://sh-app1:8080 loadfactor=0 status=+D - 通过
ProxySet lbmethod=byrequests确保请求级可切换,避免 stuck on dead cluster
用权重归零 + status 标记触发“集群级下线”
预演时,不是逐台关节点,而是批量模拟整个集群失效:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 运行时调用 balancer-manager 接口,一次性将北京集群所有成员 weight 设为 0:
curl -X POST "http://lb/balancer-manager?b=myapp&w=http://bj-app1&dw=0"(对每个 bj- 节点重复) - 或直接修改配置中 status 为
status=DH(强制下线 + 健康检查),让 Apache 不再发流量,但仍持续探测其恢复可能 - 观察 /balancer-manager 页面:bj- 节点显示 W(0) 且 Current=0,sh- 节点请求数迅速上升,即切换生效
配合 ping 和 failonstatus 验证自动探测能力
仅手动降权不够,要验证 Apache 是否能基于响应自动识别集群整体异常:
- 为每个集群配置统一健康端点,如
ping=10,HEAD,/health?cluster=bj,并设置ping_timeout=3 - 在 BalancerMember 中启用
failonstatus=503(集群网关返回维护态)、timeout=8、retry=20 - 当北京集群全部返回 503 或超时,Apache 会自动将该集群所有节点标记为失败,并在 retry 期内跳过,流量自然流向上海集群
预演收尾:流量回切与渐进恢复
演练结束不能直接全量切回,避免压垮刚恢复的集群:
- 先将上海集群权重逐步调低(如 5→3→1),同时给北京集群恢复权重(0→1→3→5)
- 用
maxattempts=2和nofailover=Off确保单次请求最多试两个集群,防止雪崩 - 全部切回后,检查日志中是否有
proxy_balancer: worker http://bj-app1:8080 recovered类提示,确认自动恢复逻辑生效









