【Elasticsearch】安全地删除快照仓库、快照

Elasticsearch 集群》系列,共包含以下文章:

  • 1️⃣ 冷热集群架构
  • 2️⃣ 合适的锅炒合适的菜:性能与成本平衡原理公式解析
  • 3️⃣ ILM(Index Lifecycle Management)策略详解
  • 4️⃣ Elasticsearch 跨机房部署
  • 5️⃣ 快照与恢复功能详解
  • 6️⃣ Elasticsearch 快照恢复 API 参数详解
  • 7️⃣ 安全地删除快照仓库、快照
  • 8️⃣ 快照生命周期管理 SLM(理论篇)
  • 9️⃣ 快照生命周期管理 SLM(实战篇)
  • 🔟 跨集群检索(Cross-Cluster Search)

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

安全地删除快照仓库、快照

  • 1.删除仓库
  • 2.删除快照

在上一篇博文《【Elasticsearch】快照与恢复功能详解》中,我们针对 Elasticsearch 的快照和恢复功能进行的讲解。细心的同学可能会对以下的命令产生疑惑,直接删除是安全的吗?本文将会给你答案。

  • 删除仓库:DELETE /_snapshot/my_backup_repo
  • 删除快照:DELETE /_snapshot/my_backup_repo/my_snapshot_20230720

1.删除仓库

当你执行 DELETE /_snapshot/my_backup_repo 这个命令时,你是在 Elasticsearch 集群中删除 my_backup_repo 这个快照仓库的注册信息或定义。

关键点在于:

  • 删除的是“注册信息”,不是物理数据:这个操作 不会 删除存储在实际后端存储系统(比如 AWS S3 桶、Azure Blob 容器、NFS 共享目录等)中的 任何快照文件或数据
  • 后果:
    • Elasticsearch 集群将不再知道存在名为 my_backup_repo 的仓库。
    • 你无法再通过 Elasticsearch API 来 查看、创建、恢复或删除 这个仓库中的任何快照(因为集群不知道它了)。
    • 无法再通过 Elasticsearch 管理 存储在该位置的历史快照。
  • 物理数据依然存在:你使用这个仓库创建的所有快照文件(my_snapshot_1, my_snapshot_2 等)仍然 安全地躺在 你配置的 S3 桶、Azure 容器、共享文件系统路径等地方。
  • 为什么设计成这样?这是一种安全机制。防止管理员在 Elasticsearch 中误操作删除仓库命令时,导致宝贵的备份数据被物理删除。真正的数据删除需要直接操作底层存储系统。
  • 如何真正删除快照数据?
    • 如果你想 彻底删除快照数据以释放存储空间,你必须在 删除仓库注册信息之前,使用 Elasticsearch API 先删除仓库内的具体快照:DELETE /_snapshot/my_backup_repo/my_snapshot_20230720。这个命令会通知 Elasticsearch 去清理仓库中该快照专用的、不再被其他快照引用的数据段。
    • 或者,在 删除了仓库注册信息之后,你只能 直接登录到你的存储系统(如 AWS S3 控制台、Azure 门户、NFS 服务器),手动找到对应的目录/路径并删除里面的文件。这需要你非常清楚仓库在存储系统中的具体位置(比如 S3 桶里的 snapshots/prod_cluster 路径)。

简单比喻:

想象你的快照仓库是一个图书馆(物理存储)。DELETE /_snapshot/my_backup_repo 这个操作相当于:

  • 把图书馆的 地址登记簿 上关于 my_backup_repo 图书馆的那一页 撕掉了
  • 图书馆管理员(Elasticsearch)忘记了这个图书馆的存在,再也不能帮你从里面借书(管理快照)。
  • 但是,图书馆大楼本身和里面所有的书(你的快照数据)都完好无损地还在原地!只是管理员不知道它在哪里,也无法帮你管理里面的书了。

总结:执行 DELETE /_snapshot/my_backup_repo 只会移除 Elasticsearch 集群内部对这个仓库的配置和认知,绝不会触碰存储在外部(如 S3、NAS)的实际快照数据文件。 要清理物理存储空间,必须在删除仓库定义前通过 API 删除快照,或在删除仓库定义后直接操作底层存储系统。

