⚖️ 负载均衡
什么是负载均衡?
想象一个超市收银台——只有一个收银台(服务器)时,排长队。开了多个收银台后,顾客被分配到不同台前,速度飞快。负载均衡就是这个分配顾客的调度员。
轮询(Round Robin)——默认策略
nginx
# 定义后端服务器组
upstream backend_servers {
server 192.168.1.101:3000;
server 192.168.1.102:3000;
server 192.168.1.103:3000;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}请求会按顺序分配:第 1 个→服务器 1,第 2 个→服务器 2,第 3 个→服务器 3,第 4 个→服务器 1,以此类推。
加权轮询(Weighted Round Robin)
nginx
upstream backend_servers {
server 192.168.1.101:3000 weight=5; # 高配服务器,多分点流量
server 192.168.1.102:3000 weight=3; # 中配
server 192.168.1.103:3000 weight=1; # 低配,少分点
}IP Hash——会话保持
nginx
upstream backend_servers {
ip_hash; # 同一个 IP 的请求始终发到同一台
server 192.168.1.101:3000;
server 192.168.1.102:3000;
}💡 提示: 💡 什么时候用 ip_hash?当后端用 Session(不是 JWT)做登录状态管理时,用户的每次请求必须到同一台服务器。
最少连接(Least Connections)
nginx
upstream backend_servers {
least_conn; # 优先分配给连接数最少的服务器
server 192.168.1.101:3000;
server 192.168.1.102:3000;
server 192.168.1.103:3000;
}健康检查和故障转移
nginx
upstream backend_servers {
server 192.168.1.101:3000 max_fails=3 fail_timeout=30s;
server 192.168.1.102:3000 max_fails=3 fail_timeout=30s;
server 192.168.1.103:3000 backup; # 备份服务器,平时不用
}📝 备注: 📝 max_fails=3 fail_timeout=30s意思是:如果连续 3 次请求失败,就标记该服务器为不可用,30 秒后再尝试。