温馨提示×

如何配置Apache负载均衡

小樊
43
2025-12-28 04:25:55
栏目: 云计算

Apache 负载均衡配置指南

一 核心原理与准备

  • 使用 mod_proxy、mod_proxy_balancer、mod_proxy_http 实现七层反向代理与负载均衡,常用算法包括 轮询(byrequests)最少连接(least_conn)按流量(bytraffic)按繁忙程度(bybusyness)IP 哈希(iphash)
  • 建议同时启用 mod_slotmem_shm,为 balancer-manager 提供共享内存支持。
  • 系统准备:开放 80/443,放行 Apache 到后端端口(如 8080);后端服务需可达且返回正确的 Location/Set-Cookie 等头以便反向代理修正。

二 安装与启用模块

  • Ubuntu/Debian
    • 安装与启用:sudo apt-get install apache2;sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests;sudo systemctl restart apache2
  • CentOS/RHEL
    • 安装与启用:sudo yum install httpd mod_proxy mod_proxy_http;启用模块(编辑 httpd.conf 或 conf.modules.d 中对应 LoadModule 行);sudo systemctl enable --now httpd
  • 模块要点
    • 必须:proxy、proxy_http、proxy_balancer、lbmethod_byrequests
    • 可选:slotmem_shm(管理共享内存,启用 balancer-manager 需要)、lbmethod_bytraffic / lbmethod_bybusyness / lbmethod_iphash(对应算法)

三 最小可用配置示例

  • 轮询转发(默认算法)
<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>
  • 要点
    • 使用 ProxyPass / balancer://… 统一转发;ProxyPassReverse 修正重定向与 Set-Cookie 域名/端口。
    • 管理页面建议仅本地访问,生产环境可关闭或加 IP 白名单。

四 关键进阶配置

  • 会话保持(Sticky Sessions)
    • 基于 Cookie:ProxyPass / balancer://mycluster/ stickysession=JSESSIONID|PHPSESSID
    • 基于源 IP 哈希:启用 lbmethod_iphash 模块,并在集群上设置 lbmethod=iphash(适合无法共享 Session 的场景)。
    • 配合后端:如 Tomcat 需在 Engine 配置 jvmRoute=server1|server2,与 BalancerMember 的 route 一致。
  • 健康检查
    • 被动探测:BalancerMember 增加 ping=5(每 5 秒发 OPTIONS 探测存活)。
    • 主动与健康阈值:BalancerMember 增加 status=+H(热备);集群上设置 failonstatus=500,503 将异常节点剔除。
    • 新版本增强:Apache 2.4.37+ 支持 healthcheck=on、hcmethod=GET|HEAD、hcexpr=200-399 等更细粒度策略。
  • 权重与故障策略
    • 权重:BalancerMember 增加 loadfactor=3(相对权重,默认 1)。
    • 超时与重试:如 timeout=10retry=60maxattempts=3,控制连接与故障恢复。
  • 连接与缓冲优化
    • 连接池:<Proxy *> 内 ProxySet maxconnections=50、acquire=3000
    • 缓冲:ProxyIOBufferSize 8192、ProxyReceiveBufferSize 16384
  • 示例(会话保持 + 权重 + 故障阈值)
<Proxy balancer://mycluster>
    BalancerMember http://10.0.0.11:8080 route=app1 loadfactor=3 ping=5
    BalancerMember http://10.0.0.12:8080 route=app2 loadfactor=1 ping=5 status=+H
    ProxySet lbmethod=byrequests
    ProxySet failonstatus=500,503
    ProxySet timeout=10 retry=60 maxattempts=3
</Proxy>
ProxyPass / balancer://mycluster/ stickysession=JSESSIONID
ProxyPassReverse / balancer://mycluster/
  • 说明
    • 不同 Apache 版本对主动健康检查与健康表达式支持差异较大,建议先验证版本与模块可用性。

五 验证 监控 与排错

  • 验证
    • 访问应用域名,观察多后端命中;查看 balancer-manager 页面中各节点请求分布、错误计数与负载系数。
    • 使用 ab/jmeter 做压测,核对吞吐、错误率与会话保持效果。
  • 常见问题
    • 502 Bad Gateway:后端未监听正确端口、防火墙/SELinux 拦截、ProxyTimeout 过短。
    • 负载不均:调整 loadfactor、改用 least_connbybusyness,排查后端性能差异。
  • 运维与安全
    • 限制 /balancer-manager 的访问来源;对外启用 HTTPS 终止与回源加密。
    • 负载均衡器单点可用:结合 Keepalived/VIP 或上层云 LB 实现高可用。

0