apache负载均衡配置与性能调优是模块启用、代理策略、健康保障和mpm资源适配四层协同的过程,需启用mod_proxy、mod_proxy_balancer、mod_proxy_http等核心模块,合理设置loadfactor、lbmethod、maxattempts、timeout及stickysession,并同步调优mpm参数以匹配后端承载力。

Apache 负载均衡配置与性能调优不是单一步骤,而是“模块启用 + 代理策略 + 后端健康保障 + MPM资源适配”四层协同的过程。直接改 .htaccess 或 httpd.conf 中几行指令,往往效果有限甚至引发故障。关键在于让负载分发能力与服务器实际承载力匹配。
Apache负载均衡核心模块必须启用
确保以下模块已加载(检查 apachectl -M 输出):
-
mod_proxy(代理基础) -
mod_proxy_balancer(负载均衡调度器) -
mod_proxy_http(HTTP协议支持) -
mod_rewrite(可选,用于条件路由) -
mod_headers(可选,用于会话粘性标识传递)
若缺失,需在 httpd.conf 中取消注释或手动添加 LoadModule 行,并重启 Apache。
负载均衡策略配置要兼顾权重、算法与容错
在虚拟主机或 .htaccess 中配置时,避免裸写 BalancerMember,应明确控制行为:
- 使用
loadfactor合理分配压力(例如:高性能节点设为3,普通节点设为1) - 指定
lbmethod=byrequests(默认轮询)或bybusyness(按当前连接数动态分配) - 设置
maxattempts=2和timeout=30,防止请求卡死在故障节点 - 开启会话保持:
ProxySet stickysession=JSESSIONID|PHPSESSID(根据后端应用实际 Session ID 名称调整) - 禁用管理界面暴露:
ProxyPass /balancer-manager !必须存在,且/balancer-managerLocation 块仅限内网访问
示例精简配置(推荐放在 <virtualhost></virtualhost> 内):
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
<proxy balancer:>
BalancerMember http://192.168.1.10:8080 loadfactor=3 retry=60
BalancerMember http://192.168.1.11:8080 loadfactor=1 status=+H # H=热备,不参与轮询
ProxySet lbmethod=bybusyness
ProxySet stickysession=PHPSESSID
</proxy>
ProxyPass / balancer://myapp/
ProxyPassReverse / balancer://myapp/
后端服务器健康检查不能依赖默认行为mod_proxy_balancer 自带基础健康检测(失败三次即标记 E),但默认不主动探测。建议配合 retry 参数(单位:秒)实现自动恢复:
-
retry=60:该节点失败后,60 秒内不再转发请求 - 若后端支持 HTTP 健康接口(如
/health),可用mod_proxy_hcheck(Apache 2.4.47+)做主动探活 - 对 Tomcat 集群,确保
AJP连接池参数合理(如connection_pool_timeout=600),避免连接堆积
MPM 和连接参数必须同步调优
负载均衡器本身也是 Apache 实例,若其并发处理能力不足,反而成为瓶颈:
- 查看当前 MPM 类型:
httpd -V | grep MPM - Prefork 模式下重点调:
<ifmodule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 150 # 建议 ≤ 物理内存(GB)×30 MaxConnectionsPerChild 0 </ifmodule> - Event 模式(推荐高并发场景)更高效,需启用
mod_http2并调MaxRequestWorkers至 500+(视内存而定) - 全局参数优化:
-
Timeout 30(避免长连接拖慢整体响应) -
KeepAlive Off(反向代理场景通常关闭,由后端控制连接复用) -
MaxKeepAliveRequests 100(如开启 KeepAlive,限制单连接请求数)
-
不复杂但容易忽略。









