【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.核心价值与优势
  • 3.关键组件详解
    • 3.1 快照仓库
    • 3.2 快照
    • 3.3 恢复
  • 4.最佳实践与注意事项
  • 5.总结

快照与恢复(Snapshot and Restore)功能是构建健壮、可恢复的 Elasticsearch 集群的 核心基石,用于 灾难恢复数据迁移版本升级回滚环境复制 等关键场景。

1.核心概念

  • 快照:是 Elasticsearch 集群状态索引数据 在特定时间点的 只读副本。它不是简单的文件拷贝,而是利用 Elasticsearch 底层(Lucene)的特性高效捕获数据。
  • 快照仓库:快照存储的位置。这是一个 持久化的共享存储系统,集群所有节点都能访问。Elasticsearch 不管理存储的生命周期(如清理旧快照),需在仓库层面管理。
  • 恢复:将存储在快照仓库中的一个或多个快照的数据和元数据 还原 到集群中的过程。可以恢复到原集群或新集群。

2.核心价值与优势

  • 灾难恢复:应对硬件故障、人为误删、软件缺陷导致的数据损坏或丢失。
  • 数据迁移
    • 跨集群迁移(同版本或升级)。
    • 跨云迁移或混合云部署。
    • 从开发/测试环境迁移到生产环境。
  • 版本升级/回滚:在重大升级前创建快照,升级失败可快速回滚到之前状态。
  • 环境复制:将生产环境的数据快照恢复到测试或预发布环境,进行真实数据测试。
  • 长期归档:将不再频繁访问但仍需保留的数据(符合合规要求)归档到成本更低的存储介质。
  • 增量高效
    • 首次快照:是全量备份。
    • 后续快照:默认是 增量 的!Elasticsearch 只会备份自上次快照以来 新增或修改的 Lucene 段文件。这极大地节省了存储空间和备份时间。
  • 一致性保证:快照过程保证捕获的是 一致的时间点视图,即使索引正在被写入。这是通过利用 Lucene 的不可变段文件特性实现的。
  • 灵活粒度
    • 可以备份 整个集群
    • 可以备份 特定的索引
    • 可以备份 特定的数据流
    • 可以包含 集群状态(包含索引模板、ILM 策略、Ingest Pipeline、索引别名、持久化任务等元数据)。
  • 并行恢复:恢复操作可以在多个节点上并行执行,加快恢复速度。
  • 云原生支持:与主流对象存储(AWS S3、Azure Blob Storage、Google GCS)深度集成,通过仓库插件实现。

3.关键组件详解

