OpenShift HAProxy缩放不起作用

我一直在尝试使用ny NodeJS Express 4应用程序(本质上是一个REST API)来获得OpenShift的HAProxy扩展,但是我没有太多的运气。

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

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

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

有一次,我确实看到它已经达到默认的128个连接限制,然后试图启动另一个设备,但是由于请求不断出现,我猜测它无法处理?

起初我以为是因为使用了一个小的齿轮,因为我正在运行'顶部',看到CPU负载穿过屋顶,最终我断开了连接。

我删除了应用程序,并切换到small.highcpu齿轮(每小时花费钱)。

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

small.highcpu设备做了一些不同的事情,因为它重新启动后,它增加了一个新的齿轮,但它不缩小(即使所有的stream量已经停止),所以我不得不手动缩小

如果我离开第二个齿轮,并在1分钟内尝试再次用100个用户进行压力testing,HAProxy仍然下降(内存使用情况和CPU似乎没问题),之后不久我就失去了SSH连接。 而且,这一次它不是自动出现的。 我也在我的NodeJS应用程序中收到以下错误:

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

如果我之后手动重启HAProxy(因为还没有popup来,我不得不这样做),我可以看到本地设备已经closures了,而第二个设备启动了,这意味着我的NodeJS应用程序在第一档崩溃,在二线上线。

这真的是有意的行为吗? 在处理NodeJS和HAProxy时,我应该做些什么吗?

如果我不能处理100个用户/分钟,我确实无法certificate为这样的服务付费,因为我确信我最终将远远超过100个用户。

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

更新2 :我试着使用Blitz而不是loader.io,只是为了确定HAProxy何时发疯。 闪电战结束了12K点击,26K错误和4K超时。

此外,HAProxy下降,似乎永远不会回来。 这一次,我决定等待,几分钟后,本地DID又回来了。 但是,它没有提出任何额外的齿轮。

这也是HAProxy在Blitztesting发生的时候告诉我的(在它崩溃之前,我断开了连接):

 ==> 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 :再次尝试闪电战,这次HAProxy / NodeJS没有回来,而是卡在下面的行(我仍然可以SSH):

 DEBUG: Sending SIGTERM to child... 

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

您的设备内存不足,因此您的所有进程都将被杀死。 (这就是为什么你也被踢出你的SSH会话。)当这种情况发生时,它可能会把haproxyconfiguration处于不良状态,如果它不能自动修复重新启动,我会认为这是一个错误。