Elasticsearch快照备份与还原

使用snapshot实现es数据备份、还原与迁移

1.snapshot介绍

   snapshot api是Elasticsearch用于对数据进行备份和恢复的一组api接口,可以通过snapshot api进行跨集群的数据迁移,原理就是从源ES集群创建数据快照,然后在目标ES集群中进行恢复。需要注意ES的版本问题:
   1)目标ES集群的主版本号(如5.6.4中的5为主版本号)要大于等于源ES集群的主版本号;
   2)1.x版本的集群创建的快照不能在5.x版本中恢复;

2.数据备份

2.1 源ES集群中创建备份还原目录:

1
2
3
mkdir es_bak
# 为了避免权限问题,直接修改/opt/es_bak权限为777
chmod 777 /opt/es_bak

2.2 注册备份还原目录
   修改elasticsearch.yml,添加如下配置path.repo: ['/opt/elasticsearch/es_bak']
   即指定备份还原目录路径,然后重启elasticsearch
2.3 注册备份还原仓库(仓库名称为my_backup)
PUT http://地址:9200/_snapshot/my_backup/
参数:

1
2
3
4
5
6
7
8
9
{
"type": "fs",
"settings": {
"location": "/opt/elasticsearch/es_bak",
"max_snapshot_bytes_per_sec" : "50mb",
"max_restore_bytes_per_sec" : "50mb",
"compress" : true
}
}


查看仓库情况:GET http://地址:9200/_snapshot/my_backup/_all

这里执行完之后/opt/elasticsearch/es_bak目录下还什么数据都没有.
一个repository仓库可以包含多份快照文件,repository主要有一下几种类型:

fs: 共享文件系统,将快照文件存放于文件系统中
url: 指定文件系统的URL路径,支持协议:http,https,ftp,file,jar
s3: AWS S3对象存储,快照存放于S3中,以插件形式支持
hdfs: 快照存放于hdfs中,以插件形式支持
cos: 快照存放于腾讯云COS对象存储中,以插件形式支持

2.4 备份数据
在创建的my_backup仓库下备份数据,备份的名称为:yq
PUT http://地址:9200/_snapshot/my_backup/yq
指定备份的索引逗号分隔,不传默认备份所有索引

1
2
3
{
"indices": "index1,index2"
}

?wait_for_completion=true 等待备份完后再返回
参数 wait_for_completion 决定请求是在快照初始化后立即返回(默认),还是等快照创建完成之后再返回。

备份完成后可以看到备份状态,该yq备份已经完成,且能查看所备份的索引值:

备份完数据后就会在/opt/es_bak目录下生成备份的元数据:

3.数据还原

将步骤2中生成的备份元数据(即/opt/elasticsearch/es_bak目录下的所有文件)拷贝到要还原的目标机器的备份还原目录下。注意:在目标机器上2.1、2.2、2.3三个步骤同样需要进行操作,只是仓库的路径不比与源es仓库路径一样,根据个人情况而定。
元数据文件拷贝到目标机器后,在需要还原的机器上执行POST请求:
POST http://地址:9200/_snapshot/my_backup/yq/_restore

然后在目标机器上查看es中是否还原该索引数据

4.数据迁移

单节点情况下,数据迁移与数据还原类似,都是将元数据文件拷贝然后还原即可。

参考链接:
Elasticsearch快照备份与还原
es数据备份和恢复
ElasticSearch集群数据迁移备份方案

实际操作过程中所发出的请求记录:

1
2
3
4
5
6
7
8
PUT http://172.16.16.219:9200/_snapshot/my_backup/yq
GET http://172.16.16.219:9200/_snapshot/my_backup/_all
DELETE http://172.16.16.219:9200/_snapshot/my_backup/yq
PUT http://172.16.16.219:9200/_snapshot/my_backup/yq?wait_for_completion=true
{
"indices": "20200508.leadercase"
}
POST http://192.168.0.156:9200/_snapshot/my_backup/yq/_restore