使用Nginx的反向代理可实现服务端负载均衡SLB(Server Load Balancing),本文介绍几种常用的Nginx软负载方法。

1、负载均衡

负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。

SLB的定义引用自伯乐在线一篇文章:http://blog.jobbole.com/97957/,废话不多说,下面几节介绍Nginx实现软负载方法。

2、默认轮询
Nginx配置文件http作用域定义upstream:

upstream test{
    server 10.69.12.10:8010;
    server 10.69.12.12:8010;
    server 10.69.12.14:8010;
}

server作用域Location:

Location /{
    proxy_pass http://test;
    ...
}

3、带权重的轮询
upstream可以指定每个server的权重,默认情况下weight为1

upstream test{
    server 10.69.12.10:8010 weight=5;
    server 10.69.12.12:8010;
    server 10.69.12.14:8010;
}

上面这样的配置,第一个server访问的概率为5/7,其他两个均为1/7。
upstream还可以指定某些server为backup,前面的机器异常的话,Nginx自动将访问分配至备用机器。

upstream test{
    server 10.69.12.10:8010 weight=5;
    server 10.69.12.12:8010;
    server 10.69.12.14:8010 backup;
}

除了backup,还可以配置如下参数:down(不参与SLB),max_fails(最大失败数),fail_timeout(超时时间),max_conns(最大连接数)。

4、IP/URL hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,如果没有session集群的话,这种方法可以解决session的问题。配置也非常简单:

upstream test{
    ip_hash;
    server 10.69.12.10:8010;
    server 10.69.12.12:8010;
    server 10.69.12.14:8010;
}

这种方法也有缺陷,如果Nginx得到的IP是代理服务器的IP,就会造成IP哈希到固定的后端服务器。所以可以用URL哈希改进:

upstream test{
    hash $request_uri;
    server 10.69.12.10:8010;
    server 10.69.12.12:8010;
    server 10.69.12.14:8010;
}

5、fair
fair策略是扩展策略,默认不被编译进nginx内核。其原理是根据后端服务器的响应时间判断负载情况,从中选出负载最轻的机器进行分流,响应时间短的优先分配。

upstream test{
    fair;
    server 10.69.12.10:8010;
    server 10.69.12.12:8010;
    server 10.69.12.14:8010;
}









标签: Nginx, SLB

评论已关闭