Apache 负载均衡配置指南
一 核心原理与准备
- 使用 mod_proxy、mod_proxy_balancer、mod_proxy_http 实现七层反向代理与负载均衡,常用算法包括 轮询(byrequests)、最少连接(least_conn)、按流量(bytraffic)、按繁忙程度(bybusyness)、IP 哈希(iphash)。
- 建议同时启用 mod_slotmem_shm,为 balancer-manager 提供共享内存支持。
- 发行版差异:
- Ubuntu/Debian:使用 a2enmod 启用模块;配置文件多在 /etc/apache2/sites-available/。
- CentOS/RHEL:使用 yum/dnf 安装模块;配置文件多在 /etc/httpd/conf/httpd.conf 或 /etc/httpd/conf.d/。
- 防火墙与安全组需开放 80/443,并确保负载均衡器可访问后端端口(如 8080)。
二 最小可用配置示例
- 目标:将站点根路径反向代理到后端集群 mycluster,算法为轮询,启用 balancer-manager 仅本机可访问。
# 启用模块(示例:Ubuntu/Debian)
# sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests slotmem_shm
# sudo systemctl restart apache2
# 或 CentOS/RHEL 安装模块后确保加载
# LoadModule ... 已在 httpd.conf 或 /etc/httpd/conf.modules.d/*.conf 中
<VirtualHost *:80>
ServerName www.example.com
# 可选:Balancer 管理器(仅本地访问)
<Location /balancer-manager>
SetHandler balancer-manager
Require host localhost
</Location>
# 定义后端集群
<Proxy balancer://mycluster>
BalancerMember http://192.168.1.101:8080 route=server1
BalancerMember http://192.168.1.102:8080 route=server2
ProxySet lbmethod=byrequests
</Proxy>
# 反向代理规则
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
</VirtualHost>
- 验证:访问站点与 http://服务器/balancer-manager 查看节点状态与分发情况。
三 关键进阶配置
- 会话保持(Sticky Sessions)
- 基于 Cookie:在 ProxyPass 上添加 stickysession=JSESSIONID(或应用实际 Session ID 名称)。
- 基于源 IP 哈希:启用 lbmethod=iphash 实现同一客户端固定到同一后端。
- 健康检查
- 被动探测:在 BalancerMember 上使用 ping=5(每 5 秒发送 OPTIONS 探测)。
- 主动与故障策略:使用 status=+H 将节点设为热备;用 failonstatus=500,503 指定触发剔除的状态码。
- 权重与重试
- 权重:为节点设置 loadfactor=3/2 等,按性能分配流量。
- 超时与重试:设置 timeout=10、retry=60、maxattempts=3,提升容错。
- 连接与缓冲优化
- 连接池:在 <Proxy *> 上设置 maxconnections=50、acquire=3000。
- 缓冲:设置 ProxyIOBufferSize 8192、ProxyReceiveBufferSize 16384。
- 日志与主机头
- 建议开启 ProxyPreserveHost On,保留客户端 Host 头;使用独立 ErrorLog/CustomLog 便于排障。
四 常用负载均衡策略与启用方式
- 轮询(默认):lbmethod=byrequests,请求依次分发。
- 最少连接:lbmethod=least_conn,适合长连接/慢请求场景。
- 按流量:lbmethod=bytraffic,按已转发流量分配。
- 按繁忙程度:lbmethod=bybusyness(Apache 2.4+)。
- IP 哈希:lbmethod=iphash(Apache 2.4.7+),同一 IP 固定到同一后端。
- 启用方式:在 内使用 ProxySet lbmethod=…;若策略对应模块未内置,需先 LoadModule 相应模块(如 lbmethod_bytraffic_module)。
五 生产可用性与排障要点
- 高可用:单台负载均衡器可能成为瓶颈,建议配合 Keepalived 部署 VIP,实现主备切换与故障漂移。
- 安全加固:限制 /balancer-manager 的访问来源(如仅 localhost 或内网网段),对外通信启用 HTTPS。
- 常见故障
- 502 Bad Gateway:检查后端是否在监听正确端口、firewalld/SELinux 策略、ProxyTimeout 是否过短。
- 负载不均:调整 loadfactor、改用 least_conn,或排查后端性能差异。
- 验证与压测:使用 ab、jmeter 进行压测,观察 balancer-manager 的请求分布、错误计数与节点状态。