前言:
此时看官们对“nginx应用扩容”大致比较着重,小伙伴们都想要学习一些“nginx应用扩容”的相关资讯。那么小编同时在网摘上搜集了一些关于“nginx应用扩容””的相关文章,希望大家能喜欢,各位老铁们快快来学习一下吧!上一篇文章 Nginx负载均衡之ip hash与hash模块,弥补Round-Robin的缺陷我们介绍了upstream_hash算法,可以按一定的条件 将固定的请求转发到固定的server上。
有遇到一个问题,当上游服务器出现问题的时候,或者扩容的时候会产生什么样的情况。
假如有5台上游服务器,server0 …… server4, 请求根据key进行取模 hash算法: 为key % 5
会产生如下结果:
key5 被upstream到 server0上。
……
key9 被upstream到 server4上。
当server4挂掉了后,原本美好的事情就变成这样:
hash算法:key%4
key5 被upstream到 server1上。
key6 被upstream到 server2上。
key7 被upstream到 server3上。
key8 被upstream到 server0上。
key9 被upstream到 server1上。
这一下就全都打乱了,如果上游服务器有缓存的话,会导致大批量缓存失效的问题。有可能会导致比较严重的事故。
那么一致性hash算法可以有效缓存这种问题。
假设扩容前有4台服务器,均匀地分布在一个环上。
我们的请求key 经过hash算法是0到2的32次方也是均匀的分布在环上,就去找下一个比它大的Node。
当需要扩缩容的时候只会影响两个Node中间的请求。这就尽可能的减少了影响范围。
比如现在在Node2 和Node4之间增加了一个节点Node5。
可以看到原来Node2 到 Node4之间的5个请求,只影响了3个key的请求,只有这3个请求的缓存没有命中了被请求到了Node5上。
当然这并没有解决宕机后的路由不发生变化,都宕机了也无法解决。
使用配置:只需要在hash模块后 加上 consistent就可以了
Syntax: hash key [consistent];Default: —Context: upstream
标签: #nginx应用扩容