Apache本身不构成高可用集群,而是通过后端冗余、主动健康探测、故障自动摘除和热备兜底四层协同实现高可用;需启用mod_proxy、mod_proxy_http、mod_proxy_balancer、mod_lbmethod_*及mod_slotmem_shm等模块,配置带failonstatus、hcmethod、hcuri的BalancerMember,并启用/balancer-manager监控。

Apache 本身不直接构成“高可用集群”,而是作为负载均衡器,为后端应用服务提供高可用能力。真正实现高可用,靠的是 后端节点冗余 + Apache 主动健康探测 + 故障自动摘除 + 热备节点兜底 这四层协同。配置核心不在堆机器,而在让 Apache “看得清、判得准、切得稳”。
启用必要模块并确认版本兼容性
Apache 2.4+ 是前提(2.2 已停止维护)。必须加载以下模块:
- mod_proxy.so(代理基础)
- mod_proxy_http.so 或 mod_proxy_ajp.so(协议支持)
- mod_proxy_balancer.so(负载均衡逻辑)
- mod_lbmethod_byrequests.so 或 mod_lbmethod_bytraffic.so(调度算法)
- mod_slotmem_shm.so(共享内存,2.4+ 必需,否则 balancer-manager 不工作)
验证命令:httpd -M | grep -E 'proxy|lbmethod|slotmem'。缺失项需在 httpd.conf 中用 LoadModule 显式加载。
定义带健康检查的后端集群
在 <VirtualHost> 内配置,避免全局污染。示例:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<Proxy balancer://api>
BalancerMember http://192.168.1.10:8080 loadfactor=3 \
failonstatus=503 hcmethod=GET hcuri="/health" timeout=5 retry=60
BalancerMember http://192.168.1.11:8080 loadfactor=2 \
failonstatus=503 hcmethod=GET hcuri="/health" timeout=5 retry=60
BalancerMember http://192.168.1.12:8080 status=+H
ProxySet lbmethod=bytraffic
</Proxy>
ProxyPass /api/ balancer://api/
ProxyPassReverse /api/ balancer://api/
关键说明:
-
failonstatus=503:后端返回 503 即标记为故障,比单纯连接超时更精准 -
hcmethod=GET hcuri="/health":每retry秒(默认 60)发起一次健康探针,要求后端提供轻量接口 -
status=+H:第三台是热备节点,平时不收流量,仅当前两台全部失效时才启用 -
timeout=5:等待后端响应上限为 5 秒,避免请求长时间挂起
启用管理界面实时监控状态
仅限内网调试环境使用:
<Location "/balancer-manager"> SetHandler balancer-manager Require ip 192.168.1.0/24 </Location>
重启 Apache 后访问 http://your-apache/balancer-manager,可直观看到各节点状态(Up/Down/Hot Standby)、当前连接数、失败次数。热备节点显示为 Hot Standby (H),状态为 Stopped 属于正常。
配合后端做好会话与状态一致性
Apache 不解决会话粘滞(sticky session)以外的状态问题:
- 若需会话保持,后端应用应返回
JSESSIONID或自定义 Cookie,并在BalancerMember行加route=node1,再配ProxySet stickysession=ROUTEID - 业务状态(如购物车、订单)不能只存在单个后端内存中,必须落库或存入 Redis 等共享存储
- 若用 AJP 协议,确保 Tomcat 的
server.xml中<Engine>配置了jvmRoute,便于 route 匹配

















