一、前言概要

生产环境中运行的组件,只要有数据存储,定时备份、灾难恢复是必修课,MySQL数据库的备份方案已经非常成熟,elasticsearch也同样有成熟的数据备份、恢复方案,我们来了解一下。

本篇介绍Elasticsearch生产集群数据的数据备份、恢复和升级的常规操作。

二、数据备份

我们知道Elasticsearch的索引拆分成多个shard进行存储在磁盘里,shard虽然分了primary shard和replica shard,可以保证集群的数据不丢失,数据访问不间断,但如果机房停电导致集群节点全部宕机这种重大事故时,我们就需要提前定期地对数据进行备份,以防万一。

既然是磁盘文件存储,那存储介质的选择就有很多了:本地磁盘,NAS,文件存储服务器(如FastDFS、HDFS等),各种云存储(Amazon S3, 阿里云OSS)等

同样的,Elasticsearch也提供snapshot api命令来完成数据备份操作,可以把集群当前的状态和数据全部存储到一个其他目录上,本地路径或网络路径均可,并且支持增量备份。可以根据数据量来决定备份的执行频率,增量备份的速度还是很快的。

1.创建备份仓库

我们把仓库地址暂定为本地磁盘的/home/esuser/esbackup目录

首先,我们需要在elasticsearch.yml配置文件中加上

path.repo: /home/esuser/esbackup

并重启Elasticsearch。

启动成功后,发送创建仓库的请求:

####################################

$ curl -XPUT'http://elasticsearch02:9200/_snapshot/esbackup?pretty'  \

-H  'Content-Type: application/json'  \

-d  '{

    "type": "fs",

"settings": {

       "location": "/home/esuser/esbackup",

"max_snapshot_bytes_per_sec" : "50mb",

"max_restore_bytes_per_sec" : "50mb"

}

}'

{"acknowledged":true}

#####################################

参数说明:

type: 仓库的类型名称,请求里都是fs,表示file system。

location: 仓库的地址,要与elasticsearch.yml配置文件相同,否则会报错

max_snapshot_bytes_per_sec: 指定数据从Elasticsearch到仓库(数据备份)的写入速度上限,默认是20mb/s

max_restore_bytes_per_sec: 指定数据从仓库到Elasticsearch(数据恢复)的写入速度上限,默认也是20mb/s

用于限流的两个参数,需要根据实际的网络进行设置,如果备份目录在同一局域网内,可以设置得大一些,便于加快备份和恢复的速度。

2.查看仓库的信息

$  curl -X GET    'http://elasticsearch02:9200/_snapshot/esbackup?pretty'

3.索引备份

仓库创建好并验证完成后,可以执行snapshot api对索引进行备份了.

如果不指定索引名称,表示备份当前所有open状态的索引都备份,还有一个参数wait_for_completion,表示是否需要等待备份完成后才响应结果,默认是false,请求提交后会立即返回,然后备份操作在后台异步执行,如果设置为true,请求就变成同步方式,后台备份完成后,才会有响应。建议使用默认值即可,有时备份的整个过程会持续1-2小时。

示例1:备份所有的索引,备份名称为snapshot_20200122

$ curl -X  PUT  'http://elasticsearch02:9200/_snapshot/esbackup/snapshot_20200122?pretty'

{"accepted":true}

例2:备份索引music的数据,备份名称为snapshot_20200122_02,并指定wait_for_completion为true

#####################################

$ curl -X  PUT   'http://elasticsearch02:9200/_snapshot/esbackup/snapshot_20200122_02?wait_for_completion=true&pretty'  \

-H  'Content-Type: application/json'  \

-d  '{

  "indices": "music",

"ignore_unavailable": true,

"include_global_state": false,

"partial": true

}'

########################################

参数说明:

indices:索引名称,允许写多个,用","分隔,支持通配符。

ignore_unavailable:可选值true/false,如果为true,indices里不存在的index就可以忽略掉,备份操作正常执行,默认是false,如果某个index不存在,备份操作会提示失败。

include_global_state:可选值true/false,含义是要不要备份集群的全局state数据。

partial:可选值true/false,是否支持备份部分shard的数据。默认值为false,如果索引的部分primary shard不可用,partial为false时备份过程会提示失败。

使用snapshot api对数据的备份是增量进行的,执行snapshotting的时候,Elasticsearch会分析已经存在于仓库中的snapshot对应的index file,在前一次snapshot基础上,仅备份创建的或者发生过修改的index files。这就允许多个snapshot在仓库中可以用一种紧凑的模式来存储,非常节省存储空间,并且snapshotting过程是不会阻塞所有的Elasticsearch读写操作的。

同样的,snapshot作为数据快照,在它之后写入index中的数据,是不会反应到这次snapshot中的,snapshot数据的内容包含index的副本,也可以选择是否保存全局的cluster元数据,元数据里面包含了全局的cluster设置和template。

