es 备份存储方式支持以下几种方式:
fs 文件挂载
url 网络协议存储 (http,https,ftp)
s3 亚马逊
hdfs
azure 微软
gcs 谷歌
本篇文章采用hdfs方式存储
1.repository(仓库)
es集群中,想要备份数据,必须创建仓库,用来存储快照,一个集群可以创建多个仓库
2.snapshot (快照)
创建仓库后,我们可以创建快照,创建快照时必须指定一个仓库,需要依附某个仓库
某个快照包含多个index(数据库,schemea),默认备份整个集群index;当然可以指定备份的索引
3.restore (恢复)
备份后导入到hdfs,进行快照恢复.
关闭集群安全(否则没有办法获取hdfs的权限)
源集群
1.修改配置文件
修改yml属性,禁用安全管理
security.manager.enabled:false
启动ES集群。
2.安装repository-hdfs插件
将repository-hdfs插件解压缩到/etc/search1/conf/plugins/目录(每个节点都要装)。
重启ES集群。
3.创建hdfs文件目录并修改属主属组
假设仓库放在/testt/es目录。
hdfs --config /etc/hdfs1/conf dfs -mkdir -p /testt/es
hdfs --config /etc/hdfs1/conf dfs -chown -R elasticsearch:elasticsearch /testt/es
4.创建仓库
注:建议每个库建一个快照,防止快照索引信息混乱,造成快照恢复的时候出现快照不存在或者快照恢复成功0个失败0个成功的问题
HDFS Namenode: hdfs://10.1.42.165:8020
仓库路径:/testt/es
HDFS 配置文件: /etc/hdfs1/conf/hdfs-site.xml
curl -XPUT http://10.1.42.165:9200/_snapshot/backup100 -d '
{
"type": "hdfs",
"settings": {
"uri": "hdfs://10.1.42.165:8020",
"path": "/testt/es",
"conf_location": "/etc/hdfs1/conf/hdfs-site.xml"
}
}
'
5.创建对应仓库的快照
要备份的index: test_es
curl -XPUT http://10.1.42.165:9200/_snapshot/backup100/snapshot_1 -d '
{
"indices": "test_es",
"ignore_unavailable": "true",
"include_global_state": "false",
"partial": "false"
}
'
6.用MapReduce将数据传输到目标集群的hdfs上(注:先跨集群传输到tmp
目录下,在移动到目标集群的目标目录下,为了安全)
Hadoop distcp /testt/es hdfs://10.1.42.16:8020/tmp
目标集群
1.移动到目标集群的目标目录下
Hdfs dfs -mv /tmp/es /testt
2.更改属名属组
hdfs --config /etc/hdfs1/conf dfs -chown -R elasticsearch:elasticsearch /testt/es
3.创建目标集群的仓库
curl -XPUT http://10.1.42.7:9200/_snapshot/backup100 -d '
{
"type": "hdfs",
"settings": {
"uri": "hdfs://10.1.42.16:8020",
"path": "/testt/es",
"conf_location": "/etc/hdfs1/conf/hdfs-site.xml"
}
}
'
4.恢复快照
要恢复的index: test_es
恢复成index: restored_index_test_es
curl -XPOST http://10.1.42.7:9200/_snapshot/backup100/snapshot_1/_restore -d '
{
"indices": "test_es",
"ignore_unavailable": "true",
"include_global_state": "false",
"rename_pattern": "test_es",
"rename_replacement": "restored_index_test_es"
}
'
辅助性操作
查看快照状态
curl localhost:9200/_snapshot/backup_test/snapshot_1/_status?pretty
查看恢复状态
curl localhost:9200/index1/_recovery?pretty
删除快照
curl -XDELETE localhost:9200/_snapshot/backup_test/snapshot_1
查看仓库信息
GET /_snapshot/my_backup
当前所有仓库信息
GET /_snapshot
GET /_snapshot/_all
删除仓库信息:仅仅删除index,不会删除hdfs数据
DELETE /_snapshot/my_backup
查询快照
GET /_snapshot/my_backup/snapshot_1 //查询指定快照
GET /_snapshot/my_backup/snapshot_*,otherSnapshot //支持通配符
GET /_snapshot/my_backup/_all //查询所有快照
删除一个快照:仅删除引用,未删除hdfs数据
DELETE /_snapshot/my_backup/snapshot_1
补充:
es1.x备份索引可以直接在es2.x恢复
es2.x备份索引可以直接在es5.x恢复
但是es1.x不可以在es5.x恢复,兼容只垮一个版本
问题:
恢复快照数据,如果目标集群已经存在同名索引,需要先close索引
恢复某个快照所有数据
curl -XPOST localhost:9200/_snapshot/backup_test/snapshot_1/_restore?wait_for_completion=trues
恢复某个快照部分索引数据
curl -XPOST localhost:9200/_snapshot/backup_test/snapshot_1/_restore?wait_for_completion=true -d '
{
"indices": "index1,index2"
}
'