服务器负载均衡配置详解:负载均衡配置从零开始
为什么要做负载均衡?
当单台服务器扛不住流量时,你需要把请求分发到多台后端节点上。负载均衡配置 的核心目标就是提高可用性和横向扩展能力。
本文以最常用的 Nginx 为例,带你从零上手。
准备条件
- 至少两台 Linux 服务器(可用虚拟机或云服务器),一台作为负载均衡器,其余作为后端节点。
- 所有服务器已安装 Nginx(安装命令:
yum install nginx -y或apt install nginx -y)。 - 后端节点上部署好你的 Web 应用(如一个简单的 index.html),确保 80 端口可访问。
- 负载均衡器与后端节点之间网络互通,防火墙放行 80 端口(例如
firewall-cmd --add-port=80/tcp --permanent && firewall-cmd --reload)。
配置 Nginx 实现负载均衡
1. 编辑主配置文件
负载均衡器上执行:
vim /etc/nginx/nginx.conf
在 http 块内添加一个 upstream 块,指向你的后端节点 IP(替换为实际 IP):
upstream backend {
server 192.168.1.101:80 weight=3;
server 192.168.1.102:80 weight=2;
server 192.168.1.103:80 backup;
}
这里 weight 表示权重(数字越大分发的请求越多),backup 标记为备用节点,只在其他节点都不可用时启用。
2. 配置 server 块转发
在同一个 nginx.conf 文件中,修改或新增 server 块:
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;
}
}
保存后测试配置:nginx -t,如果输出 syntax is ok 则表示无误。
3. 重启 Nginx
systemctl restart nginx
避坑指南
- 权重设置不合理:如果某台后端性能较差,权重过高会使其过载。建议根据实际 CPU/内存负载动态调整。
- 未配置健康检测:默认 Nginx 不会自动剔除故障节点。可添加
max_fails=3 fail_timeout=30s参数:
server 192.168.1.101:80 weight=3 max_fails=3 fail_timeout=30s;
这样连续失败 3 次后,Nginx 会暂时将该节点标记为不可用,30 秒后重新尝试。
- 会话丢失问题:如果应用依赖 session(如登录状态),简单的轮询会导致用户在不同节点间跳转时丢失会话。解决方案:启用 IP Hash 或配置 Redis 共享 session。Nginx 的 IP Hash 方法:
upstream backend {
ip_hash;
server 192.168.1.101:80;
server 192.168.1.102:80;
}
- 防火墙端口未开放:负载均衡器与后端节点之间的 80 端口必须互相放行,否则健康检查会失败。
效果验证
查看日志
负载均衡器上执行:
tail -f /var/log/nginx/access.log
然后从客户端多次访问 http://负载均衡器IP,观察日志中 upstream_addr 字段是否轮换显示不同后端 IP。
模拟故障
故意停止一个后端节点的 Nginx 服务:
systemctl stop nginx
再次访问,应该依然能正常返回内容(由其他存活节点响应),且日志中不再出现该故障 IP。
使用 curl 工具
执行多次:
curl -s http://负载均衡器IP | head -1
如果后端节点返回的页面内容有差异(如节点标识),可以看到结果随机变化。
常见问题 Q&A
Q:配置后访问负载均衡器返回 502 Bad Gateway?
A:检查后端节点上的 Web 服务是否正常启动,以及负载均衡器能否通过 curl http://后端IP:80 成功获取内容。同时确认防火墙已放行。
Q:如何查看当前负载均衡算法的效果?
A:在 upstream 块中使用 least_conn 或 random 等算法,并通过持续访问观察日志中的分配比例。
Q:多台后端节点需要同步代码吗?
A:必须同步。常见方案是使用代码仓库 + 自动部署(如 rsync、Git hook),或者将静态资源挂在共享存储上。
完成以上步骤后,你的 服务器负载均衡配置 就已经生效了。
建议先在小流量环境下观察一两天,再上线正式业务。
遇到问题时优先排查网络连通性与配置文件语法错误。