Elasticsearch的快照

news2024/10/5 12:43:30

ES的快照是什么?

snapshot是一个ES集群或者某个指定索引的备份,快照一般用在

  • 不停机的状态下对ES集群进行备份
  • 当硬件故障时恢复集群数据
  • 用于跨集群的数据迁移
  • 对冷数据或冻结数据做快照以降低存储成本,依赖于可搜索的快照。-收费功能

一个快照包含的内容:

  • 持久的集群配置
  • 索引模板
  • 索引数据
  • 索引生命周期策略
  • 存储的脚本
  • 预处理流水线

ES快照的原理

ES快照的过程就是将指定索引(也可以是整个集群)在磁盘上存储的Lucene文件复制到仓库中。

以一个索引为例,当快照这个索引时,会根据快照时间复制一份这个索引所有segments文件到仓库中,快照未完成前,这些物理文件不可删除,不可移动。如果这个快照是第一次创建,快照时会复制这个索引全部的segments文件;在这之后,再次快照这个索引的内容时,只会复制较上一次快照时新增的segments文件。

除第一次之后的快照都是增量。

快照文件之间在逻辑上独立,当删除一个快照时,只会从库中删除这个所独有的segment文件,而不会删除有其他快照使用的文件。

快照过程中会锁定所有涉及到的segment文件,快照进行中的索引无法迁移分片且segment不可删除。且数据复制只发生在主分片上。

创建快照

创建快照前首行需要注册快照仓库。

查看当前集群的仓库

GET /_cat/repositories

注册快照仓库

快照仓库所支持的类型:

  • fs 文件系统(这里需要共享文件系统)
  • s3 aws s3协议存储
  • gcs 谷歌存储
  • Read-only Url

这里列s3和fs两种仓库的注册案例:

s3对象存储

PUT _snapshot/my_s3_repository
{
  "type": "s3",
  "settings": {
    "client": "my-client",
    "bucket": "my-bucket",
    "endpoint": "my.s3.endpoint"
///待补充其他参数
  }
}

S3 repository | Elasticsearch Guide [8.14] | Elastic

S3案例:

PUT _snapshot/recovery_snapshot
{
    "type" : "s3",
    "settings" : {
      "bucket" : "",
      "base_path" : "",
      "endpoint" : "",
      "protocol" : "http",
      "compress" : "true",
      "access_key": "",   
      "secret_key": "",   
      "max_restore_bytes_per_sec" : "200mb",  
      "max_snapshot_bytes_per_sec" : "100mb" 
    }
  }

fs文件系统

PUT _snapshot/my_backup
{
  "type": "fs",
  "settings": {
    "location": "/mount/backups/backup"  #这个路径需要提前在配置文件中配置好
  }
}
 

read-only url 只读库

使用url文件在集群上注册一个只库的快照仓库:

PUT _snapshot/my_backup_read_only
{
  "type": "url",
  "settings": {
    "url": "file:/mount/backups/my_fs_backup_location" #样例为共享文件系统
  }
}

url 支持的类型

  • file
  • http
  • https
  • jar

使用file类型的url时,file后的路径必须在es的配置文件path.repo配置项中指定。其他几个不需要。

创建一个快照

通过api创建一次性的快照

PUT /_snapshot/my_backup/back_snapshot_1
{
"indices": "index1,index2",  #支持多索引语法,如通配符、列表
"ignore_unavailable": true,  #跳过不存在的索引,默认为false
"include_global_state": false  #不快照集群状态,默认为false
}

通过快照生命周期管理创建快照

如果用快照来定期备份ES集群的数据,使用快照生命周期策略来创建、管理快照。参考附录

#全量快照
PUT _slm/policy/s-01
{
  "schedule": "0 0/15 * * * ?",
  "name": "<my-snap-{now/d}>",
  "repository": "my_backup",
  "config": {
    "indices": "*",
    "include_global_state": true
  },
  "retention": {
    "expire_after": "3d",
    "min_count": 5,
    "max_count": 50
  }
}

使用快照

快照的作用一般用于数据备份、故障恢复、跨集群的数据迁移。

集群内

无论快照用于处理以上哪种情况,快照最终都是在某个集群内部通过restore恢复数据来发挥作用,快照的恢复过程如下:

  • 查看当前的集群有哪些快照文件
GET _snapshot
#明确哪个仓库的情况下指定仓库名

