三分钟看懂nginx负载均衡

87 阅读1分钟
  1. 默认轮询(Round Robin)

默认策略,请求按顺序依次分配给不同的服务器。

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}
  • 特点:请求均匀分配,适用于服务器性能相近的情况。

  1. 加权轮询(Weighted Round Robin)

给不同的服务器分配不同的权重,权重高的服务器接收更多请求。

http {
    upstream backend {
        server backend1.example.com weight=3;  # 3/6 = 50% 的请求
        server backend2.example.com weight=2;  # 2/6 ≈ 33% 的请求
        server backend3.example.com weight=1;  # 1/6 ≈ 16% 的请求
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}
  • 特点:适用于服务器性能不均衡的情况(如 CPU、内存不同)。

  1. IP 哈希(IP Hash)

同一个客户端的 IP 始终访问同一台服务器,适用于会话保持(Session Persistence)。

http {
    upstream backend {
        ip_hash;  # 基于客户端 IP 计算哈希
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}
  • 特点

    • 解决 Session 共享问题(如登录状态)。
    • 如果某台服务器宕机,该 IP 的请求会被重新哈希到其他服务器。

  1. 哈希(通用 Hash)

基于任意变量(如 $request_uri$args)计算哈希,确保相同请求始终访问同一台服务器。

http {
    upstream backend {
        hash $request_uri consistent;  # 基于请求 URI 哈希
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}
  • 特点

    • 适用于缓存优化(如相同的 URL 始终访问同一台服务器)。
    • consistent 参数可选,用于减少服务器增减时的哈希变化影响(一致性哈希)。

  1. 最少连接(Least Connections)

优先将请求分配给当前连接数最少的服务器。

http {
    upstream backend {
        least_conn;  # 最少连接优先
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}
  • 特点:适用于请求处理时间差异较大的情况(如长连接、大文件下载)。

总结对比

策略配置方式适用场景
轮询(Round Robin)默认服务器性能相近,无状态服务
加权轮询(Weighted RR)server ... weight=X服务器性能不均衡
IP 哈希(IP Hash)ip_hash需要会话保持(Session)
通用哈希(Hash)hash $var基于 URL/参数固定访问某台服务器
最少连接(Least Conn)least_conn服务器处理能力不同