Elasticsearch的快照

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.mzph.cn/bicheng/34531.shtml

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

相关文章

北邮《计算机网络》传输层笔记

内容一览 缩写复习单词复习传输层前言传输协议的要点拥塞控制UDPTCP VS UDPTCP 缩写复习 AIMD XCP ECN WFQ max-min-fair ARQ PAWS TSAP NSAP TCP UDP RTT SCTP SACK NAK RST MSS 单词复习 inverse multiplexing(SCTP) convergence crashed machine protocol scenarios asym…

基于SSM+Vue的宠物领养平台系统(带1w+文档)

基于SSMVue的宠物领养平台系统(带1w文档) 本课题研究和开发同城宠物帮管理系统&#xff0c;让安装在计算机上的该系统变成管理人员的小帮手&#xff0c;提高同城宠物帮信息处理速度&#xff0c;规范同城宠物帮信息处理流程&#xff0c;让管理人员的产出效益更高。 项目简介 基…

Spring(核心概念:IoC/DI思想)

目录 一、引言 &#xff08;1&#xff09;如今的代码书写现状 1、业务层 2、数据层 3、假如当项目上线发布之后&#xff0c;想把数据层的实现换一下 二、核心概念 &#xff08;1&#xff09;IoC&#xff08; Inversion of Control ) 控制反转 &#xff08;2&#xff09;…

HarmonyOS角落里的知识:“开发应用沉浸式效果”

概述 典型应用全屏窗口UI元素包括状态栏、应用界面和底部导航条。开发应用沉浸式效果主要指通过调整状态栏、应用界面和导航条的显示效果来减少状态栏导航条等系统界面的突兀感&#xff0c;从而使用户获得最佳的UI体验。 图1 界面元素示意图 开发应用沉浸式效果主要要考虑如下…

8.XSS盲打

XSS盲打 XSS盲打就是攻击者在前端提交的数据不知道后台是否存在xss漏洞的情况下&#xff0c;提交恶意JS代码在类似留言板等输入框后&#xff0c;所展现的后台位置的情况下&#xff0c;网站采用了攻击者插入的恶意代码&#xff0c;当后台管理员在操作时就会触发插入的恶意代码&…

交通 | 机器学习 + 大规模TSP/VRP求解

封面图来源&#xff1a;https://xkcd.com/399/ 推文作者&#xff1a;丁建辉&#xff0c;陈泰劼&#xff0c;张云天 本文针对旅行商问题&#xff08;Travelling salesman problem, TSP&#xff09;和车辆路径规划问题&#xff08;Vehicle routing problem, VRP&#xff09;这一类…

Excel 宏录制与VBA编程 —— 12、文本字符串类型相关(附示例)

字符串分割&#xff0c;文末示例&#xff08;文末代码3附有源码&#xff09; 代码1 - 基础字符串 代码2 - 字符串拆分 代码3 - 字符串分割 Option ExplicitSub WorkbooksClear()Dim DataRange As RangeSet DataRange Range("C2:E12")DataRange.Clear End SubSub Wo…

基于rouyi框架的多租户改造

基于rouyi框架的多租户改造&#xff0c;重点是实现权限管理和数据隔离。权限管理相当于从原来的“顶级管理员admin-普通用户user”转变为“顶级管理员admin-租户管理员tanantAdmin-普通用户user”。数据隔离主要通过分库、分表、表内设置tenantId字段进行过滤三种方式。 本文主…

[word] word 如何在文档中进行分栏排版? #媒体#其他#媒体

word 如何在文档中进行分栏排版&#xff1f; 目标效果 将唐代诗人李白的组诗作品《清平调词》进行分栏排版&#xff0c;共分三栏&#xff0c;每一首诗作为一栏&#xff0c;参考效果如下图。

计算机图形学入门16:阴影映射

1.前言 前面几篇关于光栅化的文章中介绍了如何计算物体表面的光照&#xff0c;但是着色并不会进行阴影的计算&#xff0c;阴影需要单独进行处理&#xff0c;目前最常用的阴影计算技术之一就是Shadow Mapping技术&#xff0c;也就是俗称的阴影映射技术。 2.阴影映射 Shadow Map…

