upstream模块介绍

Nginx 的负载均衡功能依赖于 ngx_http_upstream_module 模块,所支持的代理方式包括 proxy_pass 、fastcgi_pass 、memcached_pass 。upstream 是nginx作为代理及缓存的核心结构并且请求上游发送至下游都能由相关联的模块进行干预处理,常用负载均衡策略有如下6种:

1、轮询(默认)

轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除。

upstream backend{
server 172.16.0.20;
server 172.16.0.30;
}

2、权重轮询

权重轮询(weight)指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。例如以下所看到的。172.16.0.30的访问比率要比172.16.0.20的访问比率高一倍。

upstream backend{
server 172.16.0.20 weigth=2;
server 172.16.0.30 weigth=4;
}

3、ip_hash

每一个请求按访问Ip的hash结果分配,使每一个访客的固定访问到同一台后端服务器,可以解决session一致问题。

upstream backend{
    ip_hash:
    server 172.16.0.20;
    server 172.16.0.30;
}

4、fair

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream backend{
    fair;
    server 172.16.0.20;
    server 172.16.0.30;
}

5、url_hash

按访问的url的hash结果来分配请求,使每一个url定向到同一个后端服务器,后端服务器为缓存服务器时比较有效,其中,hash_method为使用的hash算法,需要注意的是:此时,server语句中不能加weight等参数。

upstream backend{
    server 172.16.0.20;
    server 172.16.0.30;
    hash $request_uri;
    hash_method crc32;
}

6、least_conn

最少连接算法很简单,首选遍历后端集群,比较每个后端的conns/weight,选取该值最小的后端,选取活跃连接数与权重weight的比值最小者为下一个处理请求的server。当然,上一次已选的server和已达到最大连接数的server照例不在选择的范围。如果有多个后端的conns/weight值同为最小的,那么对它们采用加权轮询算法。

upstream backend{
    least_conn;
    server 172.16.0.20 weight=1;
    server 172.16.0.30 weight=2;
    server 172.16.0.40 weight=4; 
}

upstream还能为每一个设备设置状态值 ,这些值的含义如下:

down 表示单前的server暂时不参与负载.
weight 默认为1.weight越大,负载的权重就越大。
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误.
fail_timeout : max_fails次失败后,暂停的时间。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

upstream bakend{ #定义负载均衡设备的Ip及设备状态 
      ip_hash; 
      server 172.16.0.20:8080 down; 
      server 172.16.0.30:8080 weight=2; 
      server 172.16.0.40:8080; 
      server 172.16.0.50:8080 backup; 
}
上一篇 下一篇