
小王反复看了Nginx的配置 , 没有问题 , 节点的upstream都配置了 , 也没有配置权重 , 也都单独试过网页能打开 。 但是就是每次都是一个节点门庭若市 , 另一个节点门可罗雀 。
小王试了好久 , 百思不得其解 , 无奈求助了资深程序员老李 。
老李不愧是资深程序员 , 很快就找出了问题所在 。 原来问题出在Nginx的负载均衡策略上面 。
小王配置的两个节点负载均衡 , 采用的是ip_hash策略 , 即基于客户端IP地址来确定访问哪个服务节点的策略 。 其算法很简单 , 根据请求所属客户端IP计算得到一个数值 , 然后把请求发往该数值对应的后端 。 所以同一个客户端的请求 , 都会发往同一个后台服务节点 。 除非该节点不可用了 。 Ip_hash策略的优点是能够保持会话 。
那么这个策略有什么问题呢?老李微笑的告诉小王 , 这个问题出在Nginx对Ip_hash的算法上 。 这段算法的核心部分如下:
for (i = 0; i < 3; i++) {
hash = (hash * 113 + iphp->addr[i
) % 6271; //iphp->addr[i
为ip的点分十进制法的第i段
通过客户端ip计算得到一个值 。 但是问题就出在这段算法上 , 我们可以看到 , 这段算法循环了三次 , 而正常的IP地址有四个部分 , 这里只是将IP的前三个部分作为参数加入hash函数 。 因此 , 如果前三部分是一样的话 , 那么意味着他们都会被分配到同一台服务器上 。
那么为什么Nginx要这样设计呢?因为IP地址前三位相同一般意味着来自同一个局域网或者相领区域 , 使用相同的后端服务能够让Nginx在一定程度上更具有一致性 。
所以因为客户的内网用户端多在同一个网段 , 所以最终的结果就是在同一个网段的请求都被Nginx分发到了一个节点上 , 导致了两个节点的流量不均衡 。
听了老李的话 , 小王恍然大悟 。 看来对技术永远不能一知半解 , 不知道在什么小地方就隐藏着潜在的问题 。
- 手机同质化一直非常的严重|小米13系列好评满满,骁龙8gen2比苹果a16更强
- 买七彩虹RTX30显卡、整机送大礼了!CF限定礼包快抢来自买七彩虹的消息|买七彩虹rtx30显卡、整机送大礼了!cf限定礼包快抢
- 12月13日消息|苹果appletv4k搭载的a15处理器为5核心
- AMD的RX7900系列显卡昨晚解禁了|RX 7900赢回一波 4K视频生产力终于超越RTX4090
- 月球是哪儿来的?同样是内太阳系行星的水星、金星和火星|月球身世之谜是怎么形成的?
- 当代超级计算机的局限性|量子计算的现在与未来
- 坐在隔壁工位的哔哥最近感慨很深|盘点qq下架的衍生品
- 13代酷睿目前还没有65WTDP型号的主流产品|绝配12代酷睿华擎迷你准系统到手1279元(1.92L体积)
- 12月14日|oppo第二颗自研芯片将到来,网友猜测可能是手环一类的
- 对于最近想要购买手机的小伙伴而言|骁龙8gen2的新旗舰一加acepro值得入手吗?
