Apache 在异地多活中仅作为各地域入口层的本地负载均衡器,不跨地域转发,需配合 GSLB/DNS 实现全局流量调度,并依赖后端服务的跨地域高可用设计。

Apache 本身不直接实现“异地多活”架构,它只是一个反向代理和负载均衡器,负责将请求分发到后端服务节点。真正的异地多活,依赖的是上层业务系统、数据库、缓存、元数据服务等组件的跨地域部署与协同能力。Apache 在其中的角色是:在**每个地域入口层**做本地流量分发,并配合全局调度(如 GSLB 或 DNS)完成跨地域流量引导。
Apache 在异地多活中的定位
它不是异地多活的“大脑”,而是各地域的“本地守门人”。比如:
- 华东机房的 Apache 实例,只代理本机房内的一组应用节点(如 192.168.10.10–12),不跨地域转发
- 华南机房另有独立的 Apache 集群,同样只管本地后端
- 用户请求先由 DNS 或 GSLB 根据地理位置/健康状态,解析到最近或最健康的地域入口(如 shanghai.example.com 或 guangzhou.example.com),再由该地域的 Apache 完成最终负载均衡
在各地域 Apache 中配置本地负载均衡
确保以下模块已启用(检查 httpd -M | grep -E 'proxy|balancer|slotmem'):
- mod_proxy、mod_proxy_http:基础代理能力
- mod_proxy_balancer、mod_lbmethod_byrequests(或 bytraffic):集群调度支持
- mod_slotmem_shm:必需,用于共享内存管理,否则健康检查和状态页不可用
在每个地域的 <VirtualHost> 中定义独立 balancer 集群,例如华东机房:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<VirtualHost *:443>
ServerName api.shanghai.example.com
SSLEngine on
# ... SSL 配置省略
<pre class='brush:php;toolbar:false;'><Proxy "balancer://sh-api">
BalancerMember https://10.0.1.10:8443 loadfactor=5 retry=30
BalancerMember https://10.0.1.11:8443 loadfactor=5 retry=30
ProxySet lbmethod=byrequests
ProxySet timeout=8
</Proxy>
ProxyPass "/api/" "balancer://sh-api/"
ProxyPassReverse "/api/" "balancer://sh-api/"</VirtualHost>
注意:所有后端地址必须是本地域内可直连的 IP 和端口,不能指向华南或北京的机器——跨地域通信应由更上层(如 GSLB)控制,而非 Apache 代理层。
启用健康检查,保障本地节点可用性
每个地域的 Apache 需主动探测本地后端是否存活,避免把流量打到宕机节点:
- 后端服务需提供轻量健康接口,如
GET /health返回 200 - 在
BalancerMember行添加探测参数:BalancerMember https://10.0.1.10:8443 loadfactor=5 failonstatus=500,502,503 hcmethod=GET hcuri="/health" interval=10 timeout=3 -
failonstatus指定哪些 HTTP 状态码触发摘除;interval是探测间隔(秒);timeout是单次探测超时
配合全局调度实现真正异地多活
Apache 只管“最后一公里”,跨地域决策需外部系统支持:
-
DNS 轮询 + TTL 缩短:为
api.example.com配置多个 A 记录(对应各地域 VIP),客户端解析后就近访问;TTL 设为 60 秒便于故障时快速切换 - GSLB(全局服务器负载均衡)设备:如 F5 GTM、华为 USG、云厂商的云解析 DNS(支持权重、延迟、健康检查),实时判断各地域可用性并返回最优 IP
-
客户端 SDK 智能路由:App 或前端通过 API 获取当前推荐地域(如调用
/region/preference),后续请求直连对应地域域名

















