Nginx ~ 负载均衡
一、什么是负载均衡(Load Balancing)?
定义:
负载均衡是将用户请求合理分配到多台服务器上,避免某一台服务器压力过大,从而提高系统的性能、稳定性和可用性。
简单比喻:
- 就像餐厅排队分桌
- 不让一个服务员累死
- 保证整体效率最高
二、为什么一定需要负载均衡?
没有负载均衡:
用户 → 服务器A(爆)结果:
- 响应慢
- 崩溃
- 全站不可用
有负载均衡:
用户 → 负载均衡器 → 服务器A/B/C优势:
- 🚀 提升吞吐量
- 🛡 提高可用性
- 🔁 支持扩容
- 🔥 防止单点故障
三、负载均衡的三大层级
| 层级 | 作用 | 示例 |
|---|---|---|
| DNS 负载均衡 | 粗粒度 | CDN |
| 四层负载均衡(L4) | TCP/UDP | LVS |
| 七层负载均衡(L7) | HTTP | Nginx |
四、负载均衡的核心算法
1️⃣ 轮询(Round Robin)
A → B → C → A2️⃣ 权重轮询(Weight)
A(3) → A → B(1) → A → C(2)3️⃣ 最少连接(Least Conn)
把请求给当前连接数最少的服务器。
4️⃣ IP Hash
同一 IP 固定到同一台服务器。
5️⃣ 一致性 Hash
解决节点变化引起的大规模漂移问题。
五、Nginx 实现负载均衡(工程实战)
1️⃣ 定义后端服务器池
nginx
upstream backend {
least_conn;
server 10.0.0.1 weight=3;
server 10.0.0.2 weight=2;
server 10.0.0.3 weight=1;
}2️⃣ 转发请求
nginx
location /api/ {
proxy_pass http://backend;
}六、健康检查机制(非常重要)
被动健康检查:
Nginx 根据请求失败自动踢掉节点:
nginx
server 10.0.0.1 max_fails=3 fail_timeout=30s;主动健康检查(OpenResty / Nginx Plus):
定期探测接口是否正常。
七、会话保持(Session Sticky)
方案 1:IP Hash
nginx
upstream backend {
ip_hash;
}方案 2:Cookie 绑定
nginx
sticky cookie srv_id;八、负载均衡 + 高可用架构
架构图:
用户
↓
VIP (Keepalived)
↓
Nginx1 / Nginx2
↓
后端集群九、负载均衡与微服务
在微服务中:
Nginx = API 网关
结合:
- 服务发现
- 动态路由
- 熔断
- 限流
十、负载均衡与容灾
同城多机房:
DNS → A机房Nginx
→ B机房Nginx异地灾备:
- 主站
- 备站
- DNS 切换
十一、负载均衡监控指标
必须监控:
- QPS
- 延迟
- 错误率
- 每台服务器连接数
- 后端状态
十二、负载均衡常见故障
| 问题 | 原因 |
|---|---|
| 502 | 后端挂 |
| 请求集中 | 权重不合理 |
| Session 丢失 | 没做会话保持 |
| 单点故障 | 只有一个负载均衡 |
十三、企业级负载均衡最佳实践
- 入口双机热备
- 自动健康检查
- 支持灰度发布
- 有监控
- 有日志
- 有熔断
- 有限流
- 有预案
- 可扩容
- 可回滚
十四、完整企业级配置示例
nginx
upstream api_cluster {
least_conn;
server 10.0.0.1 weight=2 max_fails=3 fail_timeout=30s;
server 10.0.0.2 weight=2 max_fails=3 fail_timeout=30s;
server 10.0.0.3 weight=1 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
location /api/ {
proxy_connect_timeout 3s;
proxy_read_timeout 10s;
proxy_pass http://api_cluster;
}
}十五、负载均衡与云时代
- 阿里云 SLB
- AWS ELB
- K8S Ingress
- Service Mesh
Nginx 是基础能力。
十六、一句话总结
负载均衡的本质:用算法 + 健康检查 + 架构设计,把流量分给最合适的服务器。
十七、学习路线建议
初级:
- 轮询
- proxy_pass
- upstream
中级:
- 健康检查
- session 保持
- 灰度发布
高级:
- 多活架构
- 容灾
- 动态配置
- 服务发现
