温馨提示×

Apache如何配置负载均衡

小樊
31
2025-12-28 17:54:11
栏目: 云计算

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=10retry=60maxattempts=3,提升容错。
  • 连接与缓冲优化
    • 连接池:在 <Proxy *> 上设置 maxconnections=50acquire=3000
    • 缓冲:设置 ProxyIOBufferSize 8192ProxyReceiveBufferSize 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 的请求分布、错误计数与节点状态。

0