indices have lifecycle errors 处理

376 阅读3分钟

背景

在运行 Elasticsearch 集群的过程中,磁盘空间的使用情况对集群的健康和性能至关重要。当磁盘使用量达到一定的阈值时,Elasticsearch 会触发相应的flood机制,阻止写入操作,以防止磁盘被填满并导致数据丢失。

在这篇文章中,我们探讨了如何处理 Elasticsearch 集群中 "TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark" 错误。这一错误通常出现在磁盘使用量超过了 "flood stage" 阈值(通常是 95%)的情况下。为了确保集群的稳定运行,我们需要采取措施减小磁盘使用量或调整磁盘水印设置,以避免写操作被阻止。

通过清理旧数据、创建快照并删除旧索引、增加磁盘空间或调整disk watermark设置,我们可以有效缓解磁盘空间不足带来的问题。此外,还可以检查和优化索引设置,减少副本数量,进一步降低磁盘使用率。

这些措施不仅可以帮助恢复集群的正常运行,还可以为未来的磁盘管理提供参考,确保 Elasticsearch 集群在高效、稳定的环境下运行。

查看ILM状态

GET _ilm/policy

查找有问题的索引

GET /_all/_ilm/explain?only_errors=true

image.png

错误信息 "TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark" 表示磁盘使用量已经超过了 Elasticsearch 设置的 "flood stage" 阈值。这个阈值通常是磁盘使用量的 95%。当磁盘使用量超过此阈值时,Elasticsearch 将阻止任何写操作,以保护集群免于进一步填满磁盘空间并导致数据丢失。

解决方法

要解决这个问题,需要减小磁盘使用量。以下是一些可能的解决方法:

  1. 清理旧数据

    • 删除不再需要的索引或文档。

    • 使用以下命令删除指定索引:

      DELETE /index_name
      
    • 例如,删除名为

      old-index
      

      的索引:

      DELETE /old-index
      
  2. 快照和删除

  • 对旧索引进行快照(备份),然后删除它们以释放磁盘空间。

  • 创建快照:

    PUT /_snapshot/my_backup/snapshot_1
    {
      "indices": "index_1,index_2",
      "ignore_unavailable": true,
      "include_global_state": false
    }
    
  • 删除旧索引:

    DELETE /index_1
    DELETE /index_2
    

增加磁盘空间

  • 添加新的磁盘到集群的节点,或者增加现有磁盘的容量。

调整 Elasticsearch 的disk.watermark磁盘设置

查看磁盘的使用设置:

GET /_cluster/settings?include_defaults

image.png

disk.watermark.flood_stagedisk.watermark.high 都设置为相同的值(例如 95%),将会导致以下问题:

缺乏缓冲highflood_stage 通常应该有一定的差距,以确保在 high 被触发后,有足够的时间和空间进行分片迁移。如果它们相等,一旦达到这个阈值,Elasticsearch 就会立即阻止写操作,没有时间进行迁移操作。

写操作立即停止:当磁盘使用量达到 95% 时,Elasticsearch 将会立即停止所有写操作,因为 flood_stage 被触发。这可能会导致应用程序的写操作失败,影响正常业务。

无法进行预警high 通常用作预警系统,让管理员有时间采取行动(如增加磁盘空间或删除旧数据)。如果 highflood_stage 相等,管理员将没有预警时间来处理问题。

  • 这只是一个临时解决方案,并不能根本解决磁盘空间不足的问题。可以稍微提高水印阈值,以便有更多时间来清理磁盘空间:

    PUT /_cluster/settings
    {
      "transient": {
        "cluster.routing.allocation.disk.watermark.flood_stage": "98%",
        "cluster.routing.allocation.disk.watermark.high": "95%",
        "cluster.routing.allocation.disk.watermark.low": "85%",
        "cluster.info.update.interval": "1m"
      }
    }
    
  1. 检查和优化索引设置

    减小索引副本数:

    ```
    PUT /index_name/_settings
    {
      "number_of_replicas": 1
    }
    ```
    

    例如,将名为

    ```
    my-index
    ```
    
    的索引副本数设置为 1```
    PUT /my-index/_settings
    {
      "number_of_replicas": 1
    }
    ```
    

检查磁盘使用情况

要检查集群中每个节点的磁盘使用情况,可以使用以下命令:

GET /_cat/allocation?v

这将返回每个节点的磁盘使用情况和总空间。