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

高级:

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