家里做饭讲究火候均匀,炖一锅汤要是火力忽大忽小,味道就难说了。服务器也一样,访问量一大,单台机器扛不住,就得靠负载均衡来‘分锅炒菜’,让每台服务器都吃得饱又不撑着。
准备阶段:理清你的‘厨房设备’
在动手前,先看看你有哪些服务器资源。比如你有三台Web服务器,IP分别是192.168.1.10、192.168.1.11、192.168.1.12。再准备一台专门做调度的机器,装上Nginx或者HAProxy,它就像厨房里的主厨,负责把订单(请求)合理分配给各个灶台(服务器)。
安装并配置Nginx作为负载均衡器
登录到调度服务器,用yum或apt安装Nginx:
sudo apt update
sudo apt install nginx
编辑Nginx配置文件,一般位于/etc/nginx/sites-available/default,加入以下内容:
upstream backend {
server 192.168.1.10;
server 192.168.1.11;
server 192.168.1.12;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
这段配置的意思是:所有进来的请求,由Nginx按默认轮询方式转发给后端三台服务器。
选择合适的分发策略
就像炒青菜要猛火快炒,处理用户登录可能得保证同一人总连到同一台机器。这时候可以用ip_hash,让同一个IP始终访问同一后端:
upstream backend {
ip_hash;
server 192.168.1.10;
server 192.168.1.11;
server 192.168.1.12;
}
如果某台服务器性能更强,能多干活,还可以加权重:
upstream backend {
server 192.168.1.10 weight=2;
server 192.168.1.11;
server 192.168.1.12;
}
这样第一台会收到大约一半的请求,其余两台平分另一半。
测试与上线
改完配置别急着重启,先检查语法有没有错:
sudo nginx -t
没问题后再重载服务:
sudo systemctl reload nginx
接着从外部访问你的公网IP,刷新几次页面,查看各台后端服务器的日志,确认请求确实被分散处理了。
加上健康检查,避免‘坏灶台’影响出餐
万一某台服务器挂了,还往它转发请求,用户就会看到错误。Nginx Plus支持主动健康检查,开源版可以通过脚本配合实现。比如写个简单脚本定时请求每个后端的/health接口,发现不通就临时从配置中移除。
也可以换用HAProxy,原生支持更丰富的健康检测机制,适合对稳定性要求更高的场景。
域名和SSL也不能少
用户不会记IP,得绑个域名。在DNS里把yourapp.com指向Nginx服务器的公网IP。然后用Let's Encrypt免费申请证书:
sudo certbot --nginx -d yourapp.com
之后Nginx会自动配置HTTPS,用户访问更安全,浏览器也不报警告了。