在ElasticSearch里面备份策略已经比较成熟了java
目前在ES5.x中备份支持的存储方式有以下几种:网络
fs //本地挂载的盘 url //网络协议存储支持http,https,ftp repository-s3 //亚马逊 repository-hdfs //HDFS repository-azure //微软 repository-gcs //google
在这里咱们主要介绍如何备份索引数据到HDFS上。elasticsearch
首先,咱们先从名词概念上理解下备份相关术语:google
(1)Repositories (仓库)url
在一个es集群内,想要备份数据,首先要建立一个仓库,用来存储快照,一个集群能够建立多个仓库。es5
(2)Snapshot (快照)插件
有了仓库以后,咱们就能够建立快照了,建立快照时,必需要选择一个指定的仓库才能建立。每一个快照里面能够包含多个索引,默认的话是备份整个集群的索引。固然咱们也能够指定备份咱们认为重要的索引的数据。rest
(3)Restore (恢复)code
备份完成以后数据也就是快照的还原称为恢复索引
ok,理解了上面三个概念以后,下面咱们看下具体怎么操做,本次主要介绍 主要涉及两个ES版本:
ElasticSearch2.3.4
ElasticSearch5.6.4
(一)在ElasticSearch2.x中如何备份索引数据
(1)在每台节点上安装repository-hdfs插件
bin/plugin install elasticsearch/elasticsearch-repository-hdfs/2.2.0
(2)修改每台节点上的config/elasticsearch.yml文件,添加下面的属性
security.manager.enabled: false
(3)重启整个集群
(4)构建一个仓库
PUT /_snapshot/my_backup { "type": "hdfs", "settings": { "path": "/back/es/", "load_defaults": "true", "compress": "true", "uri": "hdfs://192.168.10.160:8020" } }
查看仓库信息:
//查看指定的仓库 GET /_snapshot/my_backup //下面当前全部的仓库信息s GET /_snapshot GET /_snapshot/_all
删除一个仓库:
DELETE /_snapshot/my_backup
注意删除以后,只是ES里面的引用删除,HDFS上备份的文件是不会删除的
(5)构建一个快照
PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true { "indices": "index_1,index_2",//注意不设置这个属性,默认是备份全部 "ignore_unavailable": true, "include_global_state": false }
查询快照的几个方式:
GET /_snapshot/my_backup/snapshot_1 //查询指定快照 GET /_snapshot/my_backup/snapshot_*,some_other_snapshot //支持通配符查询 GET /_snapshot/my_backup/_all //查询全部的快照
删除一个快照:
DELETE /_snapshot/my_backup/snapshot_1
注意删除以后,只是ES里面的引用删除,HDFS上备份的文件是不会删除的
(6)恢复快照
POST /_snapshot/my_backup/snapshot_1/_restore { "indices": "index_1,index_2", //指定索引恢复,不指定就是全部 "ignore_unavailable": true,//忽略恢复时异常索引 "include_global_state": false,//是否存储全局转态信息,fasle表明有一个或几个失败,不会致使整个任务失败 "rename_pattern": "index_(.+)",//是否须要重命名索引 "rename_replacement": "restored_index_$1"//替换后的索引名 }
(二)在ElasticSearch5.x中如何备份索引数据
ElasticSearch5.x的备份方法和ElasticSearch2.x大同小异,这里仅介绍他们不一样的地方。
首先es5要求必须是JDK8的版本,若是你的系统有多个jdk的版本,并且你不想改变现有的jdk版本,那么你就要,单独在下面的两个脚本中声明JDK:
vi bin/elasticsearch vi bin/elasticsearch-plugin
里面分别添加下面的jdk指定版本:
export JAVA_HOME=/usr/java/jdk1.8.0_91 export PATH=$JAVA_HOME/bin:$PATH
而后在每台节点上安装备份的插件:
bin/elasticsearch-plugin install repository-hdfs
完事以后,直接重启集群便可,注意ElasticSearch5.x不须要再修改elasticsearch.yml文件。
用法和Elasticsearch2.x是同样的,这里再也不重述。
最后再补充一下:
es1.x的备份的索引是能够直接在es2.x中恢复的
es2.x的备份的索引是能够直接在es5.x中恢复的
可是,es1.x的的索引数据是不能直接在es5.x中使用的。
兼容的索引只能跨一个主要版本
总结:
本文主要介绍了在Elasticsearch2.x和5.x的版本中,如何给索引数据备份及恢复,并叙述了2.x和5.x版本他们的不一样之处,数据备份是生产环境很是重要的一个环节,有了备份咱们才能够更加从容的面对一些突发的线上故障。