【发布时间】:2017-12-24 12:18:49
【问题描述】:
我有一个由 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 的速度从磁盘读取,导致集群无响应:
奇怪的是我在 AWS 上克隆了这个 ES 配置(相同的硬件,相同的 Linux 内核,但不同的 Linux 版本),我没有问题: 注意:请注意,我在服务流量的服务器上一直拥有 40MB/s 的磁盘读取速度。
相关的 Elasticsearch 5 配置为:
-
Xms12g -Xmx12g在jvm.options
我也用以下配置测试过,但没有成功:
bootstrap.memory_lock:trueMAX_OPEN_FILES=1000000
每台服务器有 16CPU 和 32GB 内存;有些有 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/* 下找不到有用的信息。
我做错了吗?
为了解决这个问题,我应该改变什么?
谢谢!
【问题讨论】:
-
我可以请你澄清一些事情吗?所以你有 6 台带有 Linux 的服务器,与 AWS 上的相同集群相比,AWS 上的性能还可以。您的服务器上的磁盘是什么?他们在旋转SSD吗? AWS 通常在网络上使用 SSD,它可能会带来差异。此外,主分片的数量看起来很可疑,请查看 ES 指南的这一部分:elastic.co/guide/en/elasticsearch/guide/current/… 这些分片是否很好地分布在集群中?谢谢。
-
所有磁盘都有SSD。关于分片,我有大约 9000 个索引,其中只有 10 个被分片(无论如何,每个索引最多 16 个分片)。分片在整个集群中平衡良好。我有这个配置在 ES2.4 上工作(相同的分片,但每个索引的文档更少)。
-
谢谢,所以您在从 ES 2.4 迁移到 5.4 时出现了这个问题?能否提供 es 2 和 5 中的部分映射(我知道这里有 9k 个字段,所以这里无法显示)?
-
我会尝试 _nodes/hot_threads 看看 ES 在获取
stuck时做了什么?
标签: java elasticsearch elasticsearch-5