在虚拟主机中配置apache负载均衡,核心是启用mod_proxy、mod_proxy_http、mod_proxy_balancer、对应lbmethod模块及mod_slotmem_shm,并在内用定义集群、设置lbmethod和loadfactor,配合proxypass实现作用域隔离与流量分发。

直接在虚拟主机(VirtualHost)中配置 Apache 负载均衡,核心是把 mod_proxy_balancer 的集群定义和转发规则限定在该虚拟主机作用域内,不污染全局配置,也便于多域名、多服务独立管理。
启用必要模块
确保以下模块已加载(通常在 httpd.conf 或 apache2.conf 中):
-
mod_proxy:提供基础代理能力 -
mod_proxy_http:支持 HTTP 协议后端通信 -
mod_proxy_balancer:实现集群调度逻辑 -
mod_lbmethod_byrequests或mod_lbmethod_bytraffic:选择调度算法(轮询或按流量) -
mod_slotmem_shm:必需,用于共享内存管理,否则balancer-manager无法工作
验证命令:httpd -M | grep -E 'proxy|lbmethod|slotmem'。缺失模块需用 LoadModule 显式加载。
在 VirtualHost 内定义 balancer 集群
所有负载均衡配置写在 <virtualhost></virtualhost> 块内部,避免全局影响。示例:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<virtualhost>
ServerName app.example.com
<proxy>
BalancerMember http://192.168.1.10:8080 loadfactor=3
BalancerMember http://192.168.1.11:8080 loadfactor=2
BalancerMember http://192.168.1.12:8080 loadfactor=1
ProxySet lbmethod=bytraffic
ProxySet timeout=5 retry=60
</proxy>
ProxyPass "/api/" "balancer://api/"
ProxyPassReverse "/api/" "balancer://api/"
</virtualhost>
说明:
-
loadfactor是相对权重,数值越大,分得的请求越多(尤其在bytraffic下影响更明显) -
lbmethod=bytraffic必须写在<proxy></proxy>块内,不能放在ProxyPass行里 -
timeout控制等待后端响应的上限,retry指故障节点多久后重试
启用健康检查与自动摘除
仅靠权重不够可靠,建议为每个后端节点开启主动健康探测:
- 后端需提供轻量健康接口,如
GET /health,返回200表示健康,503表示过载 - 在
BalancerMember行添加参数:failonstatus=503 hcmethod=GET hcuri="/health" - 完整写法示例:
BalancerMember http://192.168.1.10:8080 loadfactor=3 failonstatus=503 hcmethod=GET hcuri="/health" - Apache 会定期发起探针,一旦收到
503,自动将该节点标记为“宕机”,不再转发新请求
可选:开启 balancer-manager 管理界面
方便实时查看集群状态、手动启停节点(生产环境建议限制访问):
<location> SetHandler balancer-manager Require ip 127.0.0.1 Require ip 192.168.1.0/24 </location>
放在同一 <virtualhost></virtualhost> 块内即可,访问 http://app.example.com/balancer-manager 查看实时负载、权重、状态等信息。









