Elasticsearch 新建索引 RED 排障总结

🚨 Elasticsearch 排障实录:新建索引 RED / 旧索引正常

属性 详情
📁 环境 Windows Server + Elasticsearch 8.0.0
🐞 症状 新建索引瞬间 RED;旧索引读写正常;重启/删库无效
🎯 根因 磁盘占用 ≥ 90%,触发 Disk Watermark (High)
✅ 结果 关闭阈值 → 强制分配 → 索引 Green

一、问题现象 ⚠️

集群表现出典型的新老索引状态分裂

  1. 存量索引order_bak 等旧索引读写完全正常 ✅。
  2. 增量索引:新建 order, test_index 等,创建即 RED ❌。
  3. Reindex 失败:报错 primary shard is not active Timeout
  4. 无效操作:删除重建、修改 Mapping、更换索引名均无法恢复。

状态快照

GET _cat/indices?v
# 输出
health status index     uuid                   pri rep docs.count
red    open   order250  y9L9U7Z_TYCmVNAftHrtmw   1   0

二、根因定位 🔍

黄金法则:当遇到分片无法分配时,第一时间使用 Allocation Explain

诊断命令

GET _cluster/allocation/explain?pretty

核心报错分析

{
  "deciders": [
    {
      "decider": "disk_threshold",
      "decision": "NO",
      "explanation": "the node is above the high watermark cluster setting [cluster.routing.allocation.disk.watermark.high=90%], using more disk space than the maximum allowed [90.0%], actual free: [9.34%]"
    }
  ]
}

💡 结论

磁盘使用率已达 90.66%,超过 ES 默认的 High Watermark (90%)

  • 旧索引:分片已分配,不受限制。
  • 新索引:主分片无法初始化,导致 Index 处于 RED 状态。

三、紧急解决方案 🛠️

目标:在不丢数据的前提下,立即恢复写入能力。

Step 1:临时绕过磁盘保护(应急)

关闭磁盘分配阈值检查,允许 ES 在满盘状态下分配分片。

PUT _cluster/settings
{
    "persistent": {
        "cluster.routing.allocation.disk.threshold_enabled": false
    }
}

Step 2:强制重试分片路由

手动触发 Reroute,重新分配卡住的主分片。

POST _cluster/reroute?retry_failed=true

Step 3:验证新建索引

# 创建测试索引
PUT order250
{
    "settings": { "number_of_shards": 1, "number_of_replicas": 0 }
}

# 检查状态
GET _cat/indices/order250?v
# health status index ...
# green  open   order250 ...

状态变为 Green,问题解决。


四、生产环境治理建议 📈

⚠️ 注意:上述操作仅为应急处理,切勿长期关闭磁盘检查。

1. 清理磁盘(根本解决)

将磁盘使用率降至 85% 以下

  • 删除过期日志、快照备份。
  • 清理无用索引(使用 ILM 策略)。
  • 扩容磁盘。

2. 恢复安全阈值

确认磁盘空间充足后,务必重新开启磁盘检查:

PUT _cluster/settings
{
    "persistent": {
        "cluster.routing.allocation.disk.threshold_enabled": true
    }
}

3. ES 磁盘水位线速查表

水位级别 默认值 行为后果
Low 85% 仅记录日志警告,开始限制副本分配。
High 90% 禁止分配新分片(本次故障点)。
Flood Stage 95% 所有索引强制只读(Block write)。

4. 监控建议

  • 配置告警:磁盘使用率 > 80%。
  • 定期检查:GET _cluster/healthGET _cat/allocation

五、排障总结 📝

  1. 现象判断:旧索引正常 + 新索引全红 = 99% 是磁盘问题
  2. 诊断神器:永远优先使用 _cluster/allocation/explain
  3. 避坑指南:Windows/Linux 版 ES 均有此机制,切勿盲目删除 data 目录。
  4. 运维规范:必须设置磁盘监控,防止触发 Flood Stage 导致全线只读。
posted @ 2026-04-17 11:15  o李一波o  阅读(53)  评论(0)    收藏  举报