/ 19浏览

ElasticSearch 异常 TOO_MANY_REQUESTS 处理方法

image

Elasticsearch exception [type=cluster_block_exception, reason=index [user_reputation_level_change_es_record] blocked by: [TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block];]; nested exception is ElasticsearchStatusException[Elasticsearch exception [type=cluster_block_exception, reason=index [user_reputation_level_change_es_record] blocked by: [TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block];]]

Elasticsearch 抛出了 cluster_block_exception​ 异常,原因是索引 user_reputation_level_change_es_record​ 被 TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark​ 限制,并且该索引已经被设置为 read-only-allow-delete​ 模式。这意味着由于磁盘使用率超过了集群设置的洪水阶段水位线(通常是95%),Elasticsearch 为了防止数据丢失,自动将索引设置为只读模式,以保护集群的稳定性和数据的安全性。

要解决这个问题,您可以尝试以下几种方法:

  1. 释放磁盘空间:检查并删除不必要的文件或索引,以减少磁盘使用率。您可以使用 df -h​ 命令来查看磁盘使用情况,并清理一些不必要的文件来释放空间。

  2. 增加磁盘容量:如果可能的话,增加 Elasticsearch 服务器的磁盘容量也是一个解决方案。

  3. 调整 Elasticsearch 设置:您可以调整 Elasticsearch 的磁盘水位线设置,以提高洪水阶段的阈值。这可以通过修改 elasticsearch.yml​ 配置文件中的以下设置来实现:

    cluster.routing.allocation.disk.watermark.low: 75%
    cluster.routing.allocation.disk.watermark.high: 85%
    cluster.routing.allocation.disk.watermark.flood_stage: 95%
    

    但请注意,过低的水位线可能导致频繁的分片迁移和性能问题。

  4. 手动解除只读模式:如果磁盘使用率已经降回到低于洪水阶段水位线,您可以尝试手动解除索引的只读状态。这可以通过向 Elasticsearch 发送以下命令来实现:

    PUT /user_reputation_level_change_es_record/_settings
    {
      "index.blocks.write": null
    }
    

    或者,如果您想解除所有索引的只读状态,可以使用:

    PUT /_all/_settings
    {
      "index.blocks.read_only_allow_delete": null
    }
    

请注意,在执行这些操作之前,确保您有足够的磁盘空间来支持 Elasticsearch 的正常运行,并且了解这些操作可能带来的影响。如果您不确定如何操作,或者需要进一步的帮助,建议咨询 Elasticsearch 社区或专业的 Elasticsearch 管理员。