每次只能执行一次snapshot操作,如果某个shard正在被snapshot备份,那么这个shard此时就不能被移动到其他node上去,这会影响shard rebalance的操作。只有在snapshot结束之后,这个shard才能够被移动到其他的node上去。

4. 查看snapshot备份列表

查看仓库内所有的备份列表:

$  curl -X  GET  'http://elasticsearch02:9200/_snapshot/esbackup/_all?pretty'

查看单个备份数据:

$ curl -X GET   'http://elasticsearch02:9200/_snapshot/esbackup/snapshot_20200122_02?pretty'

5.删除snapshot备份

如果需要删除某个snapshot备份快照,一定要使用delete命令,别做出跑到服务器目录下做rm操作,因为snapshot是增量备份的,里面有各种依赖关系,极可能损坏backup数据。

记住不要上来就自己干文件,请使用人家标准的命令来执行:

$  curl -X DELETE  'http://elasticsearch02:9200/_snapshot/esbackup/snapshot_20200122?pretty'

{"acknowledged":true}

6. 查看备份进度

备份过程长短视数据量而定,wait_for_completion设置为true虽然可以同步得到结果,但时间太长的话也不现实,我们是希望备份操作后台自己搞,我们时不时的看看进度就行。

其实还是调用的snapshot的get操作命令,加上_status参数即可,备份过程中会显示什么时间开始的,有几个shard在备份等等信息:

$ curl -X GET  'http://elasticsearch02:9200/_snapshot/esbackup/snapshot_20200122_02/_status?pretty'

7. 取消备份

正在备份的数据可以执行取消,使用的是delete命令:

$ curl -X DELETE  'http://elasticsearch02:9200/_snapshot/esbackup/snapshot_20200122?pretty'

这个命令有两个作用:

如果备份正在进行中,那么取消备份操作,并且删除备份了一半的数据。

如果备份已经完成,直接删除备份数据。

三、数据恢复

生产环境的备份操作,是定期执行的,执行的频率看实际的数据量,有1天执行1次的,有4小时一次的,简单的操作是使用shell脚本封装备份的命令,然后使用Linux的crontab定时执行。

既然数据有备份,那如果数据出现异常,或者需要使用到备份数据时,恢复操作就能派上用场了。

1.常规恢复

数据恢复使用restore命令,示例如下:

$ curl -X  POST  'http://elasticsearch02:9200/_snapshot/esbackup/snapshot_20200122_02/_restore?pretty'

{"accepted":true}

注意被恢复的索引,必须全部是close状态的,否则会报错,关闭索引的命令:

$ curl -X  POST  'http://elasticsearch02:9200/music/_close?pretty'

恢复完成后,索引自动还原成open状态。

同样有些参数可以进行选择:

######################################################

$ curl -X  POST  'http://elasticsearch02:9200/_snapshot/esbackup/snapshot_20200122_02/_restore \

-H  'Content-Type: application/json'  \

-d  '{

"indices": "music",

"ignore_unavailable": true,

"include_global_state": true

}'

########################################################

默认会把备份数据里的索引全部还原,我们可以使用indices参数指定需要恢复的索引名称。

同样可以使用wait_for_completion参数,ignore_unavailable、partial和include_global_state与备份时效果相同,不赘述。

2.监控restore的进度

调用的recovery的get操作命令查看恢复的进度:

$ curl -X GET   'http://elasticsearch02:9200/music/_recovery?pretty'

3.取消restore

与备份类似,delete正在恢复的索引可以取消恢复过程:

$ curl -X DELETE   'http://elasticsearch02:9200/music/_recovery?pretty'

四、集群升级

我们现在使用的版本是6.3.1,目前官网最新版本已经是7.5.2了,如果没有重大的变更或严重bug报告的情况下,一般是不需要做升级,毕竟升级有风险,发布要谨慎。

这里就简单说一下通用的步骤,谨慎操作:

1. 查看官网最新版本的文档,从当前版本到目标版本的升级,有哪些变化,新加入的功能和修复的bug。

2. 在开发环境或测试环境先执行升级,相应的插件也做一次匹配升级,稳定运行几个项目版本周期后,再考虑生产环境的升级事宜。

3. 升级前对数据进行全量的备份,万一升级失败,还有挽救的余地。

4.申请生产环境升级的时间窗口,逐个node进行升级验证。

集群版本升级这类操作,实践起来比较复杂,受项目本身影响比较大,这里就简单提及要注意的地方,没有作详细的案例操作,真要有版本升级的操作,请各位慎重操作,多验证,确保测试环境充分测试后再上生产,记得数据要备份。

六、参考

elasticsearch生产数据备份恢复方案

https://segmentfault.com/a/1190000022910433

Elasticsearch Snapshot and Restore

https://zhuanlan.zhihu.com/p/43416538

elasticsearch数据备份说明

https://zhuanlan.zhihu.com/p/43416538

elasticsearch备份和还原脚本

https://www.cnblogs.com/personsiglewine/p/12510845.html

How To Setup Your Elasticsearch Cluster and Backup Data

