Elasticsearch 5 卡住从磁盘读取

2022-09-04 23:36:28

我有一个包含6个节点的集群,带有ES 5.4,其中有4B个小文档尚未编制索引。
文档以大约 9000 个索引进行组织,总共 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
}

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

一切都很好,直到我将一些流量重定向到此群集。一旦它开始响应,大多数服务器就会开始以 250 MB/s 的速度从磁盘读取数据,从而使群集无响应enter image description here

奇怪的是,我在AWS上克隆了这个ES配置(相同的硬件,相同的Linux内核,但不同的Linux版本),我没有问题:enter image description here注意:请注意,40MB / s的磁盘读取是我在为流量提供服务的服务器上一直拥有的。

相关的 Elasticsearch 5 配置包括:

  • Xms12g -Xmx12gjvm.options

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

  • bootstrap.memory_lock:true
  • MAX_OPEN_FILES=1000000

每台服务器有16个CPU和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/*

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

谢谢!


答案 1

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

threadpool.search.size:<size>

此外,对于 6 节点集群来说,这听起来像是太多的分片。如果可能的话,我会尝试减少它。


答案 2

HTTP 请求的最大内容。默认值为 100mb

servers start reading from disk at 250 MB/s making the cluster unresponsive- HTTP 请求的最大内容。默认值为 100mb。.如果设置为大于 Integer.MAX_VALUE,它将重置为 100mb。

这将变得无响应,您可能会看到与此相关的日志。检查索引的最大读取大小。

使用 Elasticsearch HTTP 进行检查


推荐