HAProxy 似乎无法保持与服务器的连接平衡。
请记住:
- 使用 HAProxy v1.3.26
- 5 个均衡的服务器规格
- 算法是循环的,但不对每个服务器应用权重
- haproxy 中的全局最大连接数设置为 80,000
如图所示,服务器 C 和 D 似乎比其他服务器获得更多的连接。由于这种额外的负载,它们不断停机并自动重启。
我尝试阅读 HAproxy 官方文档,并进行了一些 Google 搜索,但没有找到任何有用的信息。希望这里有人可以提供帮助。
几个问题:
当配置说使用循环、服务器规格相同且不应用任何权重时,为什么会出现这种情况?
什么决定了“会话”列中的“最大”子列(显示 1970、1444 等)。服务器 C、D、E 在 3K 范围内,其他 2 个略低于 2K。为什么会有差异?
如何保持一切平衡?
有人能解释一下每一列吗?我很惊讶 HAproxy 的官方文档并没有真正解释这一点。
答案1
如果去掉 C 和 D,会发生什么情况?行为会如何变化?
您的配置是什么样的?
免责声明:以下是我对 HAProxy 行为的观察,而不是实际情况。
据我所知,HAProxy 始终使用权重。如果您查看屏幕截图上的权重,会发现所有权重均为 1。运行循环调度时,我们有 4 台权重为 50 的服务器和一台权重为 1 的服务器。权重为 50 的四台服务器在会话数量方面接近完美(相差 2-3 个)。按比例来说,权重为 1 的服务器具有合适的会话数量。
尝试明确将权重设置为相同的更高值。这应该有助于其权重计算更加细粒度,从而实现更高的准确性。如果所有权重都是 1,那么它会以 20% 来处理,这不是很准确。现在,如果您将所有 5 个权重设置为 20,那么它可以以 1% 来处理。
- 不确定。我需要先查看配置。
- 我非常确定“最大”列是在任何给定点具有的最大连接数,而不是允许的实际最大值。
- 我们使用循环法,效果很好,因此,我们需要再次查看配置并尝试一些事情。
- 我认为大多数列都很清楚。对我有帮助的是查看上面的扩展列(例如队列、会话速率等)
希望这能给你提供一些值得关注的东西。
答案2
您应该使用“leastconn”方法,而不是循环法。该方法会占用更多 CPU,但如果您的会话不是特别短,则可以实现更好的负载平衡。
如果您查看,您会发现您的 A、B 和 E 服务器当前打开了约 250 个会话(会话当前)。但 C+D 的会话数是这个数字的很多倍。但由于您指定了“循环”,这些超载服务器会均匀分配所有新流量。
“leastconn” 可以让服务器在不堪重负时恢复。“roundrobin” 会持续向所有人平等发送流量(向速度慢的服务器堆积更多连接)直到服务器崩溃。
所有会话变量的含义都记录在非常全面的文档. (搜索“统计和监控”)