暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Elasticsearch由于磁盘不足导致索引分配不可用,如何恢复

运维笔谈 2025-05-20
521

 

Elasticsearch由于磁盘满了,导致索引有部分分片处于未分配的状态,由于清理空间或者扩容晚了,当磁盘有富余的时候,索引的分片不会自动恢复了,怎么办?(建议ES前面加个缓冲,比如Kafka,这样会临时堆积在Kafka避免期间数据丢失)

我们可以参考以下几个步骤来解决这个问题。


1. 确认磁盘空间已恢复

  • • 检查当前磁盘使用率是否低于 磁盘水位线阈值(默认 cluster.routing.allocation.disk.watermark.low
     为 85%,high
     为 90%)。
  • • 若磁盘空间仍不足,需清理历史数据(如删除旧索引)或扩容磁盘,确保磁盘利用率低于阈值。

2. 检查分片自动分配设置

  • • 确保集群启用了分片自动分配:
    GET _cluster/settings
    {
      "persistent": {
        "cluster.routing.allocation.enable": "all"
      }
    }

  • • 若未启用,需动态更新配置为 "all"

3. 调整磁盘水位线阈值

若磁盘空间接近阈值但仍低于默认值,可临时调高水位线以允许分配:

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.disk.watermark.low": "90%",
    "cluster.routing.allocation.disk.watermark.high": "95%"
  }
}

  • • 长期运行时需避免磁盘再次打满,也可以修改为具体值比如100G。

4. 检查分片状态

使用 _shard_stores
 API 查看分片是否损坏:

GET /_shard_stores
  • • 若分片存储已损坏,需通过快照恢复或副本重建。

5. 强制重新平衡集群

触发集群重新平衡,尝试重新分配所有失败的分片:

POST /_cluster/reroute?retry_failed

7. 其他方法

  • • 临时修改索引副本为0,再恢复为1:若仅仅是副本分片不可用,可以把对应索引的副本设置为0,然后再修改为1,这样es会重新初始化副本分片。


对话运维笔谈,输入 资料 可以获取一些技术文档PDF。

 

文章转载自运维笔谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论