我怎样才能将客户端均匀地分配给服务器,在Nginx中使用hash_ip作为loadbalancer?

我知道Nginx可以使用hash_ip将特定的客户端绑定到服务器。

我的问题是,当Nginx使用客户端IP散列时,是否将客户端均匀地分配给服务器,而不pipe客户端使用何种IP?或者取决于使用哪个IP?

如果它依赖于客户端IP,我怎样才能平均分配客户端到服务器?

另外,有没有办法检查Nginx使用hash_ip创build的哈希表?

你几乎保证有一个不均匀的分布,因为客户IP不会完全散列。 此外,来自这些客户IP的请求的速率也不会完全平衡。 但是,如果客户端IP数量足够多,则不均匀性会相对较小,实际上可以忽略不计。

如果你需要绝对平均的分配,你处于一个受到伤害的世界。 循环分配将使您的请求计数变得平稳,但是这是一个非常罕见的系统,在这个系统中,所有请求都需要完全相同的时间来处理,所以一组循环分配的后端的负载将不会完全平坦。 通过使用最less连接路由algorithm,您可以在一定程度上改善负载情况,即在服务时间大幅变化且不可预知的情况下,负载平衡器将作业发送到后端的数量最less的“正在进行中”工作,假设每个并发连接对瞬时系统负载作出大致相等的贡献。

为了进一步改善这种情况,需要使用任何数量更复杂的调度algorithm之一来尝试和平衡负载,但是如果没有完善的服务每个请求所需的资源的先验知识,注定要近似。 请注意,就我所知,nginx中没有任何高级调度algorithm。

如果平衡后端负载非常重要,那么最好的做法是在系统中添加某种“反馈”,以便平衡器了解后端的当前状态。 正确地做到这一点涉及到一定程度的基本控制理论 ,因为作业之间的差距被传送到后端,以及该作业对系统负载的影响。 如果没有这样的控制,你最终会把你的系统轰入尘埃中。

是的,这是一个复杂的问题。 这就是为什么每个人只是configuration他们的负载平衡器的循环或最less连接,将他们的会话和caching集中存储,并且将窃听器closures到酒吧。

不知道这是否仍然有效,但我碰到这个:

https://github.com/gnosek/nginx-upstream-fair