apache实现负载均衡主要靠mod_proxy和mod_proxy_balancer模块协同工作,需手动启用proxy、proxy_http、proxy_balancer、lbmethod_byrequests及slotmem_shm模块,配置集群并设置balancermember、lbmethod=byrequests、loadfactor权重及timeout/retry参数,配合proxypass转发和/balancer-manager监控。

高并发场景下,Apache 实现负载均衡主要靠 mod_proxy 和 mod_proxy_balancer 模块协同工作,以反向代理方式将请求分发到多个后端服务器。它不依赖外部硬件,配置灵活、成本低,适合中小规模高并发业务。关键不是堆服务器,而是让流量分得准、切得稳、故障能自动绕过。
启用必要模块并验证
Apache 默认不启用代理和负载均衡功能,必须手动加载对应模块:
- 编辑
httpd.conf,取消以下行的注释(确保路径与你的 modules 目录一致):
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
- 重启 Apache 后,运行
apachectl -M | grep proxy确认模块已加载成功; - 若使用 HTTPS 后端或 AJP 协议(如对接 Tomcat),还需额外启用
mod_proxy_ssl或mod_proxy_ajp。
定义后端服务器组并设置算法
在 httpd.conf 或虚拟主机配置中,用 <proxy></proxy> 块声明一个负载均衡集群:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 每个
BalancerMember表示一台后端节点,支持 HTTP、HTTPS 或 AJP 协议; -
loadfactor控制权重(例如 3:1 表示某台机器承担 3 倍于另一台的请求量); -
lbmethod指定分发策略:byrequests(默认,按请求数轮询)、bytraffic(按流量)、bybusyness(按当前排队请求数); - 建议生产环境搭配
timeout=30 retry=60,避免故障节点长期拖慢整体响应。
BalancerMember http://192.168.1.10:8080 loadfactor=3 timeout=30 retry=60
BalancerMember http://192.168.1.11:8080 loadfactor=1 timeout=30 retry=60
ProxySet lbmethod=byrequests
绑定代理路径并开启会话保持(可选)
把用户请求映射到刚才定义的集群:
-
ProxyPass / balancer://myapp/将根路径所有请求转发过去; - 如需保持用户会话(比如登录态),加上
stickysession=JSESSIONID|PHPSESSID,Apache 会识别 Cookie 并始终路由到同一台后端; - 注意:会话粘性会削弱负载均衡效果,仅在后端无法共享 Session 时启用;理想方案是后端统一用 Redis 存 Session,再关闭 sticky。
监控与健康检查不能少
Apache 自带负载均衡管理界面,可实时查看各节点状态、请求数、错误数:
- 添加如下配置启用管理页(建议限制 IP 访问):
SetHandler balancer-manager
Require ip 192.168.1.0/24
- 访问
http://your-apache-ip/balancer-manager即可查看; - 页面中可手动“置为 offline”或“置为 online”,便于发布时灰度切换;
- 健康检查由 Apache 自动完成——只要后端返回非 2xx/3xx 状态码或超时,就会标记为失效,5 分钟后自动重试(retry 值控制)。









