在 CentOS 上配置负载均衡
一、方案速览与选择
- Nginx:常用作反向代理与负载均衡,配置灵活,支持 HTTP/HTTPS、轮询、最少连接、IP Hash、加权 等,适合大多数 Web 场景与四层/七层转发。
- HAProxy:专注负载均衡与高可用,七层能力完善,内置 健康检查、统计页面、ACL 等,适合高并发与复杂路由策略。
- LVS(IPVS):内核级四层负载均衡,性能极高,适合超大规模流量;常与 Keepalived 配合做 VIP 漂移 与故障切换。
- 选型建议:中小规模 Web 优先 Nginx/HAProxy;超高性能与四层转发优先 LVS+Keepalived。
二、方案一 Nginx 负载均衡(快速上手)
- 安装
- 安装 EPEL 源并安装 Nginx:
sudo yum install -y epel-release
sudo yum install -y nginx
- 配置(/etc/nginx/nginx.conf 或 /etc/nginx/conf.d/lb.conf)
- 定义后端与策略(示例为轮询,可按需改为 least_conn 或 ip_hash):
http {
upstream backend {
server 192.168.1.101:80;
server 192.168.1.102:80;
# server 192.168.1.103:80 weight=3; # 加权示例
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
- 可选:状态页与简单健康判定
- 在 server 块内添加:
location /nginx_status { stub_status; access_log off; allow 127.0.0.1; deny all; }
- 开源版可用 max_fails/fail_timeout 做被动健康检查:
server 192.168.1.101:80 max_fails=3 fail_timeout=10s;
- 启动与放行
- 启动:sudo systemctl start nginx && sudo systemctl enable nginx
- 防火墙:sudo firewall-cmd --permanent --add-port=80/tcp && sudo firewall-cmd --reload
- 验证
- 访问域名/IP,刷新观察是否分发到不同后端;查看状态页 /nginx_status。
三、方案二 HAProxy 负载均衡(含监控与高可用)
- 安装
- sudo yum install -y haproxy
- 配置(/etc/haproxy/haproxy.cfg,示例为 HTTP)
- global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
- defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.1/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
- listen stats
bind *:8080
mode http
stats enable
stats uri /haproxy?stats
stats realm Haproxy\ Statistics
stats auth admin:YourStrongPass
stats refresh 30s
- frontend web_frontend
bind *:80
mode http
default_backend app_servers
- backend app_servers
balance roundrobin
option httpchk GET / HTTP/1.0
server web1 192.168.1.10:80 check inter 2000 rise 2 fall 3
server web2 192.168.1.11:80 check inter 2000 rise 2 fall 3
- 启动与放行
- 启动:sudo systemctl start haproxy && sudo systemctl enable haproxy
- 放行:sudo firewall-cmd --permanent --add-port=80/tcp --add-port=8080/tcp && sudo firewall-cmd --reload
- 验证
- 访问 http://<LB_IP>/haproxy?stats 查看统计与健康状态;访问业务域名/IP 验证分发。
- 高可用(HAProxy+Keepalived)
- 两台 LB 分别安装 Keepalived,配置 VIP 与 VRRP 优先级;主节点故障自动漂移到备节点,保障负载均衡器不单点。
四、方案三 LVS 四层负载均衡(高性能场景)
- 安装与启用转发
- sudo yum install -y ipvsadm
- echo 1 > /proc/sys/net/ipv4/ip_forward
- 配置虚拟服务与后端(示例:轮询)
- 添加虚拟服务:sudo ipvsadm -A -t VIP:80 -s rr
- 添加真实服务器:sudo ipvsadm -a -t VIP:80 -r RS1:80 -g
- 说明:VIP 为虚拟 IP,RS1/RS2 为后端服务器 IP;-g 表示 DR 模式(需在各 RS 上配置回环别名与 ARP 抑制)。
- 高可用
- 结合 Keepalived 管理 VIP 与故障切换,实现 LVS 主备自动漂移。
五、生产要点与排错清单
- 健康检查与故障隔离
- Nginx 开源版可用 max_fails/fail_timeout 做被动探测;HAProxy 支持主动 HTTP/TCP 检查 与 rise/fall 阈值,异常节点自动摘除。
- 会话保持
- 需要会话一致时可用 ip_hash(Nginx)或 source(HAProxy);更优方案是应用无状态化或将 Session 存入 Redis/Memcached 实现集中共享。
- 监控与日志
- Nginx 启用 stub_status;HAProxy 自带 统计页面;建议接入 Prometheus + Grafana 做指标与告警。
- 防火墙与 SELinux
- 放行 80/443/8080 等端口;必要时调整 SELinux 策略或临时设为 permissive 做排查。
- 性能与连接
- 调整 worker_connections / maxconn,开启 keepalive 复用连接;后端应用需具备水平扩展与幂等性。