Apache负载均衡按硬件配置比例分配权重,核心是用loadfactor参数量化CPU、内存等资源差异,设为6:3:1等相对比值,配合lbmethod=byrequests或bybusyness算法实现请求级或连接级精准分发。

Apache 负载均衡按服务器硬件配置比例分配权重,核心是让 CPU、内存、磁盘 I/O 等资源更强的机器承担更多请求,避免“性能强却跑不满、性能弱却被压垮”。这不是靠猜,而是用 loadfactor 参数把硬件能力量化成可调度的相对比值。
确认模块已启用
必须加载四个模块:
-
mod_proxy(反向代理基础) -
mod_proxy_http(HTTP 协议转发) -
mod_proxy_balancer(集群调度逻辑) -
mod_slotmem_shm(共享内存,支撑健康检查和状态同步)
验证命令:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
apachectl -M | grep -E 'proxy|slotmem'
看到 proxy_module, proxy_http_module, proxy_balancer_module, slotmem_shm_module 均为 shared 状态才算齐备。
根据硬件能力设定 loadfactor 数值
权重不是百分比,也不需归一化,只表达相对关系。例如:
- 服务器 A:16 核 CPU + 64GB 内存 → 设为
loadfactor=6 - 服务器 B:8 核 CPU + 32GB 内存 → 设为
loadfactor=3 - 服务器 C:4 核 CPU + 16GB 内存 → 设为
loadfactor=1
这样三台机器的理论请求承接比就是 6:3:1,符合硬件能力梯度。
<Proxy balancer://appcluster>
BalancerMember https://www.php.cn/link/4fbe9e8a0ace3a44f0a9e1d7fe41da02 loadfactor=6
BalancerMember https://www.php.cn/link/6cf8ae4c2312ba4a0103e20d0ace1ea3 loadfactor=3
BalancerMember https://www.php.cn/link/f0b2257261d359354fc5fef47e80e110 loadfactor=1
搭配 lbmethod 提升匹配度
仅设权重还不够,要选对调度算法:
-
lbmethod=byrequests:适合请求耗时较均匀的场景(如静态资源、轻量 API),严格按权重轮询分发请求数。 -
lbmethod=bybusyness:适合混合长/短请求的业务(如含数据库查询、文件上传),会结合当前活跃连接数动态调整,防止高权重但响应慢的节点被持续打满。
在<Proxy>块内加一行:ProxySet lbmethod=bybusyness
注意真实负载与权重的偏差来源
即使权重设得准,也可能观察不到预期流量比,常见原因:
- 客户端启用了 HTTP/1.1 keep-alive,一个 TCP 连接复用多次请求,导致首次分配后后续请求不重调度
- 后端应用本身存在长连接(如 WebSocket、gRPC 流式接口),连接级分发无法反映请求级压力
- 权重差太小(比如 5 和 6),在少量请求下看不出区别;建议最小权重不低于 1,最大不超过 10,跨度尽量拉到 3 倍以上才易观测
实际部署时,建议先用 ab 或 wrk 对单个后端压测,记录平均响应时间与并发吞吐,再反推权重初值,上线后再通过 balancer-manager 页面或 mod_status 实时观察各节点请求数分布,微调 loadfactor 直至稳定接近目标比例。

















