Nginx内置负载均衡策略

1、轮询(默认)

使用模块:ngx_http_upstream_round_robin

轮询策略是Nginx默认的负载均衡策略,每个客户端按时间顺序轮流分配到不用的服务器上,如果服务器不可用,自动跳过

upstream servers  {
    server 192.168.0.1:8080;
    server 192.168.0.2:8080;
    server 192.168.0.3:8080;
}

参数:

  • fail_timeout :与max_fails结合使用
  • max_fails :设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了
  • fail_time :服务器会被认为停机的时间长度,默认为10s。
  • backup :标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。
  • down :标记服务器永久停机了。

2、加权轮询

使用模块:ngx_http_upstream_round_robin

权重基于轮询策略,但有别于轮询,它基于权重值进行轮询,权重越大,轮询到的几率越大 默认权重都是1,可以手动设置调整,权重越高,被分配的次数越多,weight权重和访问比例是成正比的,用于解决后端服务器性能不均衡时,调整访问比例。

upstream servers  {
    server 192.168.0.1:8080 weight=1;
    server 192.168.0.2:8080 weight=2;
    server 192.168.0.3:8080 weight=2;
}

注意:

  • 权重越高分配到需要处理的请求越多。
  • 此策略可以与least_conn和ip_hash结合使用。
  • 此策略比较适合服务器的硬件配置差别比较大的情况。

3、ip_hash

使用模块:ngx_http_upstream_ip_hash_module

按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决共享session的问题。 使用此种策略可以解决请求上下文问题。 但需要注意,如果是压力测试或者多人同本地公网访问的情况,因为访问的源IP来自于同一IP,这会是负载都转移到同一台后端服务器上,造成过载情况

upstream servers {
    ip_hash;
    server 192.168.0.1:8080;
    server 192.168.0.2:8080;
}

注意:

  • 在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
  • ip_hash不能与backup同时使用。
  • 此策略适合有状态服务,比如session。
  • 当有服务器需要剔除,必须手动down掉(这样不利于更新和故障时候的响应)

4、最少连接

使用模块:ngx_http_upstream_least_conn_module

least_conn算法很简单,首选遍历后端集群,比较每个后端的conns/weight,选取该值最小的后端。 如果有多个后端的conns/weight值同为最小的,那么对它们采用加权轮询算法。 将请求转发给连接数较少的后端服务器。每个后端服务器配置可能不同,处理的请求也有可能不同,对于处理的请求有快有慢,least_conn是根据后端服务器的连接情况,动态的选择连接数量较少的一台服务器来处理当前的请求

upstream servers {
    least_conn;
    server 192.168.0.1:8080;
    server 192.168.0.2:8080;
}

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code