【问题标题】:low disk watermark [??%] exceeded on低磁盘水印 [??%] 超过
【发布时间】:2016-01-26 23:32:58
【问题描述】:

我在我的开发机器(单个笔记本)中使用 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
....

我看到很多这样的“低磁盘水印...超过...”消息。我的情况出了什么问题?如何解决?谢谢!

更新

在这篇文章之前,我搜索了相关文章。我发现了一个与“高水位线......”有关的问题,在这种情况下,磁盘空间很低。就我而言,我检查并发现我的磁盘上还剩下 56GB。

更新

根据 Andrei Stefan 的意见,我需要更改设置。我应该这样做吗:

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

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

【问题讨论】:

  • 在这里阅读:elastic.co/guide/en/elasticsearch/reference/current/disk.html,异常消息是不言自明的,为什么它不是那么不言自明。文档的那部分应该清楚。
  • @curious1 ES 根据可用磁盘空间做出一些决定。 ES 如何决定“大”或“小”在磁盘空间方面的含义是由那些高水位线和低水位线定义的。如果您对这些百分比不满意,在某些情况下建议使用特定值。例如,如果您有一个 4TB 大的磁盘,85% 的低水位线意味着 600GB 的可用空间。对于一些大型索引,600GB 就足够了。在这种情况下,您可以将低水印指定为 30GB,将高水印指定为 100GB 或类似。在我的电脑上,我总是处于低水位警告;-),这并不意味着我没有使用 ES。
  • @curious1 您那里的那个命令正在处理transient 设置,这意味着当您重新启动集群时,该设置就消失了。使其 persistent 在重新启动后仍然存在,或将其放入 elasticsearch.yml 文件中,如下所示:cluster.routing.allocation.disk.threshold_enabled: false

标签: elasticsearch


【解决方案1】:

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

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

设置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/modules-cluster.html#disk-based-shard-allocation

请注意:

百分比值是指已用磁盘空间,而字节值是指可用磁盘空间。这可能会令人困惑,因为它颠倒了高低的含义。例如,将低水位线设置为 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 作为其他答案。

【讨论】:

  • 请注意cluster.routing.allocation.disk.threshold_enabled: True 应该是cluster.routing.allocation.disk.threshold_enabled: true(没有大写T)
  • 严格来说这不是一个错误 - 意味着 True 和 true 都有效,即使 java 标准是去大写。在撰写本文时,手头的问题比坚持编码风格更重要——我想。好久不见了……
  • 我认为在我的情况下它不起作用,这就是我发表评论的原因。
  • 请注意,如果您想设置百分比,它们应该是比率。例如。 cluster.routing.allocation.disk.watermark.low: 0.95
  • 还有一个相关设置 cluster.routing.allocation.disk.watermark.flood_stage 高于高水位线。即在上面的示例中,它必须是
【解决方案2】:

我在我的 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%)。

这在 6.1.1 版本中对我有用。

【讨论】:

  • 你必须设置所有 4 个设置,你不能混合百分比 + mb/gb。您缺少 cluster.routing.allocation.disk.watermark.flood_stage 设置,该设置可能会阻止您使用 mb/gb 设置。
【解决方案3】:

我知道这是旧帖子,但我的评论可以让某人开心。为了以字节值(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)

【讨论】:

  • 是的,没有cluster.routing.allocation.disk.watermark.flood_stage 是大肚子。
【解决方案4】:

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

运行弹性搜索:

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。

【讨论】:

    【解决方案5】:

    我想补充一些背景知识,说明 Elasticsearch 为什么有这些不同的阈值,以及如果超过这些阈值会发生什么。

    背景

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

    解决方案

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

    简而言之,永久性修复是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 2020-08-25
      • 2020-11-09
      • 1970-01-01
      • 2015-07-29
      • 2016-05-29
      • 2023-01-15
      相关资源
      最近更新 更多