在 CentOS 上,用 Apache 做负载均衡通常是通过 mod_proxy + mod_proxy_balancer 模块实现的(反向代理 + 负载均衡)。下面给你一个从安装到配置的完整示例。
假设:
192.168.1.10192.168.1.20:8080192.168.1.21:8080系统:CentOS 7 / 8
# CentOS 7
yum install httpd -y
# CentOS 8
dnf install httpd -y
启动并设置开机自启:
systemctl start httpd
systemctl enable httpd
Apache 负载均衡需要以下模块:
httpd -M | grep proxy
如果没有以下模块,需要确认已加载:
proxy_moduleproxy_http_moduleproxy_balancer_modulelbmethod_byrequests_moduleCentOS 默认已启用,如未启用,可在配置中确认:
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
vi /etc/httpd/conf.d/balancer.conf
<VirtualHost *:80>
ServerName www.example.com
# 负载均衡器
<Proxy "balancer://mycluster">
BalancerMember "http://192.168.1.20:8080"
BalancerMember "http://192.168.1.21:8080"
# 负载均衡算法(按请求数)
ProxySet lbmethod=byrequests
</Proxy>
# 反向代理
ProxyPass "/" "balancer://mycluster/"
ProxyPassReverse "/" "balancer://mycluster/"
# 状态页面(可选)
<Location "/balancer-manager">
SetHandler balancer-manager
Require ip 192.168.1.0/24
</Location>
</VirtualHost>
| 算法 | 说明 |
|---|---|
| byrequests | 轮询(默认) |
| bytraffic | 按流量 |
| bybusyness | 按连接数 |
示例:
ProxySet lbmethod=bytraffic
如果后端需要 Session:
<Proxy "balancer://mycluster">
BalancerMember "http://192.168.1.20:8080" route=node1
BalancerMember "http://192.168.1.21:8080" route=node2
ProxySet stickysession=JSESSIONID
</Proxy>
后端需设置:
jvmRoute="node1"BalancerMember "http://192.168.1.20:8080" status=+H
状态说明:
+H:热备-H:停用firewall-cmd --permanent --add-service=http
firewall-cmd --reload
httpd -t
systemctl restart httpd
访问:
http://192.168.1.10http://192.168.1.10/balancer-manager✅ 适合:
❌ 不适合:
如果你需要:
可以告诉我你的具体场景,我可以直接给你定制配置。