elasticsearch,Node.js,elasticsearch" /> elasticsearch,Node.js,elasticsearch" />

Node.js 负载测试我们的弹性集群

Node.js 负载测试我们的弹性集群,node.js,elasticsearch,Node.js,elasticsearch,我们目前正在尝试加载测试我们的应用程序,这涉及到大量登录到我们的弹性集群。在重载情况下,我开始从ES中看到以下错误 Error: No Living connections at sendReqWithConnection (D:\home\site\wwwroot\node_modules\elasticsearch\src\lib\transport.js:225:15) at next (D:\home\site\wwwroot\node_modules\elasticse

我们目前正在尝试加载测试我们的应用程序,这涉及到大量登录到我们的弹性集群。在重载情况下,我开始从ES中看到以下错误

Error: No Living connections
    at sendReqWithConnection (D:\home\site\wwwroot\node_modules\elasticsearch\src\lib\transport.js:225:15)
    at next (D:\home\site\wwwroot\node_modules\elasticsearch\src\lib\connection_pool.js:213:7)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickDomainCallback (internal/process/next_tick.js:218:9)
在此之前,我们看到了另一系列错误

Error: Request Timeout after 30000ms
    at D:\home\site\wwwroot\node_modules\elasticsearch\src\lib\transport.js:354:15
    at Timeout.<anonymous> (D:\home\site\wwwroot\node_modules\elasticsearch\src\lib\transport.js:383:7)
    at ontimeout (timers.js:482:11)
    at tryOnTimeout (timers.js:317:5)
    at Timer.listOnTimeout (timers.js:277:5)
错误:30000ms后请求超时
位于D:\home\site\wwwroot\node\u modules\elasticsearch\src\lib\transport.js:354:15
超时时。(D:\home\site\wwwroot\node\u modules\elasticsearch\src\lib\transport.js:383:7)
在ontimeout(timers.js:482:11)
在tryOnTimeout(timers.js:317:5)
at Timer.listOnTimeout(timers.js:277:5)

错误:[es\u拒绝执行\u异常]拒绝执行org.elasticsearch.transport.TransportService$7@4d532edc在EsThreadPoolExecutor[bulk,queue capacity=200,org.elasticsearch.common.util.concurrent上。EsThreadPoolExecutor@6c5897a1[正在运行,池大小=1,活动线程=1,排队任务=200,已完成任务=122300]]
在响应时(D:\home\site\wwwroot\node\u modules\elasticsearch\src\lib\transport.js:307:15)
在checkRespForFailure时(D:\home\site\wwwroot\node\u modules\elasticsearch\src\lib\transport.js:266:7)
在HttpConnector上。(D:\home\site\wwwroot\node\u modules\elasticsearch\src\lib\connectors\http.js:159:7)
在IncomingMessage.bound(D:\home\site\wwwroot\node\u modules\elasticsearch\node\u modules\lodash\dist\lodash.js:729:21)
在emitNone(events.js:111:20)
在IncomingMessage.emit(events.js:208:7)
在endReadableNT(_stream_readable.js:1064:12)
at _combinedTickCallback(内部/流程/下一步_tick.js:138:11)
在进程中。_tickDomainCallback(internal/process/next_tick.js:218:9)
这仅仅是由于负载过重造成的吗?我想知道怎样才能解决这个瓶颈。我们目前有3个数据节点和3个主节点运行在不同的linux服务器上

  • 我应该带些类似logstash的东西吗?我需要多少台服务器
  • 我是否应该加入一个队列,留出ES任务供以后使用
  • 编辑:更多信息-

  • 我们对每个请求执行一次插入(我们总共发送大约100个并行请求,最多2000个)

  • Cpu性能没有变得很高<10%

  • 我们在azure中托管这些机器。所有应用程序(节点和es)都位于同一区域


  • 我想问题是你的队列容量被超过了。上面说你的限额是200。您没有在es服务器中提供内存限制。但是,让我们尝试增加限制并监控您的内存

    编辑elasticsearch.yaml:

    threadpool.bulk.queue_size: 500
    
    因为在不同的场景中是不同的,我不确定,但是你需要锻炼自己来测试不同的方法

    如果你有大量的数据要同时插入,你可以考虑使用类似于<卡夫卡> <代码>的消息队列来处理异步数据。


    有关此主题的更多信息,您可以阅读更多内容:

    您尝试测试了什么?插入大量文档还是同时查询大量文档?您应该从监视弹性服务器开始。cpu和内存是否足够?然后,如果有任何缓慢的查询,请检查日志。你的节点应用程序如何连接到elasticsearch,我的意思是它是本地连接(LAN连接)还是在不同的网络中?回答这些问题可能会让你对下一步做什么有更多的想法。@DatTran-谢谢,添加了更多信息
    threadpool.bulk.queue_size: 500