nginx负载均衡的调度算法介绍

       nginx的负载均衡模块支持4种调度算法,下面进行介绍对比

  •  轮询 (默认的调算法)
    upstream nginx {
        server 192.168.214.179;
        server 192.168.214.186;

}

      在上面的定义中每个请求按照请求次序轮流分配到后端不同的主机,如果后端某个主机死机,它能自动剔除故障系统,在upstream中还可以定义一些值来改变轮询特点,配置如下:

 upstream nginx {
        server 192.168.214.179 weight=2 max_fails=3 fail_timeout=30s;
        server 192.168.214.186 weight=1 max_fails=3 fail_timeout=30s;

}

    在默认的调度模式下,可以根据后端不同的主机设置不同的权重,权重越大,分配到的请求就越多,这种方式可以考虑到后端主机性能不均衡的原因,还可以对后端主机做出故障检测决策。

        weight:设置后端主机权重,如果这里不定义,各主机默认权重值都是 1 ,实行平均轮流调度分配。上列中第一台每处理两次请求,第二台主机才处理一次请求。

        max_fials=3: 如果后端服务连接失败超过3次,那么前端的nginx会认为该主机已经不工作了,在 fail_timeout定义的时间段30秒内部再将请求发送给它,30秒后再次尝试发送请求,只要还还再失败一次,就再次认为该主机没有工作,继续等待30秒后尝试连接,以此循环。。

  •   ip_hash
 upstream nginx {
        ip_hash;
        server 192.168.214.179 max_fails=3 fail_timeout=30s;
        server 192.168.214.186 max_fails=3 fail_timeout=30s;

}

        使用ip_hash算法,每个请求按访问ip的哈希结果分配,这样来自同一个ip的访客固定访问一台后端服务器。使用ip_hash时,后端的主机不能设置weight和backup主机。

  • fair
    upstream nginx {
        fair;
        server 192.168.214.179  max_fails=3 fail_timeout=30s;
        server 192.168.214.186  max_fails=3 fail_timeout=30s;

}

   它是比上面两种更加智能的负载均衡算法,fair算法可以根据页面的大小和加载的时间的长短来进行分配的,也就是根据后端服务器的响应时间来分配请求响应时间短的优先分配,但nginx本身并不支持fair,如果使用这种调度方式,需要下载nginx的upstream_fair模块。

  • url_hash;
  upstream nginx {
        hash    $request_uri;
        server 192.168.214.179  max_fails=3 fail_timeout=30s;
        server 192.168.214.186  max_fails=3 fail_timeout=30s;

}

    url_hash按访问URL的哈希结果进行分配请求,使每个URL定向到同一台后端服务器,这样可以进一步提高后端缓存的效率,nginx本身也不支持

url_hash,要使用需要下载安装nginx的hash软件包,在编译安装nginx时使用 –add-module=/tmp/nginx_upstream_hash-0.3 指定。

    除此之外,upstream中还可以使用 down,backup选项;

 upstream nginx {
        
        server 192.168.214.179 ;
        server 192.168.214.186 ;
        server 192.168.214.177  down ;
        server 192.168.214.188  backup;
}

      down:表示当前的主机不参与负载均衡;

      backup: 表示预留的备用主机,当其他所有非backup主机全部故障或者繁忙的时候才会请求到backup主机上,因此这台主机访问压力最轻松

点赞