当前位置:   article > 正文

Nginx的负载均衡算法之ip_hash(保持会话)_iphash 负载均衡原理

iphash 负载均衡原理

1.算法介绍

ip_hash算法的原理很简单,根据请求所属的客户端IP计算得到一个数值,然后把请求发往该数值对应的后端。

所以同一个客户端的请求,都会发往同一台后端,除非该后端不可用了。ip_hash能够达到保持会话的效果。

ip_hash是基于round robin的,判断后端是否可用的方法是一样的。
 

2.算法核心部分

  2.1. 第一步,根据客户端IP计算得到一个数值。

  1. for (i = 0; i < 3; i++) {
  2. hash = (hash * 113 + iphp->addr[i]) % 6271; //iphp->addr[i]为ip的点分十进制法的第i段
  3. }

hash3就是计算所得的数值,它只和初始数值hash0以及客户端的IP有关。

for循环 i取 012三个值,而ip的点分十进制表示方法将ip分成四段(如:192.168.1.1),但是这里循环时只是将ip的前三个端作为参数加入hash函数。这样做的目的是保证ip地址前三位相同的用户经过hash计算将分配到相同的后端server。

作者的这个考虑是极为可取的,因此ip地址前三位相同通常意味着来着同一个局域网或者相邻区域,使用相同的后端服务让nginx在一定程度上更具有一致性。

2.2. 第二步,根据计算所得数值,找到对应的后端。

w = hash3 % total_weight;

while (w >= peer->weight) {

    w -= peer->weight;

    peer = peer->next;

    p++;

}

total_weight为所有后端权重之和。遍历后端链表时,依次减去每个后端的权重,直到w小于某个后端的权重。

选定的后端在链表中的序号为p。因为total_weight和每个后端的weight都是固定的,所以如果hash3值相同,

则找到的后端相同。
 

参考:

https://blog.csdn.net/zhangskd/article/details/50208527

https://blog.51cto.com/kusorz/1766201

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/755863
推荐阅读
相关标签
  

闽ICP备14008679号