在本博客的Nginx负载均衡里,我提到了weight这样负载均衡的算法,其实Nginx负载均衡的算法还有以下几种有意思的算法:
1: ip_hash
upstream http{
ip_hash;
server 192.168.2.101:8080 ;
server 192.168.2.102:8080 ;
}
作用:
根据请求ip的hash值将请求发送到后台服务器中,可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题
针对场景:
seesion是以本地文件存储的形势,没有做session集中管理,在生产项目中我建议以Redis来缓存session
有意思的问题:
顺便提一个有意思的场景,在实际我们用Nginx来阻止高频率的访问中,会出现IP误伤的情况,原因在于Nginx通过ip来限制访问,但比如长城宽带这类宽带,很有可能一个小区出口就那么几个ip,那么就会产生误伤的问题,直接就封禁了一个小区的访问;
2:url_hash
upstream http{
hash $request_uri;
server 192.168.2.101:8080 ;
server 192.168.2.102:8080 ;
}
作用:
根据请求的url进行hash算法决定打入哪台服务器,可以保证同一个Url只打进固定的服务器
针对场景:
当我们后端服务器作为缓存服务器或者文件服务器的时候,一旦缓存住了资源,再此收到请求,就可以从缓存中读取,既减少了带宽,也减少的下载时间,以下画图更方便新人理解
3: fair
upstream http{
fair;
server 192.168.2.101:8080 ;
server 192.168.2.102:8080 ;
}
作用:
依据后端响应时间的长短来分配
针对场景:
在后端服务器响应的情况下依据响应时间短的优先分配
4: weight
upstream http{
server 192.168.2.101:8080 weight=10;
server 192.168.2.102:8080 weight=10;
}
作用:
人工配置权重
针对场景:
在后端服务器性能不一的情况下使用,比如有的服务器8核32G,有的服务器是4核8G内存,那么性能较高的服务器就会权重加大