Elasticsearch 新建索引 RED 排障总结
🚨 Elasticsearch 排障实录:新建索引 RED / 旧索引正常
| 属性 | 详情 |
|---|---|
| 📁 环境 | Windows Server + Elasticsearch 8.0.0 |
| 🐞 症状 | 新建索引瞬间 RED;旧索引读写正常;重启/删库无效 |
| 🎯 根因 | 磁盘占用 ≥ 90%,触发 Disk Watermark (High) |
| ✅ 结果 | 关闭阈值 → 强制分配 → 索引 Green |
一、问题现象 ⚠️
集群表现出典型的新老索引状态分裂:
- 存量索引:
order_bak等旧索引读写完全正常 ✅。 - 增量索引:新建
order,test_index等,创建即 RED ❌。 - Reindex 失败:报错
primary shard is not active Timeout。 - 无效操作:删除重建、修改 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/health和GET _cat/allocation。
五、排障总结 📝
- 现象判断:旧索引正常 + 新索引全红 = 99% 是磁盘问题。
- 诊断神器:永远优先使用
_cluster/allocation/explain。 - 避坑指南:Windows/Linux 版 ES 均有此机制,切勿盲目删除
data目录。 - 运维规范:必须设置磁盘监控,防止触发 Flood Stage 导致全线只读。
浙公网安备 33010602011771号