2.删除快照

  • DELETE /_snapshot/my_backup_repo/my_snapshot_20230720
  • Elasticsearch 会清理 仅被该快照引用 的段文件。被其他快照共享的段文件不会被删除。删除是安全的操作。

上面这段话解释了执行 DELETE /_snapshot/my_backup_repo/my_snapshot_20230720 命令删除 单个快照 时,Elasticsearch 在 底层存储层面 的智能行为和安全机制。核心是理解 “增量快照”“段文件共享” 的原理。

解析:

  • DELETE /_snapshot/my_backup_repo/my_snapshot_20230720
    • 这是删除名为 my_backup_repo 的快照仓库中,名为 my_snapshot_20230720 的特定快照的命令。
  • Elasticsearch 会清理仅被该快照引用的段文件
    • 段文件(Segment Files):Elasticsearch(底层是 Lucene)将索引数据存储在不可变的段文件中。写入操作会产生新的段,后台会合并小的段成大的段。
    • 增量快照:快照是增量的。首次快照备份所有相关的段文件。后续快照只备份 自上次快照以来新创建或修改的段文件旧的、未修改的段文件在仓库中只有一份物理存储,但会被多个快照逻辑引用。
    • 仅被该快照引用:当删除一个快照时,Elasticsearch 会检查仓库中哪些段文件 只有 这个即将被删除的快照在使用(引用)。这些段文件不再被任何其他快照需要,因此是 “孤立” 的,可以安全地从物理存储中删除以释放空间。
    • 清理:指物理删除这些不再被任何快照引用的段文件。
  • 被其他快照共享的段文件不会被删除
    • 如果一个段文件存在于多个快照中(例如,它是一个在 my_snapshot_20230720 创建之前就存在且从未修改过的段,被 my_snapshot_20230720 和更早的快照如 my_snapshot_20230713 共同引用),那么删除 my_snapshot_20230720 不会 删除这个共享的段文件。
    • 因为其他快照(如 my_snapshot_20230713)仍然需要它。只有该快照独有的段文件才会被清理。
  • 删除是安全的操作
    • 不会误删共享数据:如上所述,被其他快照共享的基础数据会被保留,确保其他快照的完整性和可恢复性。
    • 精准释放空间:只删除真正不再需要的、孤立的段文件,有效释放存储空间。
    • 不影响其他快照:删除一个快照不会破坏或影响仓库中其他快照的完整性。其他快照仍然可以正常恢复。
    • 操作幂等性(通常):如果尝试删除一个不存在的快照,命令通常会返回一个错误(如 404),不会造成意外后果。重复删除同一个快照(如果第一次成功)通常也会报错(404),不会执行额外操作。

核心概念图示:

想象快照仓库里存储的是乐高积木(段文件):

  • 1️⃣ 首次快照 → Snap1:备份了构建城堡 A 所需的所有积木(Block1、Block2、Block3)。

  • 2️⃣ 第二次快照 → Snap2:城堡 A 只在顶部加了一个新塔尖(Block4)。Snap2 只需备份新的 Block4。Snap2 的完整城堡由 [Block1, Block2, Block3 (引用自Snap1), Block4] 组成。

  • 3️⃣ 第三次快照 → Snap3:城堡 A 被改造成了飞船,替换了底座(Block5),保留了部分旧墙(Block2)。Snap3 备份新的 Block5 和修改过的 Block2(可能是一个新版本的 Block2)。Snap3 的飞船由 [Block2(新版本), Block3 (引用自Snap1), Block5] 组成。旧的 Block1 和 Block4 不再被引用。

    • 物理存储:所有积木(Block1/2/3/4/5/2’)实际只存储一份
    • 逻辑引用
      • Snap1 → 引用基础积木 Block1/2/3
      • Snap2 → 引用共享积木 Block1/2/3 + 独有 Block4
      • Snap3 → 引用共享积木 Block3 + 新积木 Block2’/5
  • 4️⃣ 删除 Snap2

    • Snap2 独有的积木是 Block4(因为 Snap1 没有它,Snap3 也不需要它)。
    • Snap2 和其他快照 共享 的积木是 Block1, Block2(旧), Block3 (它们还被 Snap1 或 Snap3 引用)
    • 结果:执行 DELETE /_snapshot/repo/Snap2 后,检查引用计数:
      • Block4 仅被 Snap2 引用 → 删除(物理删除)
      • Block1 还被 Snap1 引用 → 保留
      • Block2(旧) 还被 Snap1 引用 → 保留
      • Block3 被 Snap1/Snap3 引用 → 保留
    • Snap1 和 Snap3 仍然完整可用。

