Skip to content

Nginx ~ 负载均衡 ​

一、什么是负载均衡(Load Balancing)? ​

定义: ​

负载均衡是将用户请求合理分配到多台服务器上,避免某一台服务器压力过大,从而提高系统的性能、稳定性和可用性。

简单比喻:

  • 就像餐厅排队分桌
  • 不让一个服务员累死
  • 保证整体效率最高

二、为什么一定需要负载均衡? ​

没有负载均衡: ​

用户 → 服务器A(爆)

结果:

  • 响应慢
  • 崩溃
  • 全站不可用

有负载均衡: ​

用户 → 负载均衡器 → 服务器A/B/C

优势:

  • 🚀 提升吞吐量
  • 🛡 提高可用性
  • 🔁 支持扩容
  • 🔥 防止单点故障

三、负载均衡的三大层级 ​

层级作用示例
DNS 负载均衡粗粒度CDN
四层负载均衡(L4)TCP/UDPLVS
七层负载均衡(L7)HTTPNginx

四、负载均衡的核心算法 ​

1️⃣ 轮询(Round Robin) ​

A → B → C → A

2️⃣ 权重轮询(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;
}
nginx
sticky cookie srv_id;

八、负载均衡 + 高可用架构 ​

架构图: ​

用户
 ↓
VIP (Keepalived)
 ↓
Nginx1 / Nginx2
 ↓
后端集群

九、负载均衡与微服务 ​

在微服务中:

  • Nginx = API 网关

  • 结合:

    • 服务发现
    • 动态路由
    • 熔断
    • 限流

十、负载均衡与容灾 ​

同城多机房: ​

DNS → A机房Nginx
    → B机房Nginx

异地灾备: ​

  • 主站
  • 备站
  • DNS 切换

十一、负载均衡监控指标 ​

必须监控:

  • QPS
  • 延迟
  • 错误率
  • 每台服务器连接数
  • 后端状态

十二、负载均衡常见故障 ​

问题原因
502后端挂
请求集中权重不合理
Session 丢失没做会话保持
单点故障只有一个负载均衡

十三、企业级负载均衡最佳实践 ​

  1. 入口双机热备
  2. 自动健康检查
  3. 支持灰度发布
  4. 有监控
  5. 有日志
  6. 有熔断
  7. 有限流
  8. 有预案
  9. 可扩容
  10. 可回滚

十四、完整企业级配置示例 ​

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 保持
  • 灰度发布

高级: ​

  • 多活架构
  • 容灾
  • 动态配置
  • 服务发现