美文网首页
nginx 负载均衡之ip_hash

nginx 负载均衡之ip_hash

作者: 那钱有着落吗 | 来源:发表于2020-10-14 16:37 被阅读0次

1. nginx 负载均衡之ip_hash

image.png
  • ip_hash这种负载均衡模式根据个人理解就是:例如多个用户通过nginx访问到了后端的tomcat集群中,这个时候因为有不同用户,所以ip也不同,ip+hash算法计算的hash值都传到了tomcat,nginx就记录了这个ip和hash值,那么下次同一个ip过来还是会分配到这个tomcat的。

2. hash算法的逻辑图例

image.png

使用

upstream tomcats {
             ip_hash;
         server 192.168.121.166:8080 weight=1 max_conns=2;
         server 192.168.121.167:8080 weight=2 max_conns=2;
         server 192.168.121.167:8088 weight=5 max_conns=2;
      }

3. 详细的看hash算法是如何实现的

可以查看nginx的源码,找到nginx的软件目录,我本地的是在home/software/nginx-1.18/src/http/modules 下的ngx_http_upstream_ip_hash_module.c中


image.png

可以查询addrlen的值是3,而在这个关键代码中大致可以了解到,其实hash值是根据ip段的前三个来计算的,例如192.168.1.12,192.168.1.13,192.168.1.14 经过nginx的hash值计算是根据ip段的192 168 1来计算的。所以如果在本地的虚拟机中来使用这种负载均衡的方式,那么192.168.1.12,192.168.1.13,192.168.1.14 这三个ip访问的其实是一台tomcat。

4. 注意

如果在集群中的某台服务器出现故障,我们想要从nginx的集群配置中移除掉,我们不可以直接的将那一行删掉,比如server 192.168.121.167:8080 weight=2 max_conns=2;删掉,如果直接删掉会导致nginx的hash算法重新计算,那么用户的回话或者说缓存都会失效掉,所以这里如果不用这台服务器,直接比较为down即可,也就是 server 192.168.121.167:8080 down
这么做就可以了。

upstream tomcats {
             ip_hash;
         server 192.168.121.166:8080 weight=1 max_conns=2;
         server 192.168.121.167:8080 weight=2 max_conns=2;
         server 192.168.121.167:8088 weight=5 max_conns=2;
      }

5.那么如果解决第四点提到的问题呢?

如果一台机器出现问题,都要重新的计算hash值,用户的缓存会话都丢失掉,那么用户请求的时间就会加长很多,那么这个时候我们就需要用到一致性hash算法:


image.png

这样的hash算法会有一个好处,就是在某台服务器发生故障的情况下可以保障大部分的用户体验不出现问题,之前的ip_hash是因为少了节点,note_count数量减少所以导致每次请求都需要重新计算分配到哪个节点,但是一致性hash算法不会,它仅会影响到少部分靠近更新节点的位置,比如节点3由于故障移除掉了,那么它上游的两个用户请求会到节点4,而其他的用户都不会改变

相关文章

  • nginx 负载均衡之ip_hash

    1. nginx 负载均衡之ip_hash ip_hash这种负载均衡模式根据个人理解就是:例如多个用户通过ngi...

  • Nginx负载均衡_轮训策略与加权轮询

    章节目录 Nginx 负载均衡调度策略 加权轮询演示 ip_hash url_hash Nginx 负载均衡调度策...

  • CentOS7.0 + Nginx + Tomcat

    1.Nginx负载均衡配置 # vim conf/nginx.conf upstream xxx{ip_hash;...

  • nginx负载均衡策略:ip_hash、url_hash

    nginx负载均衡策略:ip_hash、url_hash 转发:https://blog.csdn.net/den...

  • Nginx (4)

    Nginx之负载均衡 Nginx 通过Upstream 模块进行负载均衡。 upstream 支持的负载均衡算法N...

  • 负载均衡

    负载均衡图例负载均衡.png 负载均衡策略 轮询 ip_hash 均衡参数 down 表示当前的服务不参与负载均衡...

  • 使用Spring Session和Redis解决分布式Sessi

    前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用的均衡算法有IP_Hash、轮训、根据权重、随机等...

  • Nginx负载均衡小知识

    Nginx 负载均衡配置Nginx 重试次数限制Nginx 超时重试 Nginx 负载均衡 负载均衡策略 roun...

  • Nginx相关知识点

    1. nginx负载均衡的六种策略 轮询:默认方式 weight:权重方式 ip_hash:依据ip分配方式 le...

  • Nginx-进阶学习

    目录: Nginx集群和负载均衡 一、Nginx集群和负载均衡 1、集群 2、负载均衡-权重(1)负载均衡-轮训:...

网友评论

      本文标题:nginx 负载均衡之ip_hash

      本文链接:https://www.haomeiwen.com/subject/pnswpktx.html