原文连接:https://www.jianshu.com/p/5026ab611d4e nginx
Nginx负载均衡策略
概要
Nginx工做在OSI的第七层,能够这对http应用作一些分流策略;
Nginx反向代理服务的核心主要是转发Http请求,扮演了浏览器后端和后端服务器中转的角色;
Nginx官方测试支持5万并发链接,在实际生产环境中能够到2-3万并发数链接,1万个非活跃http keep-alive链接占用约2.5M内存。3万并发链接下,10个Nginx进程,消耗内存约150M;
负载均衡的目的是为了解决单个节点压力过大,致使Web服务响应慢的问题;
内置负载策略
策略
轮循(round-robin)默认策略redis
根据请求次数,将每一个请求均匀分配到每台服务器,若是后端服务器宕机,自动剔除。
权重(Weight)算法
把请求更多的分配到高配置的后端服务器上,默认每一个服务器的权重都是1。
ip_hash后端
同一客户端的Web请求被分发到同一个后端服务器进行处理,使用该策略能够有效的避免用户Session失效的问题。该策略能够连续产生1045个互异的value,通过20次hash仍然找不到可用的机器时,算法会退化成轮循。
最少链接(last_conn)浏览器
参数说明
weight
启用权重策略,总数按照10进行计算,若是分配为3,则表示全部链接中的30%分配给该服务器,默认值为1;
max_fail/fail_time
某台服务器容许请求失败的次数,超过最大数后,在fail_timeout时间内,新的请求不会分配给这台机器,若是设置为0,反向代理服务器则会将这台服务器设置为永久无效状态。fail_time默认为10秒;
backup
将某台服务器设定为备用机,当列表中的其余服务器都不可用时,启用备用机
down
max_conns
限制分配给某台服务器的最大链接数,超过这个数量,反向代理服务器将不会分配新的链接,默认为0,表示不限制;
代码
http { upstream server_group_name { # ip_hash; # 启用ip_hash策略 # last_conn; #启用最少链接策略 server ip or domain:port weight=2 max_fails=3 fail_timeout=15 max_conns=1000; # 使用weight设置权重为20% server ip or domain:port backup; # 设置为备用机,当其余服务器所有宕机时,启用备用服务器 server ip or domain:port down; # 设置服务器为不可用状态 } server { listen 80; location / { proxy_pass http://server_group_name; } } }
扩展策略
策略
问题
使用Nginx的反向代理,让同一个用户的请求必定转发到同一台服务器上,这种均衡策略会消耗更多的服务器资源,也增长了代理服务器的负担;
使用其余策略做为负载均衡时,会出现用户Session丢失的状况,为避免出现这种状况,能够将用户的Session存放到缓存服务器中,比较经常使用的方案时redis/memchache;
反向代理服务器也能够开启缓存服务,可是开启该项服务会增长代理服务器的负担,影响总体的负载均衡效率;
使用Nginx反向代理布置负载均衡,操做相对金丹,可是会有“单点故障”的问题,若是后台某台服务器宕机,会带来不少的麻烦,后期若是后台服务器继续增长,反向代理服务器会成为负载均衡方案的瓶颈。