nginx的upstream配置方法

nginx作为web server更像是一个请求分发器,可进行多种协议分发,如:proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, and memcached_pass等。nginx的upstream流量分发有如下一些方式(注意,此处nginx版本为1.8.0):

weight赋值

upstream backend {
    server backend1.example.com       weight=5;
    server backend2.example.com:8080 max_fails=3 fail_timeout=30s;
    server unix:/tmp/backend3;

    server backup1.example.com:8080   backup;
    server backup2.example.com:8080   backup;
}

server {
    location / {
        proxy_pass http://backend;
    }
}

其实没有配置weight时,默认每个weight为1而已。server可以写域名,或者IP,或者unix socket文件地址,(Tips:本地连接时,通过unix socket文件进行连接比TCP网络连接要快,相对于回环设备127.0.0.1减少了网络包头的组装,相对于本地IP减少了网卡数据拷贝)。上面的例子中,如果有7个请求,第一个server分得5个,后面两个server各分得1个,当前面三个server都不可用时,会返回备用server的结果。向后端发起请求,如果失败,采用round-robin的方式进行重试,所谓round-robin即轮询,即(i+1) mod size。例子中的max_fails=3 fail_timeout=30s用来决定一个后端是否可用。

IP Hash

upstream backend {
    ip_hash;

    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
    server backend4.example.com;
}

weight赋值的好处是可以人为根据机器配置来控制流量分配,像阿里云的SLB(Server Load Balance)就是这玩意。而ip hash的好处是可以将同一个用户的请求打到一台后端上,这可以提高cache的命中率,也方便追踪问题日志。server后面除了可以接backup,还可以用down,像上面的例子所示,即如果一台后端挂掉了,可以先不移除,这确保了hash的size不变,最大限度减少对命中率的影响。

least connected

least_conn模式会更好的均衡各个后端的负载,当某些请求耗时更长时,nginx会认为这些后端比较繁忙,从而选择其他负载更小的后端。相比于按权重和ip hash,least_conn会让后端的处理压力更平均。它的使用与ip hash一样简单:

upstream myapp1 {
    least_conn;
    server srv1.example.com;
    server srv2.example.com;
    server srv3.example.com;
}

 

发表于 2015年08月14日 00:50   评论:0   阅读:2382  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo