apache可通过mod_proxy_balancer等模块构建高可用集群,核心在于与后端集群、会话同步及健康检查协同:启用proxy、proxy_http、proxy_balancer等模块,配置balancermember定义后端节点并设置loadfactor、retry、stickysession和lbmethod,结合ping探测、failonstatus状态码判断及/balancer-manager状态页实现故障感知与人工干预,再通过keepalived vip漂移或dns轮询保障apache自身高可用。

Apache 本身不是天生的高可用负载均衡器,但它可以作为反向代理层构建高可用集群——关键不在于 Apache 单点多强,而在于它如何与后端服务、健康检查、故障转移机制协同工作。真正实现“高可用”,需要 Apache + 后端集群 + 状态同步 + 故障感知四者配合。
一、核心思路:用 Apache 做智能反向代理,而非单点调度器
Apache 不适合直接做“会话保持+动态权重+实时健康探测”的全功能 LB(那是 Nginx Plus 或 HAProxy 的强项),但通过 mod_proxy_balancer + mod_proxy_http + mod_proxy_ajp 组合,完全可以支撑生产级高可用集群。重点是:
- 所有后端节点必须无状态或共享会话存储(如 Redis、数据库)
- 启用
stickysession时,必须配合应用层的 session 复制或集中式 session 管理 - Apache 自身需部署至少两个实例,并由外部 VIP 或 DNS 轮询/Keepalived 保障其前端高可用
二、基础配置:启用模块并定义后端集群
确保 Apache 已加载必要模块(CentOS/RHEL 下常用路径:/etc/httpd/conf.modules.d/00-proxy.conf):
proxy_moduleproxy_http_moduleproxy_balancer_module-
proxy_ajp_module(如对接 Tomcat) -
status_module(可选,用于查看 balancer 状态页)
在虚拟主机或主配置中添加集群定义:
<proxy balancer:>
BalancerMember http://192.168.1.10:8080 route=node1 loadfactor=3 retry=60
BalancerMember http://192.168.1.11:8080 route=node2 loadfactor=3 retry=60
BalancerMember http://192.168.1.12:8080 status=+H retry=60 # 热备节点
ProxySet lbmethod=bytraffic
ProxySet stickysession=ROUTEID
</proxy>说明:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
loadfactor控制流量权重;retry表示失败后多久重新尝试接入 -
status=+H标记为热备(Hot Standby),仅当其他节点全宕时才启用 -
lbmethod=bytraffic按响应字节数分配,比轮询更公平;也可用byrequests或bybusyness -
stickysession=ROUTEID要求后端应用在 Cookie 中返回JSESSIONID.node1类似格式,Apache 才能识别路由
三、高可用强化:健康检查 + 状态页 + 外部冗余
Apache 自带简单健康检查(ping 参数),但生产环境建议增强:
- 加
ping=5到每个BalancerMember:每 5 秒发 HEAD 请求探测 - 配
failonstatus=503:HTTP 状态码 503 视为失败(适配 Spring Boot Actuator 健康端点) - 开放
/balancer-manager状态页(限制 IP 访问):<location> SetHandler balancer-manager Require ip 192.168.1.0/24 </location>该页面可手动下线故障节点、调整权重、查看实时连接数和错误计数
- Apache 自身高可用:用 Keepalived 绑定 VIP,在两台 Apache 服务器间自动漂移;或用 DNS 多 A 记录 + TTL 缩短实现软性容灾
四、典型组合场景参考
根据后端类型选择通信协议与优化点:
-
对接 Tomcat 集群:优先用 AJP(
ajp://host:8009),性能更高、支持更细粒度连接管理;需在 Tomcatserver.xml中启用 AJP Connector -
对接 Spring Boot / Node.js 等 HTTP 服务:用
http://协议,配合ProxyPreserveHost On透传原始 Host 头 - 动静分离:静态资源(JS/CSS/IMG)由 Apache 直接 serve;动态请求交由 balancer 转发,减少后端压力
- HTTPS 卸载:SSL 终止在 Apache 层,后端走 HTTP,简化证书管理和加密开销
不复杂但容易忽略。










