Apache mod_proxy_balancer 实现负载均衡需启用mod_proxy、mod_proxy_http、mod_proxy_balancer、调度算法模块(如lbmethod_byrequests)和mod_slotmem_shm,配置<Proxy>定义集群、BalancerMember设置后端节点,并通过ProxyPass/ProxyPassReverse完成路径映射与响应头修正。
apache 通过 mod_proxy_balancer 实现后端多台服务器负载均衡,本质是配置一个反向代理集群,把进来的 http 请求按策略分发到多个已运行的后端服务(如 tomcat、node.js、自定义 http 服务等)。它不管理后端进程启停,只负责流量调度。
一、必须启用的核心模块
缺一不可,否则负载均衡无法工作:
- mod_proxy:提供基础代理能力
-
mod_proxy_http:支持与后端 HTTP 服务通信(若用 AJP 则换为
mod_proxy_ajp) - mod_proxy_balancer:提供集群定义、状态跟踪和调度框架
-
mod_lbmethod_byrequests(或
bytraffic/bybusyness):指定具体调度算法 -
mod_slotmem_shm:必需,用于共享内存存储集群状态(
balancer-manager依赖它)
验证命令:apachectl -M | grep -E 'proxy|lbmethod|slotmem'。Ubuntu/Debian 可用 a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests slotmem_shm;RHEL/CentOS 检查 /etc/httpd/conf.modules.d/00-proxy.conf 中对应 LoadModule 行未被注释。
二、在虚拟主机中定义集群与节点
所有配置建议写在 <VirtualHost> 块内,避免全局污染。示例:
<VirtualHost *:80>
ServerName app.example.com
<Proxy "balancer://myapp">
BalancerMember http://192.168.1.21:8080 loadfactor=3
BalancerMember http://192.168.1.22:8080 loadfactor=2
BalancerMember http://192.168.1.23:8080 loadfactor=1
ProxySet lbmethod=byrequests
ProxySet timeout=5 retry=60
</Proxy>
ProxyPass "/api/" "balancer://myapp/"
ProxyPassReverse "/api/" "balancer://myapp/"
</VirtualHost>
说明:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
loadfactor是相对权重,数值越大分得请求越多(bytraffic下更明显) -
lbmethod=byrequests必须写在<Proxy>块内部,不能放在ProxyPass行里 -
timeout控制等待后端响应上限,retry是故障节点恢复前等待秒数
三、增强可用性:健康检查与自动摘除
仅靠权重不够可靠,建议开启主动探测:
- 后端需暴露轻量健康接口,例如
GET /health返回200 OK - 在
BalancerMember行添加参数:hcmethod=GET hcuri="/health" hcinterval=10 failonstatus=503 - 若需热备节点,加
status=+H,仅当其他全宕时启用
注意:mod_proxy_hcheck 模块需 Apache ≥ 2.4.43 才支持复杂表达式(如解析 JSON 中的 CPU 空闲率),常规健康检查无需此模块。
四、可选但实用:会话保持与管理界面
若后端应用有会话状态(如 Java Web 应用):
- 启用粘性会话:
ProxySet stickysession=JSESSIONID(Java)或ROUTEID(Node.js 需配合res.cookie('ROUTEID', 'node1')) - 临时启用管理界面(生产环境请限制访问):
<Location "/balancer-manager"><br> SetHandler balancer-manager<br> Require ip 127.0.0.1<br> </Location>
该界面可实时查看节点状态、手动启停成员、调整权重,调试非常直观。

















