负载均衡
最后更新于
这有帮助吗?
软负载均衡用来替代F5负载均衡的一种方式,现有的软负载均衡策略,除了nginx之外,Lvs、Apache、HAproxy都可以实现: 、
负载均衡根据影响范围可以分为两类:
GSLB:全局负载均衡,范围较大,与地域有关,如下图
SLB:Nginx是一个SLB,通常范围较小,有可能是一个机房,如下图
按照使用的网络层划分,可以分为:
四层负载均衡
七层负载均衡 (Nginx是典型的七层负载均衡)
这里的层代表的是OSI七层协议,其中四层代表网络层(IP),七层代表应用程(HTTP,FTP)。
nginx负载均衡的实现,主要使用代理模块的 proxy_pass
,将请求代理通过特定的算法转发到一组虚拟服务池(upstream server)上,如下图:
默认的负载均衡策略为轮询
weight
设置权重,值越大,权重越大,分配到此的概率就越大
down
当前server不参与负载均衡
backup
预留的备份服务器,热备,当其他服务挂了,此服务才会被使用
max_fails
允许请求失败的次数
fail_timeout
经过max_fails失败后,服务器的暂停时间
max_conns
限制最大的接收连接数
nginx默认是以轮询作为负载均衡策略,但是Nginx包含多种策略:
(时间)轮询:按照时间顺序分配到不同的后端服务器,默认方式,无需配置
加权轮询:weight值越大,分配访问的几率就越大 server backend1.test.com weight=5;
5代表,当有10个请求到达时,理论上当前服务器会命中五个请求
least_conn:最少连接数,优先选择连接数少的服务器,分发请求。
ip_hash:每个请求按照访问IP的hash值分配,那么同一IP的访问总是落到同一台服务器,可以解决分布式session共享的问题。缺陷,如果用户具有IP代理,那么IP就不是真实的IP,代理发生变化时,请求可能落到其他服务器上,解决办法:url_hash
。
url_hash:按照访问的URL的hash结果来分配请求,让每个URL定向到同一个后端服务器
hash关键数值:如果ip和url都不能满足需求,可以使用自定义key的方式