这个错误说明 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触发自我保护。定期清理旧数据 比 被动处理磁盘满 更可靠!🚀