总结理解的关键点在于:

  • 增量性与共享:快照不是独立的完整拷贝,它们共享未修改的底层数据段。
  • 引用计数:Elasticsearch 内部维护着仓库中段文件被哪些快照引用的信息。
  • 智能清理:删除快照时,只清理 引用计数降为 0(即不再被任何快照引用)的段文件。
  • 安全保证:这种基于引用计数的清理机制确保了:
    • 删除一个快照不会破坏其他快照。
    • 空间得到有效释放(删除孤立数据)。
    • 操作不会导致意外数据丢失(只删该删的)。

因此,你可以放心地删除旧的或不必要的快照来管理仓库存储空间,而不用担心会破坏其他快照或丢失仍然需要的基础数据。这就是 “删除是安全的操作” 的含义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916021.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nodejs的npm

1. 什么是 npm? npm(Node Package Manager) 是 Node.js 的默认包管理工具,用于: 安装和管理依赖(第三方库、框架等)。运行项目脚本(如启动服务、测试、构建等)。发布和共…

外网访问内部私有局域网方案,解决运营商只分配内网IP不给公网IP问题

相信不少网友和我一样,为了实现远程控制、NAS访问、组建私有云、摄像头监控之类的需求,把光猫改成了桥接模式,并用自己的路由器拨号、进行端口了映射。本人之前一直用着没啥问题,不过,最近突然出现了无法访问的情况&am…

大模型——上下文工程 (Context Engineering) – 现代 AI 系统的架构基础

