upstream模块调度算法
调度算法一般分几类:
- 第一类是静态调度算法:负载均衡器根据自身设定的规则进行分配,不需要考虑后端节点的健康情况。例如轮询、加权轮询、哈希类型调度算法。
- 第二类是动态调度算法,负载均衡器会判断后端节点的当前状态,来决定是否分发请求。例如链接数最少的优先分发,响应时间短的优先分发,如least_conn、fail等都是动态调度。
rr轮询(round-robin)
按照请求顺序逐一分配给不同的后端节点服务器,如果后端节点宕机,宕机的服务器会被自动从地址池中剔除,新的请求会发给正常的服务器。
wrr(权重轮询)
给后端节点服务器增加权重,数值越大,优先获得客户端请求,可以以服务器配置来决定比例大小,从而解决新旧服务器的性能不均衡问题等。
upstream backend {
server 192.168.178.122 weight=1;
server 192.168.178.121 weight=5;
}
默认是rr轮询机制。使用systemctl stop network,但是只能在虚拟机上使用
ip_hash
每个请求按客户端IP的hash结果分配,当新的请求到达,将其客户端IP通过哈希算法得到一个唯一值,在随后的客户端请求中,如果客户端的IP哈希值相等,该请求就会固定发给一台服务器。
该调度算法可以解决动态网页中的session共享问题。
注意了使用ip_hash不得再使用weight、backup两个参数,造成冲突了,即使写了也不生效。
upstream chaoge_backend {
ip_hash;
server 192.168.178.121;
server 192.168.178.122;
}
fail
该算法根据后端服务器节点的响应时间来分配,响应时间短的优先分配,该算法根据页面大小和加载时间长短进行负载均衡,nginx本身不支持fail形式,如果要支持该算法,必须下载nginx的upstream_fail模块
用的比较少
upstream chaoge_backend {
fail;
server 192.168.178.121;
server 192.168.178.122;
}
least_conn
该算法根据后端节点的链接数决定分配请求,哪个机器链接数少,就发给谁。一般给闲置的机器加上这个参数
url_hash
和ip_hash类似,该算法根据客户端请求的URL信息进行hash得到唯一值,让每个URL固定的发给同一个后端服务器,后端服务器为缓存服务器效果最佳。
Nginx本身是不支持url_hash的,需要单独安装hash模块
url_hash(web缓存节点)和ip_hash(会话保持)功能类似。
用的比较少
upstream chaoge_backend {
server squid1:3128;
server squid:3128;
hash $request_uri; # 针对当前的请求得到唯一值
hash_method crc32; # hash的算法
}
网友评论