Apache HTTP Server 通过 mod_proxy_balancer 模块的 loadfactor 参数实现加权负载均衡,其值为正整数,按相对比例分配请求,例如 loadfactor=2 和 1 对应约 66.7% 与 33.3% 流量。
apache http server 本身不原生支持像 nginx 的 weight 参数或 dubbo 那样直接在 proxypass 中配置后端节点权重。它默认使用轮询(round robin),所有后端节点被均等对待。但通过 mod_proxy_balancer 模块 + balancermember 指令的 loadfactor 参数,可以实现精确的加权流量分发。
✅ Apache 实现加权负载均衡的关键:loadfactor
loadfactor 是 BalancerMember 的核心属性,用于指定该后端节点应承担的相对请求比例。其值为正整数(默认为 1),数值越大,分配到的请求越多。Apache 内部按各节点 loadfactor 占总和的比例计算调度概率。
例如:
server-a:8080 loadfactor=2-
server-b:8080 loadfactor=1
→ server-a 接收约 66.7% 请求,server-b 接收约 33.3%
⚠️ 注意:
loadfactor不是绝对权重,而是相对权重;Apache 会自动归一化处理。
Apache Superset Dashboard and SQL Exploration Skill下载Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
? 配置步骤(3 步到位)
-
启用必要模块
确保以下模块已加载(通常在httpd.conf或mods-enabled/中):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
-
定义带权重的负载均衡组
在<virtualhost></virtualhost>或主配置中添加:<Proxy "balancer://mycluster"> BalancerMember http://192.168.1.10:8080 loadfactor=3 BalancerMember http://192.168.1.11:8080 loadfactor=1 BalancerMember http://192.168.1.12:8080 loadfactor=2 # 可选:启用粘性会话或健康检查 ProxySet stickysession=ROUTEID # 可选:设置超时与重试策略 ProxySet timeout=5 retry=60 </Proxy> ProxyPass "/" "balancer://mycluster/" ProxyPassReverse "/" "balancer://mycluster/" -
(可选)启用 Web 管理界面实时调权
启用mod_status和mod_proxy_balancer的管理页,便于运行时动态调整loadfactor:<Location "/balancer-manager"> SetHandler balancer-manager Require ip 127.0.0.1 192.168.1.0/24 </Location>访问
http://your-apache/balancer-manager即可在线修改每个BalancerMember的loadfactor,无需重启服务。
? 补充说明
-
loadfactor对所有支持的负载均衡策略(如byrequests,bytraffic,bybusyness)都生效,但最常用的是默认的byrequests(按请求数加权)。 - 若需更精细控制(如按响应时间或连接数调度),可配合
ProxySet lbmethod=bybusyness使用,此时loadfactor仍参与初始权重分配。 - 不支持小数
loadfactor(如1.5),但可通过放大倍数实现等效效果(如3和2≈1.5和1)。 - 健康检查需额外配置
ping或status路径(如ping=5表示每 5 秒探活),否则故障节点不会自动剔除。
不复杂但容易忽略:loadfactor 生效的前提是启用了 mod_proxy_balancer,仅靠 mod_proxy 和 ProxyPass 是无法识别该参数的。


