GET _cat/snapshots/my_backup
#或
GET _snapshot/my_backup/*?verbose=false

  • 恢复前从集群内删除要恢复的索引,避免冲突
DELETE index_1
  • 从快照恢复index_1的数据
POST _snapshot/my_backup/my_snapshot_2099.05.06/_restore
{
  "indices": "index_1"  #如果快照中是多个索引,这里可以指定要恢复的列表,逗号分隔
}

如不删除现有数据时,可以在恢复时修改索引名。

POST _snapshot/my_backup/my_snapshot_2099.05.06/_restore
{
  "indices": "index_1",
  "ignore_unavailable": true,
  "include_global_state": false,
  "rename_pattern": "index_(.+)", #匹配要修改索引名的索引
  "rename_replacement": "my_test_$1",  #修改索引名称
  "include_aliases": false
}

  • 查看快照恢复过程

快照恢复过程中,会涉及到分片的复制和分配,恢复过程中,集群状态会出现yellow状态。

#查看集群状态
GET _cluster/health

查看恢复的详情

GET index_1/_recovery

查看分片的状态

GET _cat/shards?v=true&h=index,shard,prirep,state,node,unassigned.reason&s=state

恢复完成后,集群转为green状态。

撤回一个restore

可以通过删除索引的方式,取消正在进行的恢复过程。

DELETE index_1

跨集群(跨版本)

在ES集群迁移或者索引跨集群迁移时,需要把一个集群中的快照在另外一个集群中恢复出来。这里需要注册原集群的仓库到新的集群中,如果原集群还在往这个仓库写数据,在新的集群中需要注册为只读库。

注册完仓库后,其他操作与集群内的快照恢复操作一致。

恢复前需要确保新的集群有充足的存储空间。

POST _snapshot/my_backup_read_only/my_snapshot_2099.05.06/_restore
{
  "indices": "index_1"  #如果快照中是多个索引,这里可以指定要恢复的列表,逗号分隔
}

如果快照中索引是多副本,且不想调整新集群的规格,可以在恢复时调整副本数以节省存储空间。

POST _snapshot/my_backup_read_only/my_snapshot_2099.05.06/_restore
{
  "indices": "index_1",
  "index_settings": {
    "index.number_of_replicas": 1  #减少副本数以节省空间
  }
}

快照跨版本的兼容性

如果新集群与老集群版本不一致,需要保证两个版本的快照兼容性,如下图:

删除快照

对于过期的快照,或者不再使用的快照,可以手动从仓库中删除:

DELETE /_snapshot/my_backup/snapshot_1

因快照时间过长,需要停止正在进行的快照?

快照和数据恢复设计只允许同时一个快照进程,或者恢复进程。如果快照执行过程出错,或长时间未结束而需要中止快照进程,可以执行删除快照的动作。删除操作会首先检查快照是否正在进行中,如果正在执行,会先停止快照,然后再把快照文件从库中删除。

附录:

SLM(快照生命周期管理)

快照生命周期管理 (公有云上公开发售的es版本不支持)

当快照作为一个集群集群的常规备份手段时,再每次写脚本加定时任务的形式去创建快照并且还需要不定期去处理过期的快照文件便显得不是很友好。自7.6版本起,es引入了快照生命周期管理(slm)的功能,类似于ilm(索引生命周期管理)。

slm可以通过简单的配置实现规律的创建快照,并根据预设条件删除符合条件的快照文件。 实现对快照创建、删除等整个生命周期的管理。

slm可以通过kibana界面进行新建:Stack Management > Snapshot and Restore > Policies。

通过api创建

  • 查询集群现有slm策略
GET _slm/policy/{policy-id} #指定策略
GET  _slm/policy
  • 创建一条策略
PUT /_slm/policy/daily-snapshots
{
  "schedule": "0 30 1 * * ?",   # 什么时间创建快照
  "name": "<daily-snap-{now/d}>",   #快照名称
  "repository": "my_repository",  #使用的快照仓库
  "config": { 
    "indices": ["data-*", "important"],  #快照包含哪些索引 
    "ignore_unavailable": false,
    "include_global_state": false
  },
  "retention": { 
    "expire_after": "30d",   #快照保存多长时间
    "min_count": 5,    #最少保留几个版本,不受保存时间限制
    "max_count": 50   #最多保存多少个文件,不受保存时间约束
  }
}

schedule时间设置格式

<seconds> <minutes> <hours> <day_of_month> <month> <day_of_week> [year]

秒 分 小时 天 月 星期几? 哪年

?表示任意一[秒|分|时|天|月|星期几|年]

  • 删除一条策略
DELETE /_slm/policy/daily-snapshots
  • 立即执行策略
POST /_slm/policy/daily-snapshots/_execute
  • 显示策略统计信息
GET /_slm/stats

命令汇总

#查看当前仓库
GET /_cat/repositories

#注册仓库
PUT _snapshot/my_backup
{
  "type": "fs",
  "settings": {
    "location": "/mnt/es/repo"  
  }
}

#注册url只读库
PUT _snapshot/my_backup_read_only
{
  "type": "url",
  "settings": {
    "url": "file:/mount/backups/my_fs_backup_location" 
  }
}

#创建快照
PUT /_snapshot/my_backup/back_snapshot_1
{
"indices": "index1,index2",  
"ignore_unavailable": true, 
"include_global_state": false  
}

#查看快照
GET _snapshot
#明确哪个仓库的情况下指定仓库名
#
GET _cat/snapshots/my_backup
#
GET _snapshot/my_backup/*?verbose=false
#获取所有快照信息

#查看当前正在进行中的快照
GET /_snapshot/my_backup/_current

#删除索引
DELETE index_1

#从快照恢复数据
POST _snapshot/my_backup/my_snapshot_2099.05.06/_restore
{
  "indices": "index_1" 
}

#从快照恢复索引,并修改索引名称
POST _snapshot/my_backup/my_snapshot_2099.05.06/_restore
{
  "indices": "index_1",
  "ignore_unavailable": true,
  "include_global_state": false,
  "rename_pattern": "index_(.+)", #匹配要修改索引名的索引
  "rename_replacement": "my_test_$1",  #修改索引名称
  "include_aliases": false
}

#查看恢复详情
GET index_1/_recovery

#查看恢复中的分片状态
GET _cat/shards?v=true&h=index,shard,prirep,state,node,unassigned.reason&s=state

#撤销进行的restore
DELETE index_1

#删除快照
DELETE /_snapshot/my_backup/snapshot_1

#slm相关
GET  _slm/policy
#
PUT /_slm/policy/daily-snapshots
{
  "schedule": "0 30 1 * * ?",   
  "name": "<daily-snap-{now/d}>",  
  "repository": "my_repository", 
  "config": { 
    "indices": ["data-*", "important"],  
    "ignore_unavailable": false,
    "include_global_state": false
  },
  "retention": { 
    "expire_after": "30d",   
    "min_count": 5,
    "max_count": 50 
  }
}
#
DELETE /_slm/policy/daily-snapshots
#
POST /_slm/policy/daily-snapshots/_execute
#
GET /_slm/stats
#
GET _slm/status
#
POST _slm/start
#
POST _slm/stop
#
POST /_slm/_execute_retention

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

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

相关文章

CRMEB 多门店后台登录入口地址修改(默认admin)

一、>2.4版本 1、修改后端 config/admin.php 配置文件,为自定义的后缀 2、修改 平台后台前端源码中 view/admin/src/settings.js 文件,修改为和上面一样的配置 3、修改后重新打包前端代码,并且覆盖到后端的 public 目录下&#xff1a;打包方法 4、重启swoole 二、<2.4版…

如何评估LabVIEW需求中功能的必要性和可行性

评估LabVIEW需求中功能的必要性和可行性涉及多个方面的分析&#xff0c;包括需求的重要性、技术可行性、资源需求以及潜在风险。以下是一个详细的评估方法&#xff1a; ​ 一、功能必要性评估 需求来源和目的&#xff1a; 来源&#xff1a;需求来自哪里&#xff1f;是客户、市…

HR3.0时代,人力资本效能如何进化?| 易搭云DHR

宏观经济增速放缓、市场竞争激烈&#xff0c;对各行各业、各种岗位都面临更大挑战&#xff0c;如何降本增效还是每个企业主的关注焦点。 企业的主要支出往往是员工成本&#xff0c;总体上超过企业总开支的75%&#xff0c;轻资产类型的企业甚至可能超80%&#xff0c;但裁员、加班…

监督学习(二)线性分类

每个样本都有标签的机器学习称为监督学习。根据标签数值类型的不同&#xff0c;监督学习又可以分为回归问题和分类问题。分类和回归是监督学习的核心问题。 回归(regression)问题中的标签是连续值。分类(classification)问题中的标签是离散值。分类问题根据其类别数量又可分为…

紧贴国家大战略需求,聚焦当前行业热点-海云安D10入选第四届香蜜湖金融科技创新奖拟奖项目

近日&#xff0c;第四届香蜜湖金融科技创新奖终审总结会在深圳市福田区湾区国际金融科技城成功举办&#xff0c;活动现场&#xff0c;专家评审委员会最终揭晓25个拟奖项目。海云安“开发者安全助手系统”项目&#xff0c;实力入选第四届香蜜湖金融科技创新奖-优秀项目奖。 1、香…

电源集成:智能真无线耳机设计中的通信接口

真无线耳机&#xff08;TWS 耳机&#xff09;由于电池寿命更长、功能更强大、设计更吸引人以及价格更优惠&#xff0c;因此继续变得更具吸引力。随着耳机制造商专注于小型化和设计改进&#xff0c;并迅速采用功能来增强用户体验&#xff0c;他们能够在强大且竞争激烈的市场中吸…

Swift Combine — Debounce和Throttle的理解与使用

Debounce 和 Throttle 是两种常用的操作符&#xff0c;用于控制数据流的频率和处理延迟。但它们的实现方式略有不同。理解这些差异对于在Combine代码中做出正确选择至关重要。 Debounce Debounce 操作符用于限制数据流的频率&#xff0c;只有在指定的时间间隔内没有新数据到达…

项目管理的六个核心内容

项目管理是一个系统性和综合性的过程&#xff0c;涉及多个核心内容的协同管理&#xff0c;以确保项目能够按时、按预算、高质量的完成&#xff0c;以下是项目管理的六个核心内容&#xff1a; 一、项目目标与范围 项目目标与范围是项目管理的起点和基础&#xff0c;在项目启动…

【linux网络(六)】IP协议详解

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux网络 1. 前言2. IP协议报…

AI大模型企业应用实战(23)-Langchain中的Agents如何实现?

0 前言 这将所有可用的代理按照几个维度进行分类。 预期模型类型 用于聊天模型&#xff08;接收信息&#xff0c;输出信息&#xff09;或 LLM&#xff08;接收字符串&#xff0c;输出字符串&#xff09;。这主要影响所使用的提示策略。 支持聊天历史记录 这些代理类型是否…

Cesium--旋转3dtiles

以下代码来自Cesium 论坛&#xff1a;3DTileset rotation - CesiumJS - Cesium Community 在1.118中测试可行&#xff0c;可直接在Sandcastle中运行&#xff1a; const viewer new Cesium.Viewer("cesiumContainer", {terrain: Cesium.Terrain.fromWorldTerrain()…

零基础小白应该如何安装Python?(包含Windows、MacOS、Linux)

1. 安装前的准备工作 在安装Python之前&#xff0c;我们需要了解以下几个问题&#xff1a; 确保计算机连接到互联网确认操作系统版本&#xff08;Windows、MacOS、Linux&#xff09;决定安装Python的版本&#xff08;建议安装最新的稳定版本&#xff09; 2. 在Windows上安装…

docker技术的说明

根据学习网站整理&#xff1a;Docker 10分钟快速入门_哔哩哔哩_bilibili 小白也能看懂的容器科普说明_哔哩哔哩_bilibili 1.虚拟机&#xff0c;需要模拟硬件系统、运行整个操作系统&#xff0c;但体积臃肿&#xff0c;内存占用较高&#xff0c;程序的性能也会受到影响。 2.…

无中心化崛起:Web3对传统互联网的冲击与重构

随着Web3技术的兴起&#xff0c;传统互联网面临着前所未有的挑战和重构。本文将深入探讨Web3的无中心化特性如何对传统互联网产生冲击&#xff0c;以及其可能带来的重大影响和未来发展趋势。 1. 传统互联网的局限与问题 传统互联网&#xff0c;通常称为Web2&#xff0c;主要依…

Go 如何使用指针灵活操作内存

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Vue3整合Tailwindcss实现渲染动态类

创建项目 pnpm create vite整合Tailwindcss 安装依赖&#xff1a; pnpm install -D tailwindcss postcss autoprefixer生成配置文件&#xff1a; npx tailwindcss initpostcss.config.js export default {plugins: {tailwindcss: {},autoprefixer: {},}}tailwind.config.j…

【产品经理】订单处理10-分配快递策略

本次主要讲解下在订单处理过程中分配快递的策略以及分配快递中需要用到的设置。 一、建立快递档案 在ERP系统中&#xff0c;需要建立快递档案&#xff0c;设置所属快递、快递的服务类型、支持的打印模版以及快递在各个平台的电子面单支持情况。 二、仓库绑定快递 仓库需要设…

golang 实现继承方式

经常使用java或c同学应该比较了解纯面向对象&#xff0c;继承、接口、封装等特性&#xff0c;在go中并没有特别显示的表达出来&#xff0c;但是go隐含是支持的&#xff0c;只是支持的方式不一致&#xff0c;可以说go的方式更加灵活&#xff0c;go语言精髓是组合机制&#xff0c…

一口气安装【Python】教程

浏览器搜索python&#xff0c;或者直接跳转网址。 https://www.python.orghttps://www.python.org/ 找到想下载的版本 根据自己电脑下载相应的版本 自定义安装 下一步 修改路径&#xff0c;然后点击安装 等待一会&#xff0c;喝个饮料 点击关闭 安装成功 安装结束

CEWEY C9自动猫砂盆测评:千元级安全实用稳定输出,解放铲屎官双手!

最近邻居姐姐成为新晋铲屎官&#xff0c;猫咪的吃喝还好&#xff0c;因为是打工人每天要早出晚归&#xff0c;铲屎这项不能等待的任务就让她很苦恼&#xff0c;猫砂盆太脏猫咪要么憋着不上要么乱拉乱尿&#xff0c;搞得小姐姐身心俱疲。看着她日渐憔悴的脸色&#xff0c;我这个…