3.1 快照仓库

  • 类型:由插件实现。常见类型:
    • 共享文件系统fs):NFS、SAN、NAS。需确保所有节点挂载到同一路径,并有读写权限。
    • 对象存储
      • AWS S3s3):通过 repository-s3 插件。
      • Azure Blob Storageazure):通过 repository-azure 插件。
      • Google Cloud Storagegcs):通过 repository-gcs 插件。
      • 兼容 S3 API 的存储(如 MinIO、Ceph RGW):也可使用 s3 类型。
    • HDFShdfs):通过 repository-hdfs 插件。
  • 注册:仓库必须 先注册 才能使用。注册是集群级别的操作。
    PUT /_snapshot/my_backup_repo
    {"type": "s3","settings": {"bucket": "my-elasticsearch-backups","region": "us-west-1","access_key": "YOUR_ACCESS_KEY", // 推荐使用 IAM 角色或 Keystore"secret_key": "YOUR_SECRET_KEY", // 推荐使用 IAM 角色或 Keystore"base_path": "snapshots/prod_cluster" // 可选,仓库内的路径}
    }
    
  • 验证
    • 检查节点是否能连接仓库:GET /_snapshot/my_backup_repo/_verify
  • 管理
    • 查看所有仓库:GET /_snapshot
    • 删除仓库(不会删除仓库内快照数据):DELETE /_snapshot/my_backup_repo

3.2 快照

  • 创建
    PUT /_snapshot/my_backup_repo/my_snapshot_20230720?wait_for_completion=true
    {"indices": "index_1,index_2,data_stream_*", // 可选,默认备份所有 open 的索引和数据流"ignore_unavailable": true, // 忽略不存在的索引"include_global_state": true, // 可选,默认 true,是否包含集群状态"partial": false // 可选,默认 false。true 允许部分索引备份成功(有未分配分片时)。生产环境慎用!
    }
    
    • wait_for_completion=true 会阻塞直到完成。大型集群建议设为 false,通过 API 监控进度。
  • 增量性:自动识别并仅备份新/改的段文件。仓库维护一个快照链。
  • 监控
    • 查看特定快照状态:GET /_snapshot/my_backup_repo/my_snapshot_20230720
    • 查看详细进度和统计信息:GET /_snapshot/my_backup_repo/my_snapshot_20230720/_status
    • 查看所有正在运行的快照:GET /_snapshot/_status
  • 删除
    • DELETE /_snapshot/my_backup_repo/my_snapshot_20230720
    • 重要: Elasticsearch 会清理 仅被该快照引用 的段文件。被其他快照共享的段文件不会被删除。删除是安全的操作。

3.3 恢复

  • 基本恢复
    POST /_snapshot/my_backup_repo/my_snapshot_20230720/_restore?wait_for_completion=false
    {"indices": "index_1,index_2", // 可选,默认恢复快照中所有索引"ignore_unavailable": true,"include_global_state": false, // 强烈建议设置为 false!除非明确需要恢复集群级设置"include_aliases": false, // 可选,是否恢复索引别名"index_settings": { // 可选,覆盖恢复索引的设置"index.number_of_replicas": 0 // 例如恢复时先不加副本加快速度},"ignore_index_settings": ["index.refresh_interval"] // 可选,忽略某些设置
    }
    
  • 重命名索引 / 更改数据流:使用 rename_patternrename_replacement 参数在恢复时重命名索引或更改数据流名称。
    POST /_snapshot/my_backup_repo/my_snapshot_20230720/_restore
    {"indices": "logs-prod-*","rename_pattern": "logs-prod-(.+)","rename_replacement": "logs-test-$1" // 将 logs-prod- 前缀改为 logs-test-
    }
    
  • 选择性恢复:可以只恢复特定索引,甚至使用 include_aliasesindex_settings 精细控制。
  • 部分恢复:如果快照创建时允许 partial,即使有分片缺失也能恢复(数据不完整)。
  • 监控恢复
    • 恢复 API 返回的 task_id 可用于 GET /_tasks/{task_id}
    • 索引恢复状态:GET /_recoveryGET /index_1/_recovery
    • 集群健康:GET /_cluster/health 关注 initializing_shardsrelocating_shards
  • 冲突处理:如果要恢复的索引在目标集群中 已存在且打开,恢复操作 默认会失败。必须先关闭或删除目标集群中的现有索引。

4.最佳实践与注意事项

  • 仓库选择
    • 生产环境强烈推荐使用云对象存储(S3GCSAzure Blob)或高度可靠的共享文件系统。 避免使用本地路径。
    • 权限与安全:严格配置仓库访问权限(IAM 角色、存储桶策略)。使用 Elasticsearch Keystore 存储敏感凭证。
    • 生命周期管理:在存储系统层面配置策略,自动归档或删除旧快照(Elasticsearch 本身不自动清理)。
  • 快照策略
    • 定期快照:使用 Elasticsearch SLMSnapshot Lifecycle Management 自动化创建、保留和删除快照。定义策略(如每小时、每天、每周),保留策略(如保留最后 303030 天快照,每周保留一个快照持续 121212 个月)。
    • 命名规范:使用清晰一致的命名(如 daily-20230720)。
    • 测试恢复!定期进行恢复演练 是确保备份有效性的唯一方法。恢复到隔离环境验证。
  • 恢复策略
    • include_global_state: false 恢复生产快照到非生产环境时,几乎总是将此设置为 false 避免覆盖目标集群的模板、ILM 策略等关键配置。
    • 副本设置:恢复时临时设置 index.number_of_replicas: 0 可以显著加快恢复速度(数据只恢复一份)。恢复完成后,再调整副本数。
    • 资源规划 :恢复是资源密集型操作(网络 I/O、磁盘 I/O、CPU)。确保目标集群有足够资源,避免影响线上业务。考虑在维护窗口进行。
    • 版本兼容性:快照具有 向后兼容性
      • 你可以将 N.x 的快照恢复到 >= N.x 的集群(例如 7.17 快照 → 8.10 集群)。
      • 不能N.x 的快照恢复到 < N.x 的集群(例如 8.10 快照 → 7.17 集群)。需要先恢复到同版本或更高版本,再使用 Reindex API 或 Logstash 等工具向下迁移。
  • 监控与告警
    • 监控 SLM 作业执行状态(成功/失败)。
    • 监控快照创建/恢复的持续时间、速度。
    • 监控仓库存储空间使用情况。
    • 设置告警规则(如快照连续失败、仓库空间不足)。
  • 性能考量
    • 快照/恢复速度受限于 网络带宽(到仓库)和 存储 I/O 性能(源/目标集群磁盘、仓库)。
    • 大型集群的快照可能需要数小时。使用 wait_for_completion=false 并异步监控。
    • 调整 thread_pool(如 snapshotgeneric)大小需谨慎,评估对集群性能的影响。

5.总结

Elasticsearch 的快照与恢复是一个 强大、灵活且高效 的机制,是任何严肃的生产部署不可或缺的一部分。通过理解其增量备份原理、仓库管理、SLM 自动化以及细致的恢复策略(特别是 include_global_state 的处理),Elasticsearch 工程师能够构建可靠的数据保护、迁移和灾难恢复方案。

🚀 切记:备份的价值只有在成功恢复时才能体现,因此定期的恢复演练至关重要。

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

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

相关文章

技嘉z370主板开启vtx

技嘉z370vtx应该默认就是开启状态&#xff0c;虽然主板开启的vtx但是系统默认设置会导致vtx不能使用 1. 关闭hyper-V,Windows虚拟机监控程序平台,虚拟机平台 控制面板->程序->启用或关闭windows功能 2.以管理员身份运行CMD bcdedit /set hypervisorlaunchtype off 3.…

Springmvc的自动解管理

中央转发器&#xff08;DispatcherServlet&#xff09;控制器视图解析器静态资源访问消息转换器格式化静态资源管理一、中央转发器Xml无需配置<servlet><servlet-name>chapter2</servlet-name><servlet-class>org.springframework.web.servlet.Dispatc…

C#_定时器_解析

问题一:这里加lock是啥意思?它的原理是, 为什么可以锁住? private readonly Timer _timer;/// <summary>/// 构造函数中初始化定时器/// </summary>public FtpTransferService(){// 初始化定时器_timer new Timer(_intervalMinutes * 60 * 1000);_timer.Elapsed…

Trae开发uni-app+Vue3+TS项目飘红踩坑

前情 Trae IDE上线后我是第一时间去使用体验的&#xff0c;但是因为一直排队问题不得转战Cursor&#xff0c;等到Trae出付费模式的时候&#xff0c;我已经办了Cursor的会员&#xff0c;本来是想等会员过期了再转战Trae的&#xff0c;但是最近Cursor开始做妖了 网上有一堆怎么…

低代码中的统计模型是什么?有什么作用?

低代码开发平台中的统计模型是指通过可视化配置、拖拽操作或少量代码即可应用的数据分析工具&#xff0c;旨在帮助技术人员及非技术人员快速实现数据描述、趋势预测和业务决策。其核心价值在于降低数据分析门槛&#xff0c;使业务人员无需深入掌握统计原理或编程技能&#xff0…

Linux 下在线安装启动VNC

描述 Linux中的VNC就类似于Windows中的远程桌面系统 本文只记录在Cent OS 7的系统下在线安装VNC。 安装VNC 1、安装VNC yum install tigervnc-server2、配置VNC的密码 为用户设置 VNC 密码&#xff08;首次运行会提示输入&#xff0c;也可以提前输入&#xff09; vncpasswd密码…

支持OCR和AI解释的Web PDF阅读器:解决大文档阅读难题

支持OCR和AI解释的Web PDF阅读器&#xff1a;解决大文档阅读难题一、背景&#xff1a;为什么需要这个工具&#xff1f;问题场景解决方案二、技术原理&#xff1a;如何实现这些功能&#xff1f;1、核心技术组件2、工作流程3、关键点三、操作指南1、环境准备2、生成Html代码3、We…

研发过程都有哪些

产品规划与定义 (Product Planning & Definition) 在详细的需求调研之前&#xff0c;通常会进行市场分析、竞品分析、确立产品目标和核心价值。这个阶段决定了“我们要做什么”以及“为什么要做”。 系统设计与架构 (System & Architectural Design) 这是开发的“蓝图”…

旧物回收小程序系统开发——开启绿色生活新篇章

在当今社会&#xff0c;环保已经成为全球关注的焦点话题。随着人们生活水平的提高&#xff0c;消费能力不断增强&#xff0c;各类物品的更新换代速度日益加快&#xff0c;大量旧物被随意丢弃&#xff0c;不仅造成了资源的巨大浪费&#xff0c;还对环境产生了严重的污染。在这样…

UE5 UI 水平框

文章目录slot区分尺寸和对齐方式尺寸&#xff1a;自动模式尺寸&#xff1a;填充模式对齐常用设置所有按钮大小一致&#xff0c;不受文本影响靠右排列和unity的HorizontalLayout不太一样slot 以在水平框中放入带文字的按钮为例 UI如下布置 按钮的大小受slot的尺寸、对齐和内部…

【Golang】Go语言变量

Go语言变量 文章目录Go语言变量一、Go语言变量二、变量声明2.1、第一种声明方式2.2、第二种声明方式2.3、第三种声明方式2.4、多变量声明2.5、打印变量占用字节一、Go语言变量 变量来源于数学&#xff0c;是计算机语言中能存储计算结果或能表示值抽象的概念变量可以通过变量名…

Qt WebEngine Widgets的使用

一、Qt WebEngine基本概念Qt WebEngine中主要分为三个模块&#xff1a;Qt WebEngine Widgets模块&#xff0c;主要用于创建基于C Widgets部件的Web程序&#xff1b;Qt WebEngine模块用来创建基于Qt Quick的Web程序&#xff1b;Qt WebEngine Core模块用来与Chromeium交互。网页玄…

【C++】标准模板库(STL)—— 学习算法的利器

【C】标准模板库&#xff08;STL&#xff09;—— 学习算法的利器学习 STL 需要注意的几点及 STL 简介一、什么是 STL&#xff1f;二、学习 STL 前的先修知识三、STL 常见容器特点对比四、学习 STL 的关键注意点五、STL 学习路线建议六、总结七、下一章 vector容器快速上手学习…

YOLO算法演进综述:从YOLOv1到YOLOv13的技术突破与应用实践,一文掌握YOLO家族全部算法!

引言&#xff1a;介绍目标检测技术背景和YOLO算法的演进意义。YOLO算法发展历程&#xff1a;使用阶段划分方式系统梳理各代YOLO的技术演进&#xff0c;包含早期奠基、效率优化、注意力机制和高阶建模四个阶段。YOLOv13的核心技术创新&#xff1a;详细解析HyperACE机制、FullPAD…

快速将前端得依赖打为tar包(yarn.lock版本)并且推送至nexus私有依赖仓库(笔记)

第一步创建js文件 文件名为downloadNpmPackage.jsprocess.env.NODE_TLS_REJECT_UNAUTHORIZED "0";const fs require("fs"); const path require("path"); const request require("request");// 设置依赖目录 const downUrl "…

Unity VS Unreal Engine ,“电影像游戏的时代” 新手如何抉择引擎?(结)

Unity VS Unreal Engine &#xff0c;“电影像游戏的时代” 新手如何抉择引擎&#xff1f;(1)-CSDN博客 这是我的上一篇文章&#xff0c;如果你仍然困惑选择引擎的事情&#xff0c;我们不妨从别的方面看看 注意&#xff1a;我们可能使用"UE5"来表示Unreal Engine系…

EVAL长度限制突破方法

EVAL长度限制突破方法 <?php $param $_REQUEST[param]; If (strlen($param) < 17 && stripos($param, eval) false && stripos($param, assert) false) //长度小于17&#xff0c;没有eval和assert关键字 {eval($param); } //stripos — 查找字符串…

Linux部署.net Core 环境

我的环境 直接下载安装就可以了 wget https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.315/dotnet-sdk-8.0.315-linux-x64.tar.gzmkdir -p $HOME/dotnet && tar zxf dotnet-sdk-8.0.315-linux-x64.tar.gz -C $HOME/dotnet export DOTNET_ROOT$HOME/dotnet expor…

ARM-定时器-PWM通道输出

学习内容需求点亮4个灯&#xff0c;采用pwm的方式。定时器通道引脚AFLED序号T3CH0PD12AF2LED5CH1PD13AF2LED6CH2PD14AF2LED7CH3PD15AF2LED8实现LED5, LED6, LED7, LED8呼吸灯效果通用定时器多通道点亮T3定时器下的多个通道的灯。开发流程添加Timer依赖初始化PWM相关GPIO初始化P…

javaSE(List集合ArrayList实现类与LinkedList实现类)day15

目录 List集合&#xff1a; 1、ArrayList类&#xff1a; &#xff08;1&#xff09;数据结构&#xff1a; &#xff08;2&#xff09;扩容机制 &#xff08;3&#xff09;ArrayList的初始化&#xff1a; &#xff08;4&#xff09;ArrayList的添加元素方法 &#xff08;5…