不平衡的弹性搜索性能

时间:2017-07-08 18:39:00

标签: elasticsearch load elasticsearch-5

我们有一个包含9个节点的Elasticsearch集群,其中包含以下设置:

  • Elasticsearch版本5.1.2
  • 群集中的一个索引
  • 主要碎片存储大小:3GB
  • 碎片数量:5
  • 副本数量:3
  • Node-1,Node-2和Node-3 Master only Nodes
  • Node-4到Node-9仅数据节点
  • 映射中没有父子关系
  • 每个节点24 GB Ram,18个CPU核心
  • 已禁用的Swaped,增加的开放文件描述符,12 GB JVM堆内存
  • Nest Client'静态'适配器和所有节点IP列表

如您所见,我们在节点上有过多的资源分配,但在压力测试下,只有一个节点使用所有可用的搜索线程。正如我所提到的,我们有18个核心,根据默认搜索线程限制,我们在每个节点中有(3 * 18/2)+1 = 28个搜索线程。
问题:

  • Http请求未达标
  • 其他节点不使用所有搜索线程。一个节点使用它的所有线程,它的搜索队列变大

我们测试的内容:
- 使用一个协调节点来平衡请求(无变化)
我们如何发送请求:
- 我们使用Elasticsearch作为搜索引擎,Jmeter用于对搜索服务进行压力测试。测试服务是使用Elasticsearch Nest Client

调用某些SearchTemplates的Web服务

Open HTTP Requests and Search Thread Pool

Cpu Usages

Queru Count and Fetch Count

任何想法都表示赞赏。

1 个答案:

答案 0 :(得分:0)

阅读 https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/connection-pooling.html

看起来您使用的是-O2 -fno-full-laziness,当您使用低级别<?php echo date('Y-m-d H:i:s', strtotime($date));?> 时使用{ SingleNodeConnectionPool 在这种情况下,您的所有请求都将发送到一个节点,该节点需要充当此处所述的ElasticClient

https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html

  

例如,搜索请求分两个阶段执行   由接收客户端请求的节点协调 -   协调节点。

     

在分散阶段,协调节点将请求转发给   保存数据的数据节点。每个数据节点执行   请求本地并将其结果返回给协调节点。在   在收集阶段,协调节点减少每个数据节点   将结果转换为单个全局结果集。

     

每个节点都隐式地是一个协调节点。这意味着一个节点   将所有三个node.master,node.data和node.ingest设置为false   将仅作为协调节点,无法禁用。作为一个   结果,这样的节点需要有足够的内存和CPU才能   处理聚集阶段。

var client = new ElasticClient(uri); Coordinator node对您的群集来说是更好的选择。