在 Ubuntu 上使用 Apache2 配置负载均衡,通常是通过 mod_proxy + mod_proxy_balancer 模块来实现的(反向代理 + 负载均衡)。下面给你一个从 0 到可用的完整示例。
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
sudo a2enmod headers
lbmethod_byrequests是常用的轮询(Round Robin)调度算法
启用后重启 Apache:
sudo systemctl restart apache2
sudo nano /etc/apache2/sites-available/loadbalancer.conf
<VirtualHost *:80>
ServerName lb.example.com
# 负载均衡器
<Proxy balancer://mycluster>
BalancerMember http://192.168.1.101:8080
BalancerMember http://192.168.1.102:8080
ProxySet lbmethod=byrequests
</Proxy>
ProxyPreserveHost On
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
# 可选:负载均衡状态页面
<Location /balancer-manager>
SetHandler balancer-manager
Require local
# Require ip 192.168.1.0/24
</Location>
ErrorLog ${APACHE_LOG_DIR}/lb_error.log
CustomLog ${APACHE_LOG_DIR}/lb_access.log combined
</VirtualHost>
sudo a2ensite loadbalancer.conf
sudo a2dissite 000-default.conf # 可选
sudo systemctl reload apache2
curl http://192.168.1.100
多次访问,请求会在两个后端之间分发。
在 ProxySet 中修改:
| 算法 | 说明 |
|---|---|
| byrequests | 轮询(默认) |
| bytraffic | 按流量 |
| bybusyness | 按连接数 |
示例:
ProxySet lbmethod=bytraffic
Apache 支持基础健康检查:
BalancerMember http://192.168.1.101:8080 status=+H
或:
ProxySet lbmethod=byrequests timeout=5
如果是 HTTPS 后端:
BalancerMember https://192.168.1.101:8443
并启用:
sudo a2enmod proxy_connect
前端 HTTPS:
sudo a2enmod ssl
ProxyPassReverse如果你愿意,我可以:
你现在是哪种业务场景?