web服务器-nginx负载均衡
一 负载均衡的作用
- 负载均衡:
- 分摊到多个操作单元上进行执行,和它的英文名称很匹配。就是我们需要一个调度者,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡。
二 负载均衡算法
- 源地址哈希法:根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。
- 轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。
- 随机法:通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。
- 加权轮询法:不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。
- 加权随机法:与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。
- 最小连接数法:由于后端服务器的配置不尽相同,对于请求的处理有快有慢,最小连接数法根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。
三 常见的几种负载均衡方式
- 轮询(默认)——每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
- weight ——指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
- ip_hash ——每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器。
- backup——其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
- down——表示单前的server暂时不参与负载
- fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。
四 编码实战
-
关键字upstream
- upstream模块 来实现nginx将跨越单机的限制,完成网络数据的接收、处理和转发。我们主要使用提到的转发功能进行调度分发。
# 举例,以下IP,端口无效 upstream test{ server 11.22.333.11:6666 weight=1; server 11.22.333.22:8888 down; server 11.22.333.33:8888 backup; server 11.22.333.44:5555 weight=2; } # down 表示单前的server临时不參与负载. # weight 默觉得1.weight越大,负载的权重就越大 # backup: 其他全部的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻 server { listen 80; server_name 8080.max.com; location / { proxy_pass http://test; index index.html index.htm; } }
-
源地哈希法
- 就是对访问用户的IP进行hash后的结果进行分配,这样每一个用户固定请求同一个后端服务器,能够解决session的问题。
upstream guwenjie_http { ip_hash; server **.***.***.***:8855; server **.***.***.***:8811; }
-
fair法(非官方)
- 这个fair表示的是按照服务器响应时间的长短来进行分发的,服务器响应时间越短的,优先分发。
upstream guwenjie_http { server **.***.***.***:8855; server **.***.***.***:8811; fair; }