C++在VS2022开发Windows窗口程序2:API式的Windows窗口程序设计模式

函数API式的Windows GUI程序设计模式是一种基于Windows API函数的方式来设计和开发Windows图形用户界面&#xff08;GUI&#xff09;应用程序的模式。在这种模式下&#xff0c;开发者通过调用Windows API函数来创建窗口、处理消息、绘制图形等&#xff0c;而不依赖于特定的GUI库…

mass storage:RAID Structure , Error Detection and Correction

RAID Structure RAID – redundant array of inexpensive disks multiple disk drives provides reliability via redundancyIncreases the mean time to failureMean time to repair – exposure time when another failure could cause data lossMean time to data loss bas…

【TB作品】stm32单片机,红外遥控器,温控风扇,模拟空调,PWM风扇

空调机 硬件&#xff1a;stm32、oled显示器、ds18b20温度传感器、风扇驱动和风扇、红外接收器、遥控器 软件功能&#xff1a; &#xff08;1&#xff09;显示室内温度 &#xff08;2&#xff09;显示当前模式&#xff1a;常态、除湿、通风 &#xff08;3&#xff09;显示当前风…

Ubuntu Apache2 搭建Gerrit 环境

一、前言 时隔多年&#xff0c;好久没有更新CSDN 博客了&#xff0c;主要原因有如下两点&#xff1a; 1、平时工作繁忙&#xff0c;无暇更新。 2、工作内容涉及信息安全&#xff0c;一些工作经验积累不便更新到互联网上。 最近一直在折腾搭建Gerrit 环境&#xff0c;最开始…

win11安装VMware虚拟机,启动系统后蓝屏,安装虚拟机卡在虚拟网卡界面的解决办法

机缘和遇到的问题 由于最近618换了台新笔记本电脑&#xff0c;然后系统自带的操作系统是windows 11 家庭版本&#xff0c;由于工作需要用到window10的环境&#xff0c;不得不安装一个虚拟机来解决问题&#xff0c;然后就把这次安装VMware虚拟机遇到的坑给大家分享一下&#xf…

研二自学嵌入式开发,就业导向,学习路线该如何规划?

研二才来问这个问题&#xff0c;有点晚&#xff0c;离你开始找工作还有大概8&#xff5e;9个月&#xff0c;你应该用应试思维来应对找工作这个事&#xff0c;尤其当前这个经济形势下。 刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入…

基于Openmv的追小球的云台

介绍 在这篇文章&#xff0c;我会先介绍需要用到且需要注意的函数&#xff0c;之后再给出整体代码 在追小球的云台中&#xff0c;比较重要的部分就是云台&#xff08;实质上就是舵机&#xff09;的控制以及对识别的色块位置进行处理得到相应信息后控制云台进行运动 1、舵机模…

asp.net core反向代理

新建项目 新建空白的asp.net core web项目 安装Yarp.ReverseProxy包版本为2.2.0-preview.1.24266.1 编写代码 namespace YarpStu01;public class Program {public static void Main(string[] args){var builder WebApplication.CreateBuilder(args);builder.Services.AddRev…

JavaWeb——MySQL:DQL

3. DQL:查询 查询是使用最多、最频繁的操作&#xff0c;因为前面的修改以及删除&#xff0c;一般会交给数据库专业的人员&#xff0c;对于非数据库专业人员来说&#xff0c;老板一般会放心的让你对数据库只进行查询操作&#xff1b; 3.2 条件查询&#xff08;where&#xff09…

浏览器自带的IndexDB的简单使用示例--小型学生管理系统

浏览器自带的IndexDB的简单使用示例--小型学生管理系统 文章说明代码效果展示 文章说明 本文主要为了简单学习IndexDB数据库的使用&#xff0c;写了一个简单的增删改查功能 代码 App.vue&#xff08;界面的源码&#xff09; <template><div style"padding: 30px&…