ydswin

忘记背后,努力面前的,向着标杆直跑

导航

Nginx负载均衡常用算法

Nginx 作为反向代理服务器时,支持多种负载均衡策略,常用的核心策略可归纳为 4 种基础策略 + 2 种扩展策略,以下是详细分类和配置说明:


一、4 种基础负载均衡策略

1. 轮询(Round Robin)

原理:默认策略,按顺序依次将请求分配给后端服务器。
配置示例

upstream backend {
    server 10.0.0.1;
    server 10.0.0.2;
}

适用场景:后端服务器性能均匀,无特殊会话保持需求。

2. 加权轮询(Weighted Round Robin)

原理:根据服务器权重分配请求,权重越高分配的请求越多。
配置示例

upstream backend {
    server 10.0.0.1 weight=3;  # 60% 流量
    server 10.0.0.2 weight=2;  # 40% 流量
}

适用场景:后端服务器性能不均衡(如 CPU、内存差异)。

3. IP 哈希(IP Hash)

原理:根据客户端 IP 地址计算哈希值,固定将同一 IP 的请求分配到同一服务器。
配置示例

upstream backend {
    ip_hash;
    server 10.0.0.1;
    server 10.0.0.2;
}

适用场景:需要会话保持(如登录状态依赖同一后端服务器)。

4. 最少连接(Least Connections)

原理:将请求分配给当前连接数最少的服务器。
配置示例

upstream backend {
    least_conn;
    server 10.0.0.1;
    server 10.0.0.2;
}

适用场景:后端服务器处理时间差异较大(如长连接服务)。


二、2 种扩展负载均衡策略

1. 通用哈希(Hash)

原理:自定义哈希键(如 URL、请求头、变量),保证相同键的请求分配到同一服务器。
配置示例

upstream backend {
    hash $request_uri consistent;  # 按请求 URI 分配
    server 10.0.0.1;
    server 10.0.0.2;
}

适用场景:缓存优化、特定资源固定到特定服务器。

2. 随机(Random)

原理:随机选择服务器,可配合权重使用。
配置示例

upstream backend {
    random;
    server 10.0.0.1 weight=2;
    server 10.0.0.2 weight=1;
}

适用场景:大规模后端集群,避免算法开销影响性能。


三、高级策略(需第三方模块)

1. 基于响应时间(Response Time)

原理:选择响应时间最短的服务器(需 nginx-upstream-fair 模块)。
配置示例

upstream backend {
    fair;
    server 10.0.0.1;
    server 10.0.0.2;
}

适用场景:动态感知后端服务器性能波动。

2. 健康检查(Health Check)

原理:自动屏蔽故障节点(需 nginx_upstream_check_module 模块)。
配置示例

upstream backend {
    server 10.0.0.1;
    server 10.0.0.2;
    check interval=3000 rise=2 fall=3 timeout=1000;
}

四、策略对比与选择建议

策略 会话保持 动态权重 性能开销 适用场景
轮询 简单均衡
加权轮询 服务器性能不均
IP 哈希 会话保持需求
最少连接 长连接或处理时间差异大
通用哈希 缓存优化、资源固定分配
随机 大规模集群

五、完整配置示例

http {
    upstream backend {
        least_conn;                  # 最少连接策略
        server 10.0.0.1 weight=3;    # 权重 3
        server 10.0.0.2 weight=2;    # 权重 2
        server 10.0.0.3 backup;      # 备份服务器(主节点宕机时启用)
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
        }
    }
}

六、最佳实践

  1. 会话保持需求:优先选择 ip_hashhash
  2. 动态性能感知:使用 least_conn 或第三方响应时间策略。
  3. 故障容灾:通过 backup 标记备份服务器。
  4. 监控与调优:结合日志和监控工具(如 Prometheus)分析流量分布。

通过合理选择负载均衡策略,可以显著提升应用的可用性和性能。

posted on 2024-03-03 00:02  dashery  阅读(113)  评论(0)    收藏  举报