负载均衡可以将前端的请求分担到后端多个节点上,提升系统的响应和处理能力。
负载均衡策略
负载均衡的策略可以分为两大类:内置策略
和扩展策略
- 内置策略:一般会直接编译进Nginx内核,常用的有
轮询
、ip hash
- 扩展策略:
fair
、url hash
等
普通轮询方式
默认选项,当weight
不指定时,各服务器权重相同, 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
|
|
加权轮询方式
指定轮询几率,weight
和访问比率成正比,用于后端服务器性能不均的情况。
|
|
权重越高,在被访问的概率越大,如上例,分别是30%,70%。
轮询流程图
首先将请求都分给高权重的机器,直到该机器的权值降到了比其他机器低,才开始将请求分给下一个高权重的机器;当所有后端机器都down掉时,nginx
会立即将所有机器的标志位清成初始状态,以避免造成所有的机器都处在timeout
的状态
ip hash方式
默认情况下,Nginx 会为你提供轮询作为负载均衡策略。
采用ip_hash
策略解决登录信息丢失,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到同一个服务器,当然,如果所 hash
到的 server
当前不可用,则请求会被转移到其他server
。
每个请求按访问ip
的hash
结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
|
|
fair
根据后端服务器的响应时间判断负载情况,从中选出负载最轻的机器进行优先分配。
|
|
缺点:需要「负载均衡器」不停的去统计每一台后端服务器对请求的处理速度,比如一分钟统计一次,生成一个后端服务器处理速度的排行榜,然后「负载均衡器」根据这个排行榜去转发服务。