引子
1、服务器A配置比较差,如何将请求尽可能多的发往顶级服务器B和C?
2、服务器A连接次数最少,如何将请求发送给服务A?
3、如何保证服务器上的session会话?
4、怎么平均的让服务器接收请求?
5、如何保证服务的高可用,保证响应速度?
我们在使用upsteram策略时,可以指定。
Nginx内置共有四种负载均衡策略。
分别是轮询分配,权重分配,IP哈希分配,最少连接分配。
还可以使用第三方插件配置其他策略,比如fair,url_hash。
配置参数
在了解负载策略之前,先了解配置参数。
weight:权重,值越大,分配向该服务器的请求越多。
max_fails:最大失败次数,通常与fail_timeoout一起使用,在超时时间内的最大失败次数。。
fail_timeoout:连接失败超时时间,
backup:标记该服务器为备用服务器。
down:标记服务器停机。
轮询
Nginx默认的负载均衡策略,按照时间顺序,往下流。你一个,我一个,你一个,我一个。
使用方式
默认。
使用场景
服务器配置差不多,无状态请求服务。
权重
权重方式是在轮询策略基础上指定轮询的几率。
使用方式
weight=1。
我们在轮询的时候,其实每一个server后边都有一个默认值weight=1,所以说权重是在轮询基础上。
权重越大,分配到该服务器上的请求就越多。
使用场景
如果服务器硬件配置差别大,可以使用权重配置。
IP哈希
基于客户端IP进行分配,同一个客户端IP的请求,一直访问同一个服务器,这样解决session会话跨服务器问题。
使用方式
ip_hash。
使用这种方式时,就不要使用backup参数了。
使用场景
适用于有状态请求服务。
最少连接分配
某个服务器接收请求数较少,就把请求转发给它。
使用方式
least_conn。
使用场景
请求响应时间差别较大,个别服务器严重负载。
Fair
按照服务器的相应时间分配请求,响应时间短的优先分配。
使用方式
fair.
使用场景
网络环境比较复杂,宽带网络环境等因素影响。
url_hash
根据请求url的hash结果分配请求,同一个url,同一个资源请求分配到同一个机器,缓存资源,提升效率。
使用方式
url_hash;
使用场景
缓存场景。
总结
在实际使用中,并不是使用单一的某种策略,而是多种策略结合达到我们的业务场景的要求。一般情况下,加权轮询比较通用。