首先nginx也是个web服务器,通常作为静态资源服务器,比如保存图片、文件,但更多的时候是被当做反向代理和负载均衡组件使用,目前nginx负载算法有5种,自带的有3种,需安装第三方插件的有2种,如下:

1、round robin(自带默认)

轮询方式,依次将请求分配到各个后台服务器中,默认的负载均衡方式,适用于后台机器性能一致的情况;挂掉的机器可以自动从服务列表中剔除。

2、weight(自带)

根据权重来分发请求到不同的机器中,指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

upstream bakend { 
server 192.168.1.1 weight=20;   
server 192.168.1.2 weight=10;

}  设置weight之后,192.168.1.1有三分之二的概率处理请求,192.168.1.2 有三分之一的概率处理请求,可根据需要将服务器配置较高的weight设置高。

3、ip_hash(自带)

根据请求者ip的hash值将请求发送到后台服务器中,可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题,这种算法的最大优势在于一定程度上解决了集群部署环境下session共享的问题。

4、fair(第三方)

智能调整调度算法:动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少。需安装upstream_fair模块。

upstream bakend { 
server 192.168.1.1;   
server 192.168.1.2;   
fair;
}

5、url_hash(第三方)

按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,当后台服务器为缓存服务(squid、varnish)的时候效率高。

upstream backend {
server squid1:3128;   
server squid2:3128;   
hash $request_uri;   
hash_method crc32;   
}

总结:

#定义负载均衡设备的 Ip及设备状态    

upstream myServer {   
    server 127.0.0.1:9090 down; 
    server 127.0.0.1:8080 weight=2; 
    server 127.0.0.1:6060; 
    server 127.0.0.1:7070 backup; 
}

down:表示当前的server不参与负载。

weight:默认是1,weight越大,负载的权重就越大。

backup:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

大部分的nginx的负载都采用默认轮询方式,但其他算法也有自己的应用场景,具体还应根据服务情况分析。