cluster_block_exception: ClusterBlockException[blocked by: [TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block]] (before 7.x: FORBIDDEN/12/index read-only / allow delete (api))(磁盘使用超过 flood-stage 水位线,索引被设为 read-only-allow-delete)
Elasticsearch含义
由于磁盘使用超过 flood stage 水位线(默认 95%;大容量磁盘上由 max_headroom 决定),Elasticsearch 为在受影响节点上有分片的索引设置了 read_only_allow_delete 块,以防磁盘被完全写满。由于该块,无法向索引写入(索引/更新/删除文档);只允许删除索引本身。ES 8.x 以 HTTP 429 返回该错误。
原因
至少一个节点的磁盘使用超过了 cluster.routing.allocation.disk.watermark.flood_stage 阈值。即使手动移除该块,只要磁盘仍然已满,Elasticsearch 就会重新设置它。没有日志轮转的大索引、未清理的快照或磁盘容量不足是典型原因。
解决方法
首先释放磁盘空间:删除旧的/不需要的索引(DELETE /old-index),生成快照后移除索引,或扩容磁盘。在 7.4+ 中,当磁盘使用降到 high 水位线以下时,该块会自动移除;如需立即清除而不等待,手动移除:PUT /_all/_settings {"index.blocks.read_only_allow_delete": null}。作为永久解决办法,用 ILM(Index Lifecycle Management)自动删除/归档旧数据,并检查水位线设置(disk.watermark.low/high/flood_stage)。
同一数据库的其他条目
- index_read_only_allow_deleteTOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark, index has read-only-allow-delete block (legacy: FORBIDDEN/12/index read-only / allow delete (api))(磁盘使用超过 flood-stage 水位线,索引带有 read-only-allow-delete 块)
- high_disk_watermark_exceededhigh disk watermark [90%] exceeded / flood stage disk watermark [95%] exceeded(超过磁盘 high 水位线 [90%] / flood stage 水位线 [95%])
- circuit_breaking_exceptionCircuitBreakingException[[parent] Data too large, data for [<...>] would be [...], which is larger than the limit of [...]](数据过大,超过熔断器限制)
- mapper_parsing_exceptionmapper_parsing_exception: failed to parse field [...] of type [...](无法解析类型为 [...] 的字段 [...])