Elasticsearch 5从磁盘读取卡住

Luc*_*ano 10 java elasticsearch elasticsearch-5

我有一个包含ES 5.4的6个节点的集群,其中有4B个小文档但已编入索引.
文档按〜9K索引组织,总计2TB.索引的占用率从几KB到几百GB不等,并且它们是分片的,以便将每个碎片保持在20GB以下.

群集运行状况查询响应:

{
    cluster_name: "##########",
    status: "green",
    timed_out: false,
    number_of_nodes: 6,
    number_of_data_nodes: 6,
    active_primary_shards: 9014,
    active_shards: 9034,
    relocating_shards: 0,
    initializing_shards: 0,
    unassigned_shards: 0,
    delayed_unassigned_shards: 0,
    number_of_pending_tasks: 0,
    number_of_in_flight_fetch: 0,
    task_max_waiting_in_queue_millis: 0,
    active_shards_percent_as_number: 100
}
Run Code Online (Sandbox Code Playgroud)

在向群集发送任何查询之前,它是稳定的,并且每秒都会获得一个批量索引查询,其中包含10个或几千个没有问题的文档.

一切都很好,直到我将一些流量重定向到此群集.一旦它开始响应,大多数服务器开始以250 MB/s的速度从磁盘读取,使群集无响应: 在此输入图像描述

奇怪的是,我在AWS上克隆了这个ES配置(相同的硬件,相同的Linux内核,但不同的Linux版本),我没有问题: 在此输入图像描述 注意:请注意,40MB/s的磁盘读取是我在服务流量的服务器上一直使用的.

相关的Elasticsearch 5配置是:

  • Xms12g -Xmx12gjvm.options

我还使用以下配置对其进行了测试,但没有成功:

  • bootstrap.memory_lock:true
  • MAX_OPEN_FILES=1000000

每台服务器有16CPU和32GB RAM ; 有些人有Linux Jessie 8.7,其他有Jessie 8.6; 都有内核3.16.0-4-amd64.

我检查了每个节点上的缓存,localhost:9200/_nodes/stats/indices/query_cache?pretty&human并且所有服务器都有类似的统计信息:缓存大小,缓存命中,未命中和驱逐.

它似乎不是一个热身操作,因为在AWS克隆集群上我从未看到过这种行为,也因为它永远不会结束.
我找不到有用的信息/var/log/elasticsearch/*.

我做错了吗?
为了解决这个问题,我应该改变什么?

谢谢!

Bra*_*rby 0

您可能需要减少搜索线程的数量。尝试使用 2 倍数量的处理器。在elasticsearch.yaml中:

threadpool.search.size:<size>
Run Code Online (Sandbox Code Playgroud)

另外,对于 6 节点集群来说,这听起来似乎太多了。如果可能的话,我会尝试减少这种情况。