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 为了防止数据丢失,自动将索引设置为只读模式,以保护集群的稳定性和数据的安全性。
要解决这个问题,您可以尝试以下几种方法:
-
释放磁盘空间:检查并删除不必要的文件或索引,以减少磁盘使用率。您可以使用
df -h
命令来查看磁盘使用情况,并清理一些不必要的文件来释放空间。 -
增加磁盘容量:如果可能的话,增加 Elasticsearch 服务器的磁盘容量也是一个解决方案。
-
调整 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%
但请注意,过低的水位线可能导致频繁的分片迁移和性能问题。
-
手动解除只读模式:如果磁盘使用率已经降回到低于洪水阶段水位线,您可以尝试手动解除索引的只读状态。这可以通过向 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 管理员。