ES提供快照和恢复功能,我们可以在远程文件系统仓库(比如共享文件系统、S3、HDFS等)中单独给部分索引或者整个集群创建快照。这些快照对备份非常有用,它们能相对较快地被恢复。但是,快照只能被恢复到可以读取他们的ES版本中,注意版本对应。
本文采用 snapshot 本地存储方式实现es的备份还原。
注册repository
首先我们在我们的电脑上创建一个如下的目录:/shared_folder/my_repo
因为在创建snapshot时,elasticsearch是用elasticsearch用户来执行的,所以需要个这些文件夹分别授权,赋予权限:chmod -R 1777 /shared_folder/my_repo
将以下path.repo属性添加到我们运行的所有node的elasticsearch.yml文件中:
path.repo: /shared_folder/my_repo
然后启动我们的Elasticsearch及Kibana
{
"type":"fs",
"settings":{
"location":"/shared_folder/my_repo"
}
}
查看已注册快照仓库:
GET _snapshot
备份ES
我们打入如下的命令来对我们的user索引进行snapshot:
PUT _snapshot/my_local_repo/snapshot_1
{
"indices":"user",//无该行代表全部索引备份
"ignore_unavailable":true,
"include_global_state":true
}
我们可以通过如下的命令来查看snapshot:
GET _snapshot/my_local_repo/_all
这个时候,如果我们去到我们的snapshot文件目录,我们可以看到快照文件。
还原ES
我们接下来可以通过如下的命令来删除user索引:
DELETE user
这样我们彻底地删除了这个索引。那么我们该如何把之前备份的数据恢复回来呢?
在Kibana中打入如下的命令:
POST _snapshot/my_local_repo/snapshot_1/_restore
{
"indices":"user",//无该行则代表全部还原
"ignore_unavailable":true,
"include_global_state":false
}
在执行完上面的命令后,我们可以通过如下的命令来查看恢复后的user索引:
GET user/_count
备份脚本
#!/bin/bash
data1=`date "+%Y%m%d"`
data2="http://0.0.0.0:9200/_snapshot/my_local_repo/snapshot_${data1}"
LOG_FILE="/tmp/es_backup.log"
echo '-----------'
echo $data1
echo $data2
echo '----------'
echo "=====${data1}=====开始快照es" >> ${LOG_FILE}
aaa=`curl -XPUT $data2`
echo "$aaa" >> ${LOG_FILE}
echo "=====${data1}=====结束快照es" >> ${LOG_FILE}
deldata1=`date -d "7 day ago" +"%Y%m%d"` //保留7天
deldata2="http://0.0.0.0:9200/_snapshot/my_local_repo/snapshot_${deldata1}"
curl -XDELETE $deldata2
echo "------------"
echo $deldata1
echo $deldata2
echo "-------"
。