负载均衡
GSLB 与 SLB
负载均衡根据影响范围可以分为两类:
GSLB:全局负载均衡,范围较大,与地域有关,如下图
SLB:Nginx是一个SLB,通常范围较小,有可能是一个机房,如下图
四层与七层负载均衡
按照使用的网络层划分,可以分为:
四层负载均衡
七层负载均衡 (Nginx是典型的七层负载均衡)
这里的层代表的是OSI七层协议,其中四层代表网络层(IP),七层代表应用程(HTTP,FTP)。
nginx实现负载均衡的原理
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的方式
最后更新于