时间:2015-10-27 13:56:03

标签: elasticsearch

我在我的开发机器(单个笔记本)中使用Elasticsearch 1.4.4。一切都设置为默认值,因为我从未更改任何设置。

当我开始时,我通常会收到以下消息:

[2015-10-27 09:38:31,588][INFO ][node                     ] [Milan] version[1.4.4], pid[33932], build[c88f77f/2015-02-19T13:05:36Z]
[2015-10-27 09:38:31,588][INFO ][node                     ] [Milan] initializing ...
[2015-10-27 09:38:31,592][INFO ][plugins                  ] [Milan] loaded [], sites []
[2015-10-27 09:38:34,665][INFO ][node                     ] [Milan] initialized
[2015-10-27 09:38:34,665][INFO ][node                     ] [Milan] starting ...
[2015-10-27 09:38:34,849][INFO ][transport                ] [Milan] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/10.81.1.108:9300]}
[2015-10-27 09:38:35,022][INFO ][discovery                ] [Milan] elasticsearch/DZqnmWIZRpapZY_TPkkMBw
[2015-10-27 09:38:38,787][INFO ][cluster.service          ] [Milan] new_master [Milan][DZqnmWIZRpapZY_TPkkMBw][THINKANDACT1301][inet[/10.81.1.108:9300]], reason: zen-disco-join (elected_as_master)
[2015-10-27 09:38:38,908][INFO ][http                     ] [Milan] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/10.81.1.108:9200]}
[2015-10-27 09:38:38,908][INFO ][node                     ] [Milan] started
[2015-10-27 09:38:39,220][INFO ][gateway                  ] [Milan] recovered [4] indices into cluster_state
[2015-10-27 09:39:08,801][INFO ][cluster.routing.allocation.decider] [Milan] low disk watermark [15%] exceeded on [DZqnmWIZRpapZY_TPkkMBw][Milan] free: 58.6gb[12.6%], replicas will not be assigned to this node
[2015-10-27 09:39:38,798][INFO ][cluster.routing.allocation.decider] [Milan] low disk watermark [15%] exceeded on [DZqnmWIZRpapZY_TPkkMBw][Milan] free: 58.6gb[12.6%], replicas will not be assigned to this node
[2015-10-27 09:40:08,801][INFO ][cluster.routing.allocation.decider] [Milan] low disk watermark [15%] exceeded on [DZqnmWIZRpapZY_TPkkMBw][Milan] free: 58.6gb[12.6%], replicas will not be assigned to this node
....

我看到很多这些"低磁盘水印......超过......"消息。我的情况出了什么问题?怎么解决?谢谢!

更新

在这篇文章之前,我搜索了SO的相关帖子。我找到一个与高水印相关的..."在这种情况下,磁盘空间很小。在我的情况下,我检查了我的磁盘上还剩56GB。

更新

根据Andrei Stefan的意见,我需要更改设置。我应该采用以下方式:

curl -XPUT localhost:9200/_cluster/settings -d '{
    "transient" : {
        "cluster.routing.allocation.disk.threshold_enabled" : false
    }
}'

或者我可以编辑任何设置文件进行设置吗?

5 个答案:

答案 0 :(得分:56)

如果你喜欢我有很多磁盘,你可以调整水印设置并使用字节值而不是百分比:

  

NB!您不能在这些设置中混合使用百分比值和字节值。要么全部都设置为百分比值,要么全部都设置为字节值。

设置cluster.routing.allocation.disk.watermark.low

  

控制磁盘使用的低水位线。它默认为85%,这意味着一旦使用超过85%的磁盘,ES将不会为节点分配新的分片。它也可以设置为绝对字节值(如500mb),以防止ES在小于配置的可用空间量时分配分片。

设置cluster.routing.allocation.disk.watermark.high

  

控制高水印。默认为90%,这意味着如果节点磁盘使用率超过90%,ES将尝试将分片重定位到另一个节点。它也可以设置为绝对字节值(类似于低水印),以便在节点上配置的空间量小于一次时重新定位分片。

设置:cluster.routing.allocation.disk.watermark.flood_stage

  

控制洪水阶段水印。它默认为95%,这意味着Elasticsearch对每个索引强制执行只读索引块(index.blocks.read_only_allow_delete),该索引在至少有一个磁盘超过泛洪阶段的节点上分配了一个或多个分片。这是防止节点耗尽磁盘空间的最后手段。一旦有足够的可用磁盘空间允许索引操作继续,就必须手动释放索引块。

https://www.elastic.co/guide/en/elasticsearch/reference/current/disk-allocator.html

请注意:

  

百分比值是指已用磁盘空间,而字节值是指可用磁盘空间。这可能令人困惑,因为它颠覆了高低的含义。例如,将低水位设置为10gb,将高水位设置为5gb是有意义的,但不是相反。

在我设置的5TB磁盘上:

# /etc/elasticsearch/elasticsearch.yml
cluster.routing.allocation.disk.threshold_enabled: true
cluster.routing.allocation.disk.watermark.flood_stage: 5gb
cluster.routing.allocation.disk.watermark.low: 30gb
cluster.routing.allocation.disk.watermark.high: 20gb

修改:添加cluster.routing.allocation.disk.watermark.flood_stage作为其他答案。

答案 1 :(得分:19)

我知道这是老帖子,但我的评论可以让别人开心。为了指定水印的字节值(gb或mb),你必须添加 cluster.routing.allocation.disk.watermark.flood_stage到你的elasticsearch设置文件 - elasticsearch.yml。完整的例子:

  cluster.routing.allocation.disk.threshold_enabled: true 
  cluster.routing.allocation.disk.watermark.flood_stage: 200mb
  cluster.routing.allocation.disk.watermark.low: 500mb 
  cluster.routing.allocation.disk.watermark.high: 300mb

注意:如果没有指定cluster.routing.allocation.disk.watermark.flood_stage,它将无法使用字节值(gb或mb)

答案 2 :(得分:8)

就我而言-我只需要关闭阈值:

运行ElasticSearch:

elasticsearch

在其他标签页上运行:

curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_cluster/settings -d '{ "transient": { "cluster.routing.allocation.disk.threshold_enabled": false } }'


curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'

macOS Catalina,通过Brew安装的ElasticSearch。

答案 3 :(得分:4)

我在elasticsearch.yaml文件(elastic_search_folder \ config)中添加了以下行:

cluster.routing.allocation.disk.threshold_enabled: true
cluster.routing.allocation.disk.watermark.low: 93%
cluster.routing.allocation.disk.watermark.high: 95%

出于某种原因,在gb中指定水印就像在另一个答案中一样,对我来说并不起作用。另外,请确保watermark.high小于或等于洪水印记(通常设置为95%)。

答案 4 :(得分:0)

虽然其他答案很好并提供了解决方案,但我想补充一些背景知识以及为什么 elasticsearch 有这些不同的阈值以及如果超过这些阈值会发生什么。

背景

Elasticsearch 在决定是分配新分片、重新定位分片还是根据此错误的不同阈值将所有索引置于读取模式之前会考虑可用磁盘空间。原因是 Elasticsearch 索引由不同的分片组成,这些分片持久存在于数据节点上。

解决方案

有关相关设置以及临时和永久修复的详细博客可以在 here

简而言之,永久修复是

  1. 删除未使用的索引。
  2. 使用 this SO answer 合并段。
  3. 附加外部磁盘或增加有问题的数据节点使用的磁盘。

在 Elasticsearch 集群中检测此问题和其他问题