我有6个节点的群集,这些群集带有 ES 5.4 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
}

在将任何查询发送到集群之前,它是稳定的,并且每秒可以获取包含10或几千个文档的批量索引查询,这没有问题。

一切正常,直到我将一些流量重定向到该群集。
一旦它开始响应,大多数服务器就开始以250 MB/s的速度从磁盘读取数据,从而使群集不响应:
java - Elasticsearch 5卡住了从磁盘读取的内容-LMLPHP

奇怪的是,我在AWS上克隆了此ES配置(相同的硬件,相同的Linux内核,但不同的Linux版本),并且没有问题:
java - Elasticsearch 5卡住了从磁盘读取的内容-LMLPHP
注意:请注意,在为流量提供服务的服务器上,我始终拥有40MB/s的磁盘读取速度。

相关的Elasticsearch 5配置为:
  • 中的
  • Xms12g -Xmx12g

  • 我还使用以下配置对其进行了测试,但没有成功:
  • jvm.options
  • bootstrap.memory_lock:true

  • 每个服务器都有 16CPU和32GB RAM ;有些使用Linux Jessie 8.7,其他使用Jessie 8.6;都具有内核3.16.0-4-amd64。

    我使用MAX_OPEN_FILES=1000000检查了每个节点上的缓存,所有服务器的统计信息都相似:缓存大小,缓存命中,未命中和逐出。

    这似乎不是预热操作,因为在AWS克隆集群上,我从未看到此行为,也因为它永无止境。
    我在localhost:9200/_nodes/stats/indices/query_cache?pretty&human下找不到有用的信息。

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

    谢谢!

    最佳答案

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

    threadpool.search.size:<size>
    

    同样,对于6节点群集,这听起来像太多碎片。如果可能的话,我会尽量减少这种情况。

    关于java - Elasticsearch 5卡住了从磁盘读取的内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45186965/

    10-10 18:03