已超过磁盘水位线下限[??%]

dffbzjpn  于 2022-10-06  发布在  ElasticSearch
关注(0)|答案(5)|浏览(244)

我在我的开发机器(一台笔记本电脑)中使用Elasticearch 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
....

我看到很多这样的“低磁盘水位线……超过……”留言。我的案子出了什么问题?怎么才能修好呢?谢谢!

更新

在这个帖子之前,我搜索了一下相关的帖子。我找到了一个和“高水位线”有关的。在这种情况下,磁盘空间很低。在我的例子中,我检查了一下,我的磁盘上还剩下56 GB。

更新

根据安德烈·斯特凡的输入,我需要更改设置。我应该这样做吗?

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

或者有没有我可以编辑的设置文件?

w8f9ii69

w8f9ii691#

如果您像我一样有很多磁盘,您可以调整水印设置,并使用字节值而不是百分比:
毒品!使用百分比值或**字节值。

  • 不能在水印设置中混合使用百分比/比率值和字节值。要么将所有值设置为百分比/比率值,要么将所有值设置为字节值。*

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

  • 控制磁盘使用的低水位线。默认为85%,表示Elasticearch不会为磁盘使用率超过85%的节点分配分片。或者可以将其设置为比率值,例如0.85。它还可以设置为绝对字节值(如500MB),以防止Elasticearch在可用空间少于指定数量时分配碎片。此设置不会影响新创建的索引的主分片,但会阻止分配其副本。*

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

  • 控制高水位线。默认为90%,这意味着Elasticearch会尝试将碎片从磁盘使用率超过90%的节点重新定位。可替换地,可以将其设置为比率值,例如0.9。还可以将其设置为绝对字节值(类似于低水位线),以便在节点的可用空间少于指定数量时将碎片重新定位到远离该节点的位置。此设置会影响所有碎片的分配,无论以前是否已分配。*

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

  • 控制洪涝水位,默认为95%。ElasticSearch在节点上分配了一个或多个碎片,并且至少有一个磁盘超过泛洪阶段的每个索引上强制执行只读索引块(index.locks.read_only_Allow_Delete)。此设置是防止节点耗尽磁盘空间的最后手段。当磁盘利用率低于高水位线时,会自动释放索引块。与低水位线值和高水位线值类似,也可以将其设置为比率值,例如0.95或绝对字节值。

Https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-cluster.html#disk-based-shard-allocation

请注意:

  • 百分比值表示已用磁盘空间,字节值表示可用磁盘空间。这可能会令人困惑,因为它颠倒了高和低的含义。例如,将低水位线设置为10 GB,将高水位线设置为5 GB是合理的,但反之亦然。*

在我的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
xnifntxz

xnifntxz2#

我知道这是老帖子,但我的评论可以让人开心。为了以字节为单位指定水印(GB或MB),您必须将cluster.routing.allocation.disk.watermark.flood_stage添加到ElasticSearch设置文件-elasticearch.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)

lb3vh1jj

lb3vh1jj3#

在我的例子中,我只需关闭门槛:

运行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,ElasticSearch通过BREW安装。

vi4fp9gy

vi4fp9gy4#

我在elasticsearch.yaml文件中添加了以下几行代码(elelity_search_Folders\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%)。

在版本6.1.1中,这对我来说很有效。

uqjltbpv

uqjltbpv5#

我想就为什么Elasticearch有这些不同的阈值以及如果超过这些阈值会发生什么,添加一些背景知识。

背景

ElasticSearch会考虑可用的磁盘空间,然后根据该错误的不同阈值来决定是分配新的分片、重新定位分片还是将所有索引设置为读模式。原因是Elasticearch索引由不同的分片组成,这些分片保存在数据节点上。

解决方案

我关于相关设置以及临时和永久修复的详细博客可以在here找到。

简而言之,永久解决方案是:

1.删除未使用的索引。
1.使用Optimize API for reducing the segments and eliminating ES deleted docs not working中的答案合并分段。
1.连接外部磁盘或增加问题数据节点使用的磁盘。

相关问题