gpt4 book ai didi

node.js - OpenShift HAProxy 扩展不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 22:00:39 26 4
gpt4 key购买 nike

我一直在尝试让 OpenShift 的 HAProxy 扩展与任何 NodeJS Express 4 应用程序一起使用(它本质上是一个 REST API),但我运气不佳。

我正在使用 loader.io 的压力测试工具,每分钟只有 100 个用户(从 0 开始上升),因为我确信至少 NodeJS/Express 应该能够处理这个问题。现在,这确实会在 60 秒内生成大约 10-20k 个请求,但仍然如此。

请求开始冲击服务器后会发生什么,我可以看到 CPU 上升,内存保持相当稳定,HAProxy 的日志文件让我知道它即将扩展。

从来没有。 HAProxy 在扩展之前崩溃,然后我失去了与 OpenShift 主机的 SSH 连接。不过过了一段时间它就会回来。

有一次我确实看到它达到了默认的 128 个连接限制,然后尝试启动另一个齿轮,但由于请求不断传入,我猜它无法处理它?<​​/p >

起初我以为这是由于使用了小齿轮,因为我在“top”运行,发现 CPU 负载激增,最终断开连接。

我删除了该应用程序并切换到small.highcpu gears(每小时收费)。

当它应该扩展时(并发用户少于 100 个)仍然崩溃。

small.highcpu gear 确实做了一些不同的事情,因为它重新启动后,它添加了一个新的 gear,但它不会缩小(即使所有流量都停止了),所以我必须手动缩小

如果我保持第二档并尝试在 1 分钟内再次对 100 个用户进行压力测试,HAProxy 仍然会下降(内存使用和 CPU 似乎没问题),并且不久之后我就会失去 SSH 连接。而且,这一次它不会自己出现。我还在我的 NodeJS 应用程序中收到以下错误:

{ [Error: socket hang up] code: 'ECONNRESET' }
{ [Error: socket hang up] code: 'ECONNRESET', sslError: undefined }

如果我在此之后手动重新启动 HAProxy(我有点必须这样做,因为它没有出现),我可以看到本地齿轮已关闭,而第二个齿轮已启动,这意味着我的 NodeJS 应用程序在第一个齿轮上崩溃了,但仍保持在线状态。

这真的是有意的行为吗?在处理 NodeJS 和 HAProxy 时我应该采取不同的做法吗?

如果我什至无法每分钟处理 100 个用户,我真的无法证明为这样的服务付费是合理的,因为我确信我最终会达到远远超过 100 个用户的峰值。

更新:这是一个 loader.io 图表/报告,它显示了 HAProxy 何时放弃: http://ldr.io/1tV2iwj

更新2:我尝试使用 Blitz 而不是 loader.io,只是为了确定 HAProxy 何时变得疯狂。 Blitz 最终命中 12,000 次,错误 26,000 次,超时 4,000 次。

此外,HAProxy 宕机了,而且似乎永远不会恢复。这次我决定等待,几分钟后,本地设备确实恢复了。不过,它并没有带来任何额外的装备。

这也是 Blitz 测试发生时 HAProxy 告诉我的内容(在它崩溃并且我断开连接之前):

==> app-root/logs/haproxy_ctld.log <==
I, [2014-10-13T07:14:48.857616 #74934] INFO -- : add-gear - capacity: 143.75% gear_count: 1 sessions: 23 up_thresh: 90.0%

==> app-root/logs/haproxy.log <==
[WARNING] 285/071506 (74918) : Server express/local-gear is DOWN, reason: Layer7 timeout, check duration: 10002ms. 0 active and 0 backup servers left. 128 sessions active, 0 requeued, 0 remaining in queue.
[ALERT] 285/071506 (74918) : proxy 'express' has no server available!
[WARNING] 285/071511 (74918) : Server express/local-gear is DOWN for maintenance.

更新 3:再次尝试使用 Blitz,这次 HAProxy/NodeJS 没有恢复,而是卡在以下行上(我仍然可以通过 SSH 连接):

DEBUG: Sending SIGTERM to child...

这里没有太多的模式,除了 HAProxy 没有做它应该做的事情:扩展。我相当有信心这不是我的 NodeJS 应用程序的问题,因为它没有报告任何错误(到日志文件或 New Relic)。

最佳答案

您的设备内存不足,因此您的所有进程都将被终止。 (这就是为什么你也会被踢出你的 ssh session 。)当发生这种情况时,它可能会使 haproxy 配置处于错误状态,如果它在重新启动时没有自动修复,我会认为这是一个错误.

关于node.js - OpenShift HAProxy 扩展不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26338092/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com