使用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 | mkdir es_bak |
2.2 注册备份还原目录
修改elasticsearch.yml,添加如下配置path.repo: ['/opt/elasticsearch/es_bak']
即指定备份还原目录路径,然后重启elasticsearch
2.3 注册备份还原仓库(仓库名称为my_backup)PUT http://地址:9200/_snapshot/my_backup/
参数:
1 | { |
查看仓库情况: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仓库下备份数据,备份的名称为:yqPUT http://地址:9200/_snapshot/my_backup/yq
指定备份的索引逗号分隔,不传默认备份所有索引
1 | { |
?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 | PUT http://172.16.16.219:9200/_snapshot/my_backup/yq |