怎么处理[TOO_MANY_REQUESTS/12/disk usage exceeded flood-stage watermark

发布于:2025-07-05 ⋅ 阅读:(20) ⋅ 点赞:(0)

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


网站公告

今日签到

点亮在社区的每一天
去签到