HAProxy 无法公平地平衡服务器负载

HAProxy 无法公平地平衡服务器负载

HAProxy 似乎无法保持与服务器的连接平衡。

请记住:

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

如图所示,服务器 C 和 D 似乎比其他服务器获得更多的连接。由于这种额外的负载,它们不断停机并自动重启。

统计 配置

我尝试阅读 HAproxy 官方文档,并进行了一些 Google 搜索,但没有找到任何有用的信息。希望这里有人可以提供帮助。

几个问题:

  1. 当配置说使用循环、服务器规格相同且不应用任何权重时,为什么会出现这种情况?

  2. 什么决定了“会话”列中的“最大”子列(显示 1970、1444 等)。服务器 C、D、E 在 3K 范围内,其他 2 个略低于 2K。为什么会有差异?

  3. 如何保持一切平衡?

  4. 有人能解释一下每一列吗?我很惊讶 HAproxy 的官方文档并没有真正解释这一点。

答案1

如果去掉 C 和 D,会发生什么情况?行为会如何变化?

您的配置是什么样的?

免责声明:以下是我对 HAProxy 行为的观察,而不是实际情况。

据我所知,HAProxy 始终使用权重。如果您查看屏幕截图上的权重,会发现所有权重均为 1。运行循环调度时,我们有 4 台权重为 50 的服务器和一台权重为 1 的服务器。权重为 50 的四台服务器在会话数量方面接近完美(相差 2-3 个)。按比例来说,权重为 1 的服务器具有合适的会话数量。

尝试明确将权重设置为相同的更高值。这应该有助于其权重计算更加细粒度,从而实现更高的准确性。如果所有权重都是 1,那么它会以 20% 来处理,这不是很准确。现在,如果您将所有 5 个权重设置为 20,那么它可以以 1% 来处理。

  1. 不确定。我需要先查看配置。
  2. 我非常确定“最大”列是在任何给定点具有的最大连接数,而不是允许的实际最大值。
  3. 我们使用循环法,效果很好,因此,我们需要再次查看配置并尝试一些事情。
  4. 我认为大多数列都很清楚。对我有帮助的是查看上面的扩展列(例如队列、会话速率等)

希望这能给你提供一些值得关注的东西。

答案2

您应该使用“leastconn”方法,而不是循环法。该方法会占用更多 CPU,但如果您的会话不是特别短,则可以实现更好的负载平衡。

如果您查看,您会发现您的 A、B 和 E 服务器当前打开了约 250 个会话(会话当前)。但 C+D 的会话数是这个数字的很多倍。但由于您指定了“循环”,这些超载服务器会均匀分配所有新流量。

“leastconn” 可以让服务器在不堪重负时恢复。“roundrobin” 会持续向所有人平等发送流量(向速度慢的服务器堆积更多连接)直到服务器崩溃。

所有会话变量的含义都记录在非常全面的文档. (搜索“统计和监控”)

相关内容