apache中配置balancer成员实现多台后端分流,核心是用块定义集群,每个balancermember对应一台后端服务,并依赖mod_proxy、mod_proxy_http、mod_proxy_balancer、调度算法模块(如lbmethod_byrequests)及slotmem_shm模块协同工作,支持权重分配、健康探测、混合协议和会话粘滞。

Apache 中配置 balancer 成员实现多台后端服务器分流,核心是用 <proxy balancer:></proxy> 块定义集群,每个 BalancerMember 对应一台后端服务,并通过模块支持、权重分配、健康探测和调度算法协同工作。配置本身不复杂,但关键参数必须写对位置、类型和值域。
启用必需模块并验证加载
Apache 2.4 默认不启用负载均衡功能,以下模块缺一不可:
- mod_proxy:代理基础框架
- mod_proxy_http:转发 HTTP/HTTPS 后端(如 Spring Boot、Node.js)
- mod_proxy_balancer:提供集群管理与状态跟踪
-
mod_lbmethod_byrequests(或
bybusyness、bytraffic):指定分发逻辑 -
mod_slotmem_shm:支撑共享内存,否则
/balancer-manager无法显示实时状态
Ubuntu/Debian 执行:sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests slotmem_shm
CentOS/RHEL 检查 /etc/httpd/conf.modules.d/00-proxy.conf 中对应 LoadModule 行已取消注释。
验证命令:apachectl -M | grep -E 'proxy|lbmethod|slotmem',应全部显示 shared。
在 VirtualHost 内定义 balancer 集群
把集群声明限定在某个域名或路径下,避免全局污染。例如为 api.example.com 配置三台后端:
<virtualhost>
ServerName api.example.com
<proxy balancer:>
BalancerMember http://192.168.1.10:8080 route=node1 loadfactor=3 ping=5 retry=60
BalancerMember http://192.168.1.11:8080 route=node2 loadfactor=2 ping=5 retry=60
BalancerMember http://192.168.1.12:8080 status=+H
ProxySet lbmethod=bybusyness
ProxySet timeout=15
</proxy>
ProxyPass / balancer://api/
ProxyPassReverse / balancer://api/
ProxyPreserveHost On
</virtualhost>
说明:
-
route=node1用于会话保持(配合stickysession=JSESSIONID等) -
loadfactor是相对权重,无需归一化;3:2:0 表示前两台承担全部流量,第三台仅热备 -
ping=5表示每 5 秒发起一次 TCP 探测,retry=60指故障后 60 秒再尝试恢复 -
status=+H标记为热备节点(Hot standby),仅当其他成员全不可用时才启用 -
ProxySet必须写在之前,作用于整个集群
适配不同后端协议的混合成员
同一 balancer 组可混用多种协议,Apache 自动匹配对应子模块处理:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
http://192.168.1.10:3000→ 由mod_proxy_http处理(Node.js、Go) -
ajp://192.168.1.11:8009→ 由mod_proxy_ajp处理(Tomcat) -
fcgi://127.0.0.1:9000→ 由mod_proxy_fcgi处理(PHP-FPM) -
ws://192.168.1.12:8080/ws/→ 由mod_proxy_wstunnel处理(WebSocket)
所有成员共用同一个 lbmethod 和 timeout,但可独立设置 loadfactor、ping、status 等参数。
启用监控页与健康检查增强
添加以下配置启用内网可观测入口:
<location> SetHandler balancer-manager Require ip 192.168.1.0/24 </location>
访问 http://your-apache/balancer-manager 可查看各节点的“Elected”次数、“Current Requests”、“Status”及手动启停操作。
若后端提供健康接口(如 Spring Boot 的 /actuator/health),Apache 2.4.43+ 支持主动 HTTP 检查:
BalancerMember http://192.168.1.10:8080 hcmethod=GET hcuri=/actuator/health hcinterval=10 hcfail=3 hcpass=2
表示每 10 秒 GET 一次健康路径,连续失败 3 次下线、连续成功 2 次恢复。










