无论从容灾还是容错角度来看,数据的安全性都十分重要,Elasticsearch(以下简称ES)提供了Snapshot和Restore模块,用于对单个索引甚至整个集群进行备份和恢复。
环境
Elasticsearch 2.1.1
基本流程
ES的Snapshot/Restore流程可以概括为以下几个步骤
1)创建用于备份的远程仓库
2)往仓库创建快照
3)检查快照状态
4)恢复已备份快照
具体操作
a. 建立共享仓库
1)选取一个节点作为快照文件的共享目录
2)在ES集群的各个节点创建一个同名目录并挂载到1)中所创建的共享目录(假定:/mnt/backup/es_backup)
3)注册仓库(Repository)
PUT _snapshot/es_backup { "type": "fs", "settings": { "location": "/mnt/backup/es_backup", "compress": true } }
以上注册了一个命为es_backup的仓库,仓库数据挂载到/mnt/backup/es_backup。
type:fs 指定使用共享文件系统,当然你还可以选择AWS、HDFS、Azure等repository backends
location:指定仓库目录,请确保所有Master节点和数据节点都挂载到相同的目录,注意:必须要把此路径注册到所有节点的 elasticsearch.yml 的 path.repo 配置项中。 例如
path.repo: ["/mnt/backup/es_backup"]
compress:是否压缩快照文件,这个压缩只对快照的metadata文件(索引的mapping和settings)生效,对数据文件不生效,默认true
chunk_size:大容量索引可以被分成若干块,此参数指定每块的大小,默认单位是字节,当然你也可以设置为1g、100m、512k等(默认null,不限块数据大小)
max_restore_bytes_per_sec:指定恢复数据时各个节点的最大速度阈(yù)值,默认是40mb/s
max_snapshot_bytes_per_sec:指定快照数据时各个节点的最大速度阈(yù)值,默认是40mb/s
b. 生成快照数据
PUT _snapshot/快照仓库名/快照名?wait_for_completion=true
wait_for_completion 指定该 snapshot 请求的结果是否等整个快照创建完毕再返回
PUT _snapshot/es_backup/snapshot_v1?wait_for_completion=true { "indices": "index1,index2", "ignore_unavailable": "true", "include_global_state": false, "partial": "false" }
indices:指定快照哪些索引
ignore_unavailable:默认false,当索引不存在时snapshot请求失败,当设置为true时忽略不存在的索引
include_global_state:设置为false时,可以防止把集群的全局状态作为快照的一部分被存储下来
partial:默认情况下,如果有一个或多个索引不是全部主分片(shard)都可用,那么snapshot请求失败,可以设为true避免这种情况发生
c. 监控快照状态
GET _snapshot/es_backup/snapshot_v1/_status
d. 恢复
POST _snapshot/仓库名/快照名/_restore?wait_for_completion=true
注意:已存在的索引必须要先关闭才能进行restore操作
POST your_index/_close
下面请求将恢复es_backup仓库的snapshot_v1快照
POST _snapshot/es_backup/snapshot_v1/_restore { "indices": "index1,index2", "ignore_unavailable": "true", "include_global_state": false, "rename_pattern": "index(.+)", "rename_replacement": "restored_index_n$1" }
indices:指定快照文件中要恢复的索引
ignore_unavailable:同上
include_global_state:同上
rename_pattern:结合 rename_replacement 重命名索引名称
rename_replacement:结合 rename_pattern 正则表达式重命名索引名,上面的例子最终的索引名为restored_index_n1,restored_index_n2
其他说明
1)快照的创建是增量进行的,ES会检查仓库下的所有索引文件,最终生成上一次快照之后所新增数据或变更数据的快照文件
2)快照生成的过程是非阻塞的,这意味着这个过程中依然可以对索引进行查询等操作,需要注意的是,即使这个过程是非阻塞的,但最终快照生成的视图会定格在snapshot请求发起的那一瞬间
3)通过以下api可以删除快照文件,ES会把snapshot_v1这个快照所属的文件删除(与其他快照相关的文件会被保留)
DELETE _snapshot/es_backup/snapshot_v1
4)删除一个正在创建的快照会把创建快照的请求直接终止