1、轮询(默认)
轮询(Round-Robin,RR):默认情况下Nginx服务器实现负载均衡的算法就是轮询,轮询策略按照顺序选择组内服务器处理请求。如果一个服务器在处理请求的过程中出现错误,请求会被顺次交给组内的下一个服务器进行处理,以此类推,直到返回正常的响应为止。但如果所有的组内服务器都出错,则返回最后一个服务器的处理结果。
upstream myserver{
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
2、weight
加权轮询(Weighted Round-Robin,WRR):为组内服务器设置权重,权重值高的服务器被优先用于处理请求。此时组内服务器的选择策略为加权轮询。组内所有服务器的权重默认设置为1,即采用轮询处理请求。
upstream myserver{
server 192.168.1.100:8080 weight=1;
server 192.168.1.101:8080 weight=2;
}
3、ip_hash
ip_hash用于实现会话保持功能,将某个客户端的多次请求定向到组内同一台服务器上,保证客户端与服务器之间建立稳定的会话。只有当服务器处于无效(down)的状态时,客户端请求才会被下一个服务器接收和处理。注意:使用ip_hash后不能使用weight,ip_hash和主要根据客户端IP地址分配服务器,因此在整个系统中,Nginx服务器应该是处于最前端的服务器,这样才可以获取到客户端IP地址,否则它得到的IP地址将是位于它前面的服务器地址,从而就会产生问题。
upstream myserver{
ip_hash;
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
4、least_conn
lease_conn用于为网络连接分配服务器组内的服务器,在功能上实现了最小连接数负载均衡算法,在选择组内的服务器时,考虑各服务器权重的同时,每次选择的都是当前网络连接最少的那台服务器,如果这样的服务器有多台,就采用加权轮询选择权重值大的服务器。
upstream myserver{
least_conn;
server 192.168.1.100:8080 weight=1;
server 192.168.1.101:8080 weight=2;
}
第三方
Nginx扩展第三方模块后得到的算法:fair、url_hash等
1、fair
用于为响应时间分配服务器组内的服务器,他是按后端服务器的响应时间来分配请求,响应时间越短的越优先分配,需要第三方模块的支持nginx-upstream-fair-master
upstream myserver {
fair;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}
2、url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。注意:使用hash后不能使用weight。需要第三方模块的支持ngx_http_upstream_hash_module
upstream myserver {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
hash $request_uri;
hash_method crc32;
}