要让Apache实现基于权重的负载均衡,核心是启用mod_proxy、mod_proxy_http、mod_proxy_balancer和lbmethod_byrequests模块,配置<Proxy>块中各BalancerMember的loadfactor值并设置lbmethod=byrequests,使请求按权重比例分发。

要让 Apache 实现基于权重的负载均衡,核心是用 mod_proxy_balancer 模块配合 loadfactor 参数控制各后端节点的流量分配比例。配置本身不复杂,但几个关键点容易出错,下面直接说清楚怎么做。
启用必要模块
必须加载这三个模块:
-
mod_proxy(基础代理) -
mod_proxy_http(支持 HTTP 协议转发) -
mod_proxy_balancer和lbmethod_byrequests(提供负载均衡能力,按请求计数调度)
Ubuntu/Debian 系统执行:
sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests sudo systemctl restart apache2
CentOS/RHEL 系统确认 /etc/httpd/conf.modules.d/00-proxy.conf 中已启用对应 LoadModule 行,或手动在 httpd.conf 添加:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
定义带权重的后端集群
在虚拟主机配置(如 /etc/apache2/sites-available/myapp.conf)中写入:
<VirtualHost *:80>
ServerName app.example.com
<Proxy balancer://weightedcluster>
BalancerMember http://192.168.1.10:8080 loadfactor=3 route=node1
BalancerMember http://192.168.1.11:8080 loadfactor=1 route=node2
BalancerMember http://192.168.1.12:8080 loadfactor=2 route=node3
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass / balancer://weightedcluster/
ProxyPassReverse / balancer://weightedcluster/
</VirtualHost>这里 loadfactor=3 表示该节点承担的请求数约为 loadfactor=1 节点的 3 倍。总权重为 3+1+2=6,理论流量占比分别是 50%、16.7%、33.3%。注意:权重只在 byrequests 或 bytraffic 算法下生效,iphash 不适用。
确保会话粘性(可选但推荐)
如果应用依赖 session(如 Java Web 应用),加上 stickysession 避免用户反复登录:
<Proxy balancer://weightedcluster>
...
ProxySet stickysession=JSESSIONID|ROUTEID
</Proxy>前提是后端应用在响应中设置 JSESSIONID Cookie,且每个 BalancerMember 的 route 值与 Cookie 中的 ROUTEID 一致(例如 Tomcat 的 jvmRoute 配置)。
验证和调试
重启 Apache 后,访问 http://your-server/balancer-manager(需提前配置 <Location /balancer-manager> 并限制访问),能看到各节点当前权重、已处理请求数、状态(OK/ERR)等实时数据。用 curl -I http://app.example.com 多次请求,观察 Set-Cookie: JSESSIONID=xxx.route=node1 这类标识是否稳定,确认粘性是否生效。

















