怎么处理[TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark
这个错误说明 Elasticsearch 的磁盘空间严重不足,已触及最高级别(flood-stage
)的水位线。作为自我保护机制,Elasticsearch 自动将受影响的索引设置为只读模式 (read-only-allow-delete
),从而阻止写入操作(包括索引新数据),只允许删除操作。核心原因在于节点磁盘空间不足。以下是完整解决步骤:
1. 确认磁盘使用状况
# 查看各节点磁盘使用率(ES API)
GET _cat/allocation?v&h=node,disk.percent,disk.used,disk.avail,disk.total,shards# 系统级检查(在ES节点服务器执行)
df -h # 查看所有挂载点空间
du -sh /path/to/es/data/* # 定位大索引目录
2. 紧急释放磁盘空间
优先选项:通过ES API删除数据
# 删除指定索引(谨慎操作!)
DELETE /old_index-2020-*# 使用Curator工具自动化清理(推荐)
curator_cli --host 127.0.0.1 delete_indices --filter_list '[{"filtertype": "age","source": "creation_date","direction": "older","unit": "days","unit_count": 30},{"filtertype": "pattern","kind": "prefix","value": "logs-"}
]'
次选选项:清理ES日志 & 临时文件
# 删除ES日志(调整logging.yml避免过大日志)
rm /var/log/elasticsearch/*.log.* # 清理系统临时文件
sudo apt-get clean # Debian/Ubuntu
sudo yum clean all # CentOS/RHEL
journalctl --vacuum-size=100M # 清理journal日志
⚠️ 危险操作(仅在绝对必要时)
# 手动删除索引文件(可能导致数据损坏)
# 先关闭ES服务!然后删除大索引目录
systemctl stop elasticsearch
rm -rf /data/elasticsearch/nodes/0/indices/old_index-2020-*
systemctl start elasticsearch
3. 临时解除索引只读阻塞
操作前确保已释放足够空间(建议超过low
水位线)。
PUT /.async-search/_settings
{"index.blocks.read_only_allow_delete": null
}
4. 调整ES磁盘水位线
在elasticsearch.yml
中设置更合理的阈值(根据实际磁盘容量调整):
# 紧急水位线(默认95%)
cluster.routing.allocation.disk.watermark.flood_stage: 90% # 高水位线(默认90%)
cluster.routing.allocation.disk.watermark.high: 85% # 低水位线(默认85%)
cluster.routing.allocation.disk.watermark.low: 80%
重启ES节点 或 使用动态设置:
PUT _cluster/settings
{"transient": {"cluster.routing.allocation.disk.watermark.low": "80%","cluster.routing.allocation.disk.watermark.high": "85%","cluster.routing.allocation.disk.watermark.flood_stage": "90%","cluster.info.update.interval": "1m" # 检查磁盘频率}
}
5. 长期预防措施
措施 | 操作 |
---|---|
监控告警 | 配置Prometheus + Grafana监控磁盘空间,设置85%使用率告警阈值 |
定期维护 | 使用ILM (Index Lifecycle Management) 自动滚动删除旧索引 |
扩容磁盘 | 单节点扩展磁盘 或 增加新数据节点 |
配置备份 | 使用Snapshot & Restore 备份到S3/NFS,定期删除本地旧快照 |
冷热架构 | 部署热节点(SSD)+ 冷节点(大容量HDD),通过index.routing.allocation 迁移数据 |
处理流程总结
关键建议: 始终保留至少 20% 的磁盘空闲空间,避免ES触发自我保护。定期清理旧数据 比 被动处理磁盘满 更可靠!🚀