HAProxy不公平的服务器负载平衡

HAProxy似乎并没有保持与服务器的连接平衡。

记住这一点:

  • 使用HAProxy v1.3.26
  • 5个均衡的服务器规格
  • algorithm是循环法,但是对每个服务器都不应用权重
  • haproxy中设置的全局最大连接数为80,000

如图所示,服务器C和D似乎正在获得比其他更多的连接。 由于这个额外的负载,他们不断下降,并自动重新启动。

统计配置

我试着读HAproxy官方文档,并做了一些Googlesearch,但没有发现任何有用的东西。 希望这里有人能帮忙。

几个问题:

  1. 为什么当configuration说使用roundrobin,服务器规格是相同的,没有权重应用?

  2. 什么决定了“会话”列(即1970,1444等)中的“最大”子列。 服务器C,D,E在3K范围内,另外两个在2K以下。 为什么区别?

  3. 如何保持均衡?

  4. 有人可以解释每一列吗? 我很惊讶HAproxy的官方文档没有真正解释它。

如果你把C和D拿出来会发生什么。 行为如何改变?

你的configuration是什么样的?

免责声明:以下是我对HAProxy行为的观察,而不是实际可能的结果。

HAProxy总是使用我所了解的权重。 如果你在屏幕截图上看你的权重,那么他们都是重量1.运行roundrobin,我们有4个重量为50,重量为1的服务器。重量为50的四个服务器在会话数量方面接近完美2-3关)。 具有1个权重的服务器具有适当的会话数量。

尝试明确地将权重设置为相同的较高值。 这应该有助于它的重量计算更精细一些,这应该达到更高的精度。 如果权重是所有人的一个,那么它处理20%,这是不是很准确。 现在如果你把所有的5设置为20,那么它可以处理1%。

  1. 不确定。 我需要先看看configuration。
  2. 我相当肯定“最大”列是一个给定点的最大连接数,而不是实际允许的最大值。
  3. 我们使用循环法,它再次运行得很好,我们需要查看configuration并尝试一些事情。
  4. 我认为大部分专栏都很清楚。 帮助我的是查看上面的扩展列(例如队列,会话率等)

希望能给你一些东西来看看。

您应该使用“leastconn”方法而不是循环法。 它使用稍微多一点的CPU,但是如果你的会话不是超短的话,会有更好的负载平衡。

如果你看,你的A,B和E服务器有250个当前会话打开(Sessions Cur)。 但C + D有很多次。 但是因为您指定了“循环”,所以这些重载的服务器会得到所有新stream量的均匀分配。

“leastconn”允许服务器恢复,如果他们不知所措。 “roundrobin”不断地发送每个人的stream量(堆放更多的连接到一个缓慢的服务器),直到他们倒下。

所有会话variables的含义都logging在非常全面的文档末尾。 (search“统计和监测”)