上下文工程 (Context Engineering) – 现代 AI 系统的架构基础 最近,AI大神 Andrej Karpathy 在YC的一个演讲《Software in the era of AI 》带火了一个新的概念 Context Engineering,上下文工程,LangChain也于7月2号在官网博客发表以《Context Engineering》为题目的文章(h…

PostgreSQL RelationBuildTupleDesc 分解

/** RelationBuildTupleDesc** Form the relations tuple descriptor from information in* the pg_attribute, pg_attrdef & pg_constraint system catalogs.*///从pg_attribute,pg_attrdef和pg_constraint 获取字段信息以填充relation->rd_att static void //用到的…

在 Alpine Linux 中创建虚拟机时 Cgroup 挂在失败的现象

现象:在 Alpine Linux 中部署 LXD或者incus 服务后,创建 容器或者虚拟机时提示 实例启动失败、退出代码为1:查询启动日志后,发现是 cgroup 挂载失败导致了 container 拉起失败。原因分析:从启动日志上看,是…

让UV管理一切!!!

一、遇到的问题 自己在做AI开发的时候,先用的conda来管理虚拟环境,然后使用pip freeze > reqiurments来打包相关依赖。 优点,conda环境可以让不同的项目有单独的虚拟环境,不会干扰每个项目,还可以多个项目共享一个…

Jmeter使用 - 2

5 参数化 5.1 自定义变量 线程组 --> 配置元件 --> 用户定义的变量 可以自定义变量,通过 ${变量名} 使用 5.2 随机函数 随机数函数 # 生产六位数的随机数字 ${__Random(100000,999999,)} # 生成随机时间: 时间格式yyyy-MM-dd,开始时间,结束时间,设置时区…

部署 Zabbix 企业级分布式监控

目录 一、监控系统的功能概述 1、监控的定义 2、监控的五个层次 (1)基础设施监控 (2)系统层监控 (3)应用层监控 (4)业务监控 (5)端用户体验监控 二、…

Silly Tavern 教程②:首次启动与基础设置

本文介绍 Silly Tavern 首次启动后的基础设置,包括语言切换与 AI 后端连接,重点推荐 无需付费即可使用的免费或低成本方案,涵盖 Groq、AI Horde、Gemini 和 OpenRouter。 一、启动 Silly Tavern 并访问界面 完成安装后,执行以下命…

C#解析JSON数据全攻略

还在为C#处理网络API返回的复杂JSON数据头疼吗?据统计,90%的开发者都曾在JSON解析上栽过跟头! 本文将手把手教你用C#轻松玩转JSON数据:- HttpClient获取网络JSON数据- System.Text.Json动态解析技巧- 强类型模型转换实战- 特殊字…

8-大语言模型—指令理解:基于 LoRA 的大语言模型指令微调框架

目录 1、模型上下文窗口 1.1、增加上下文窗口的微调(Fine-tuning for Longer Context) 1.1.1、 核心目标 1.1.2、关键步骤 (1)数据准备:构建长文本训练集 (2)微调策略:分阶段适…

工业数据中台:PLC、SCADA、MES 的实时协同架构

在智能制造升级过程中,工业数据的互联互通是突破生产效率瓶颈的关键。PLC(可编程逻辑控制器)掌控着设备的实时运行参数,SCADA(监控与数据采集系统)负责车间级的状态监控,MES(制造执行…

【Golang】Go语言基础语法

Go语言基础语法 文章目录Go语言基础语法一、Go标记二、行分隔符三、注释四、标识符五、字符串连接六、关键字七、Go语言的空格八、格式化字符串一、Go标记 Go程序可以由多个标记组成吗,可以是关键字、标识符、常量、字符串、符号。如下Go语句由6个标记组成&#xf…

WebRTC指纹——深度分析(中篇)

1. 引言 在上篇中,我们建立了WebRTC审查规避系统分析的理论基础,探讨了技术背景和威胁模型。中篇将深入分析WebRTC协议栈中的具体识别特征,通过对多个主流WebRTC应用的实际协议分析,揭示不同实现之间存在的显著差异。 这些协议层面的特征差异构成了审查系统进行指纹识别的…

谷粒商城篇章13--P340-P360--k8s/KubeSphere【高可用集群篇一】

1 k8s 1.1 简介 Kubernetes 简称 k8s。 是用于自动部署, 扩展和管理容器化应用程序的开源系统。 中文官网: https://kubernetes.io/zh/ 中文社区: https://www.kubernetes.org.cn/ 官方文档: https://kubernetes.io/zh/docs/h…

从零搭建 OpenCV 项目(新手向)-- 第二天 OpenCV图像预处理(一)

目录 一、图像翻转(镜像翻转) 1. 定义 2. OpenCV 函数 3. 数学表达 二、图像仿射变换 1. 定义 2. 仿射变换的基本原理 3. OpenCV 函数 4. 图像旋转 5. 图像平移 6. 图像缩放 7. 图像剪切 8. 为什么会出现黑色背景? 三、图像色彩…

贪心算法Day6学习心得

第一道:738. 单调递增的数字 - 力扣(LeetCode) 这道题目暴力算法肯定是最容易想到的,先附上暴力的代码: class Solution { private:// 判断一个数字的各位上是否是递增bool checkNum(int num) {int max 10;while (n…

数据的评估与清洗篇---上手清理索引和列名

重命名索引和列名 在读取数据时,如果我们发现数据的索引或者列名乱七八糟的,可以使用DataFrame的rename方法对它们进行重新命名。 df1.rename(index={...})df1.rename(columns={...}) 重命名索引 如果想改索引就把可选参数index指定为一个字典,针对索引,把要修改…

【ICML2025】时间序列|TimePro:炸裂!线性复杂度实现高效长程多元时间序列预测!

论文地址:https://arxiv.org/pdf/2505.20774 代码地址:https://github.com/xwmaxwma/TimePro 为了更好地理解时间序列模型的理论与实现,推荐参考UP “ThePPP时间序列” 的教学视频。该系列内容系统介绍了时间序列相关知识,并提供配…

2025真实面试试题分析-iOS客户端开发

以下是对iOS客户端开发工程师面试问题的分类整理、领域占比分析及高频问题精选(基于​​85道问题,总出现次数118次​​)。按技术领域整合为​​7大核心类别​​,按占比排序并精选高频问题标注优先级(1-5🌟&…