https://www.twilio.com/blog/setup-elasticsearch-cluster-backup

【es】elasticsearch生产数据备份和恢复方案相关推荐

  1. MySQL数据库备份和恢复方案小结

    这两天在调研MySQL数据库的备份和恢复方案,备份对象是对大量Innodb表,或者加上少量的MyISAM表. InnoDB备份常见问题: 文件一致性:数据文件.缓存.日志文件必须保持严格一致.加锁的方 ...

  2. ElasticSearch 快照 备份、恢复数据

    文章目录 ElasticSearch 设置备份文件地址 注册快照存储库 查看快照存储库保存结果 创建快照 异步创建 指定索引进行快照 查看全部快照 在服务器查看备份的数据 恢复数据 本机恢复 其他服务 ...

  3. MySQL 云数据库物理备份本地恢复方案

    在国内不论是使用阿里云.腾讯云还是华为云的云平台版本的 MySQL 数据库,在遇到数据备份恢复的场景,都会遇到需要使用 Percona XtraBackup 工具进行备份还原的需求. 看着网上一堆既啰 ...

  4. MySQL备份,恢复方案,mysqlbinlog,mysqldump,主从,主主复制

    DBMS数据库管理系统的三层模型:物理层,逻辑层以及视图层. 物理层:决定数据的存储形式. 逻辑层:是一张有一张的表,一行行的数据记录. 视图层:让用户看起来更方便,可有可无. 存储引擎:使逻辑层中s ...

  5. elasticsearch的备份和恢复(转)

    vim /etc/elasticsearch/elasticsearch.yml path.repo: ["/data/backups/es_backup"] #备份目录,根据自己 ...

  6. redis aof 备份和恢复_Redis 持久化机制的介绍,了解这些流程很重要

    我们已经知道对于一个企业级的redis架构来说,持久化是不可减少的. 企业级redis集群架构:海量数据.高并发.高可用 持久化主要是做灾难恢复,数据恢复,也可以归类到高可用的一个环节里面去,比如你r ...

  7. redis aof 备份和恢复_深入理解Redis持久化

    redis持久化的意义 持久化机制的介绍 RDB和AOF的基本介绍 RDB持久化机制的优点 RDB持久化机制的缺点 AOF持久化机制的优点 AOF持久化机制的缺点 RDB和AOF到底该如何选择 RDB ...

  8. Veritas Backup Exec™ 22.1 (Windows) 下载 - 面向中小型企业的数据备份和恢复

    请访问原文链接:https://sysin.org/blog/veritas-backup-exec-22/,查看最新版.原创作品,转载请保留出处. 作者主页:www.sysin.org Backup ...

  9. 计算机硬盘备份和恢复解决方案

    问题背景: 项目需要提供一份系统使用的计算机硬盘备份和恢复方案,方便计算机软硬件故障后快速的恢复系统.之前项目使用的工具是Macrium reflect工具,但这个工具现在收费了,而且功能比较多,很多 ...

最新文章

  1. MySql优化的方法
  2. 【转】几点 iOS 开发技巧
  3. 华东交通大学计算机调剂,华东交通大学2018考研调剂信息
  4. K-means算法在手写体数字图像数据上的使用示例-代码详解
  5. 一本通1596动物园
  6. 洛谷 P2056 采花
  7. 各种ListView列表方法
  8. 自定义 matplotlib 设置
  9. centos 安装mysql5.7
  10. 在苹果Mac上如何指定发送邮件的时间?
  11. yaf写入把数据库信息写入redis,再取出来传到页面上显示 2016-10-22
  12. 查看别人IP经典办法
  13. css 平移到某个位置_CSS3 对象平移translate()translatex()translatey()应用实例,包括水平垂直居中...
  14. 微信提醒对方账号异常应该怎么办
  15. 手机怎么设置农历日程提醒?
  16. python3.8零基础入门教程_正版 Python 3.8编程快速入门 针对wan全零基础入门的读者 采用*小化安装+极简代码的教学...
  17. 解决Chrome插件安装时出现的“程序包无效”问题
  18. Android Studio飘红错误
  19. 英伟达或推出没有光线追踪的新款图灵架构GPU,这里有几个猜想
  20. Unity动画☀️六、Humanoid和Generic的区别、导入方式(骨骼映射、Avatar创建)

热门文章

  1. 奇偶校验原理及逻辑图
  2. 杭州辣府餐饮JAVA_超全“滨江美食必打卡list”,不收藏会后悔!年前再去搓几顿啊~...
  3. 【解决方案】logging: 中文log乱码
  4. Dell神州网信版 Win10 忘记登陆密码
  5. DingTalk「开发者说」|钉钉小程序开发实践
  6. Java教程-Java 程序员们值得一看的好书推荐
  7. php 定义宏函数,汇编语言宏函数
  8. Cerebral Cortex:疼痛热刺激引起的脑功能网络分离与整合
  9. Wilcoxon signed rank sum test 检验
  10. 代码片段plus ??? 打工神器: 飞冰物料库