网站优化

网站优化

Products

当前位置:首页 > 网站优化 >

Elasticsearch快照如何导致磁盘异常占用,该如何解决?

GG网络技术分享 2026-01-20 06:21 0


文章浏览阅读2.5k次,点赞3次,收藏10次。错误描述: ElasticSearch 主要原因是磁盘空间不够引起的数据插入错误。];]])当使用Logstash将MySQL中的数据采用到ES索引中: 出现以下问题, 昨天还可yi正常采集mysql数据库中的信息, 今天报了错,解决方案如下:问题原因:索引变成了只读index read-only / allow del_es磁盘快满了 的异常 学习消息历史ElasticSearch 主要原因是磁盘空间不够引起的数据插入错误 版权ElasticSearch专栏收录该内容11 篇文章8 订阅 错误描述:主要原因是磁盘空间不够引起的数据插入错...

一、快照到底是个啥玩意儿?

先说点废话——快照其实就是把你那堆碎碎念的索引, 打包成一个kan起来hen高大上的文件,往云里扔。 图啥呢? 听起来像是保险,却经常在你Zui不想它出现的时候,偷偷把硬盘占满,让你哭着跑去改配置。

深度剖析Elasticsearch快照导致的磁盘异常占用

别问我为什么我也不懂。

1. 快照的工作原理

  • 全量复制:把每个分片的段文件拷贝过去,像搬家一样慢。
  • S3/OSS/本地:你选哪个, 它douNeng装进去,只要有存储就行。
  • 增量:按道理讲只复制新产生的段,但实际经常被误导成全量。

二、 磁盘被快照吞噬的典型案例

A. 老板让Zuo全量备份,后来啊硬盘直接炸了!

切中要害。 # curl -XPUT 'localhost:9200/_snapshot/my_repo/snap_2024_01_01?wait_for_completion=true'

- 施行完毕后 你会kan到"successful_shards": 12345但硬盘使用率瞬间从45%跳到99%. 那叫一个心跳骤停,别怕...。

B. 自动监控快照频繁触发,根本停不下来。

- 有些人把x-pack monitoring和快照混在一起,以为这样可yi“一键恢复”。 总体来看... 后来啊监控索引自己也会生成快照,又把磁盘塞得满满当当。真是"自相残杀".

三、怎么快速定位“快照占用”这颗定时炸弹?

试着... # 方法一:_cat/snapshots kan清楚到底有多少快照在跑。

# curl 'localhost:9200/_cat/snapshots/my_repo?v&s=started'
| repository | id          | start_time               | duration | successful_shards |
|-----------|-------------|--------------------------|----------|-------------------|
| my_repo   | snap_20240101| 2024-01-01T00:00:00Z     | 5m       | 1200              |
...

# 方法二:_cat/indices + grep “sn 可以。 apshot” kankan哪些索引是由快照产生的系统索引。

# curl 'localhost:9200/_cat/indices?v' | grep .monitoring
monitoring-es-6-2019.11.27 ... 

# 方法三:直接打开数据目录,用 du -sh * 检查哪个目录占比Zui大,谨记...。

四、解决思路——先止血再治本

临时止血:强制删除老旧快照!

# curl -XDELETE 'localhost:9200/_snapshot/my_repo/snap_old'
# 注意:删除前请确认真的不需要恢复,否则后悔莫及! 

调整水位线——别让 ES 自己把索引用光!

参数名 默认值 推荐值
`cluster.routing.allocation.disk.watermark.low` `85%` `70%`
`cluster.routing.allocation.disk.watermark.high` `90%` `80%`
`cluster.routing.allocation.disk.watermark.flood_stage` `95%` `75%`
`path.repo` `` ``

把监控索引搬走——单独一个节点专门放监控数据!

踩个点。 "我太难了",这是hen多运维在kan到监控索引撑爆节点时的心声。建议新建一台轻量级机器,只装 x-pack monitoring-collector, 把 .monitoring-*) 指向那个机器的路径。这样主业务节点就不会被监控日志拖慢。

定期清理策略——写脚本别偷懒!

#!/bin/bash
# 每周凌晨清理30天前的快照
RETENTION_DAYS=30
REPO=my_repo
SNAP=$(curl -s "localhost:9200/_cat/snapshots/$REPO?h=id,start_time" | \
       awk -v days=$RETENTION_DAYS '{if  

五、 市场上常见的几款“ES 快照+存储”方案对比

Ceph RBD + Snapshot API $0.04/GB/月 98% 适合大规模对象存储,兼容性好 9/10 💎💎💎💎💎💎💎💎💎💎 本地磁盘 + 手动 tar.gz 打包  —  —  —  —  极简版,仅适合实验环境  —  — 5/10 📦📦📦📦📦  —  —   
备份方案对比表
Name LBS SLA Ecosystem 支持度 Mental Health Score*
AWS S3 + 官方插件 $0.023/GB/月 99.9% AWS 全家桶深度集成 7/10 🚀🚀🚀🚀🚀🚀🚀⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪ ⚡️
阿里云 OSS + ES 插件 ¥0.15/GB/月 99% 国内网络友好,文档中文化 6/10 🌩🌩🌩🌩🌩🌩☁️☁️☁️☁️☁️☁️
自建 NFS + Curator 脚本 免费 取决于自家硬件 灵活度Zui高,可自行调度 8/10 🛠🛠🛠🛠🛠🛠🛠🛠⚙️⚙️⚙️

* Mental Health Score 为作者自创指标,仅供玩笑参考,不代表ren何官方评级。

六、FAQ – 那些常见却奇葩的问题

a) 为什么删除快照后磁盘仍然没有释放? 🤔🤔🤔​​​​​​​​​​ ​ ​ ​ ​ ​ ​ ​ ​ ​    主要原因是还有 dangling 索引残留!抓紧检查 data_path 下有没有 orphan 文件夹。

b) 快照耗时太久,是不是网络卡?还是硬盘慢? 🤷‍♀️🤷‍♂️​ 两者dou有可Neng, 你可yi先 ping S3 endpoint,再跑 dd if=/dev/zero of=/tmp/test bs=1M count=1024 kan写速率。

快照导致只读后我怎么恢复写入权限? 🙈🙉🙊           答:施行下面命令把标记关掉:
# curl -XPUT 'localhost:9200/_all/_settings' -H 'Content-Type: application/json' -d '{"index.blocks.read_only_allow_delete": null}' 
# huo者针对单个 index:
# curl -XPUT 'localhost:9200/my_index/_settings' -d '{"index.blocks.read_only_allow_delete": false}'
  • 💡定期审计快照数量和大小;不要等到磁盘报警才慌。
  • 📈SLA 水位线调低一点, 宁可浪费点空间,也别让 ES 把业务挂掉。
  • 🔧Pain‑point 是Zui好的学习教材, 下次遇到类似情况,你Yi经有经验可yi直接 copy‑paste 命令啦!✂️✂️✂️.
  • ⚠️If you still see disk usage at 100%, consider adding a new node or expanding underlying storage before your next backup runs.


提交需求或反馈

Demand feedback