Apache实现负载均衡实操指南
一 核心原理与准备
- 使用 Apache HTTP Server 的 mod_proxy、mod_proxy_balancer 等模块实现 七层(HTTP)反向代理与负载均衡,常用算法包括 轮询(byrequests)、按流量(bytraffic)、按繁忙程度(bybusyness),并支持会话保持与健康检查。适合需要与 .htaccess 或复杂 URL 重写深度集成的场景。
- 模块启用(示例):
- Ubuntu/Debian:sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests
- CentOS/RHEL:sudo yum install httpd mod_proxy mod_proxy_http;并在配置中 LoadModule 相应模块
- 防火墙与安全组:开放 80/443,并确保负载均衡器可访问后端 服务端口(如 8080)。
二 最小可用配置示例
- 目标:将站点根路径反向代理到后端集群 mycluster,启用轮询分发与反向代理头修正。
- 配置片段(可置于 /etc/apache2/sites-available/000-default.conf 或 /etc/httpd/conf.d/load_balancer.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>
- 使配置生效:
- Ubuntu/Debian:sudo systemctl restart apache2
- CentOS/RHEL:sudo systemctl restart httpd
三 关键进阶配置
- 负载均衡策略
- 轮询(默认):lbmethod=byrequests
- 按流量:需启用 mod_lbmethod_bytraffic,lbmethod=bytraffic
- 按繁忙程度:Apache 2.4+ 支持 lbmethod=bybusyness
- 会话保持(Sticky Sessions)
- 基于 Cookie/JSESSIONID:ProxyPass … stickysession=JSESSIONID
- 基于源 IP 哈希:需启用 mod_lbmethod_byrequests 的 iphash 支持(Apache 2.4.7+),lbmethod=iphash
- 健康检查
- 被动探测:BalancerMember 使用 ping=5(每 5 秒发送 OPTIONS 探测)
- 主动与故障策略:BalancerMember status=+H(热备);ProxySet failonstatus=500,503(遇到指定状态码标记为故障)
- 权重与容错参数
- 权重:BalancerMember … loadfactor=3(相对权重)
- 超时与重试:ProxySet timeout=10、retry=60、maxattempts=3
- 连接与缓冲优化
- 连接池:<Proxy *> ProxySet maxconnections=50、acquire=3000
- 缓冲:ProxyIOBufferSize 8192、ProxyReceiveBufferSize 16384
四 管理与监控
- 实时状态页:访问 http://服务器地址/balancer-manager,可查看各节点 请求分布、错误计数、负载系数,并支持在线维护。
- 动态管理:可通过管理器界面或 HTTP POST 对节点进行启用/禁用、权重调整等(示例 curl 在官方实践中提供)。
- 安全建议:仅允许 内网/管理网段访问 /balancer-manager,并为对外流量启用 HTTPS。
五 常见问题与高可用建议
- 常见错误
- 502 Bad Gateway:检查后端是否在监听正确端口、SELinux/firewall 策略、ProxyTimeout 是否过短。
- 负载不均:调整 loadfactor,或改用 最少连接/按繁忙程度 算法;核查后端性能差异。
- 高可用
- 单台 Apache 可能成为瓶颈,建议前置 Keepalived 实现 VIP 与故障切换,构建高可用负载均衡层。