注册前要注意配置文件加上html
path.repo: ["/data/es_backup"]git
而后重启esgithub
否则会报错doesn't match any of the locations specified by path.repo because this setting is empty"json
注册一个仓库,存放快照,记住,这里不是生成快照,只是注册一个仓库网络
curl -XPUT 'http://*.*.*.*:9200/_snapshot/my_backup' -H 'Content-Type: application/json' -d '{
"type": "fs",
"settings": {
"location": "/data/es_backup",
"compress": true
}
}'app
查看仓库信息:curl
curl -XGET 'http://*.*.*.*:9200/_snapshot/my_backup?pretty'elasticsearch
恢复快照:分布式
建立所有快照,也能够根据索引建立快照ide
curl -XPUT '*.*.*.*:9200/_snapshot/my_backup/snapshot_20171020?wait_for_completion=true&pretty'
删除快照
使用不管哪一个存储数据的软件,按期备份你的数据都是很重要的。 Elasticsearch 副本提供了高可靠性;它们让你能够容忍零星的节点丢失而不会中断服务。
可是,副本并不提供对灾难性故障的保护。对这种状况,你须要的是对集群真正的备份——在某些东西确实出问题的时候有一个完整的拷贝。
要备份你的集群,你可使用 snapshot
API。这个会拿到你集群里当前的状态和数据而后保存到一个共享仓库里。这个备份过程是"智能"的。你的第一个快照会是一个数据的完整拷贝,可是全部后续的快照会保留的是已存快照和新数据之间的差别。随着你不时的对数据进行快照,备份也在增量的添加和删除。这意味着后续备份会至关快速,由于它们只传输很小的数据量。
要使用这个功能,你必须首先建立一个保存数据的仓库。有多个仓库类型能够供你选择:
注意:共享文件系统路径必须确保集群全部节点均可以访问到。
这步会在挂载点建立仓库和所需的元数据。还有一些其余的配置你可能想要配置的,这些取决于你的节点、网络的性能情况和仓库位置:
max_snapshot_bytes_per_sec
20mb
。
max_restore_bytes_per_sec
假设咱们有一个很是快的网络,并且对额外的流量也很 OK,那咱们能够增长这些默认值:
一个仓库能够包含多个快照。 每一个快照跟一系列索引相关(好比全部索引,一部分索引,或者单个索引)。当建立快照的时候,你指定你感兴趣的索引而后给快照取一个惟一的名字。
让咱们从最基础的快照命令开始:
PUT _snapshot/my_backup/snapshot_1
这个会备份全部打开的索引到 my_backup
仓库下一个命名为 snapshot_1
的快照里。这个调用会马上返回,而后快照会在后台运行。
一般你会但愿你的快照做为后台进程运行,不过有时候你会但愿在你的脚本中一直等待到完成。这能够经过添加一个 wait_for_completion
标记实现:
PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true
这个会阻塞调用直到快照完成。注意大型快照会花很长时间才返回。
默认行为是备份全部打开的索引。 不过若是你在用 Marvel,你不是真的想要把全部诊断相关的 .marvel
索引也备份起来。可能你就压根没那么大空间备份全部数据。
这种状况下,你能够在快照你的集群的时候指定备份哪些索引:
PUT _snapshot/my_backup/snapshot_2 { "indices": "index_1,index_2" }
这个快照命令如今只会备份 index1
和 index2
了。
一旦你开始在你的仓库里积攒起快照了,你可能就慢慢忘记里面各自的细节了 ——特别是快照按照时间划分命名的时候(好比, backup_2014_10_28
)。
要得到单个快照的信息,直接对仓库和快照名发起一个 GET
请求:
GET _snapshot/my_backup/snapshot_2
这个会返回一个小响应,包括快照相关的各类信息:
{ "snapshots": [ { "snapshot": "snapshot_1", "indices": [ ".marvel_2014_28_10", "index1", "index2" ], "state": "SUCCESS", "start_time": "2014-09-02T13:01:43.115Z", "start_time_in_millis": 1409662903115, "end_time": "2014-09-02T13:01:43.439Z", "end_time_in_millis": 1409662903439, "duration_in_millis": 324, "failures": [], "shards": { "total": 10, "failed": 0, "successful": 10 } } ] }
要获取一个仓库中全部快照的完整列表,使用 _all
占位符替换掉具体的快照名称:
GET _snapshot/my_backup/_all
最后,咱们须要一个命令来删除全部再也不有用的旧快照 。这只要对仓库/快照名称发一个简单的 DELETE
HTTP 调用:
DELETE _snapshot/my_backup/snapshot_2
用 API 删除快照很重要,而不能用其余机制(好比手动删除,或者用 S3 上的自动清除工具)。由于快照是增量的,有可能不少快照依赖于过去的段。delete
API 知道哪些数据还在被更多近期快照使用,而后会只删除再也不被使用的段。
可是,若是你作了一次人工文件删除,你将会面临备份严重损坏的风险,由于你在删除的是可能还在使用中的数据。
wait_for_completion
标记提供了一个监控的基础形式,但哪怕只是对一个中等规模的集群作快照恢复的时候,它都真的不够用。
另外两个 API 会给你有关快照状态更详细的信息。首先你能够给快照 ID 执行一个 `GET`,就像咱们以前获取一个特定快照的信息时作的那样:
GET _snapshot/my_backup/snapshot_3
若是你调用这个命令的时候快照还在进行中,你会看到它何时开始,运行了多久等等信息。不过要注意,这个 API 用的是快照机制相同的线程池。若是你在快照很是大的分片,状态更新的间隔会很大,由于 API 在竞争相同的线程池资源。
更好的方案是拽取 _status
API 数据:
GET _snapshot/my_backup/snapshot_3/_status
_status
API 马上返回,而后给出详细的多的统计值输出:
{ "snapshots": [ { "snapshot": "snapshot_3", "repository": "my_backup", "state": "IN_PROGRESS",
"shards_stats": { "initializing": 0, "started": 1,
"finalizing": 0, "done": 4, "failed": 0, "total": 5 }, "stats": { "number_of_files": 5, "processed_files": 5, "total_size_in_bytes": 1792, "processed_size_in_bytes": 1792, "start_time_in_millis": 1409663054859, "time_in_millis": 64 }, "indices": { "index_3": { "shards_stats": { "initializing": 0, "started": 0, "finalizing": 0, "done": 5, "failed": 0, "total": 5 }, "stats": { "number_of_files": 5, "processed_files": 5, "total_size_in_bytes": 1792, "processed_size_in_bytes": 1792, "start_time_in_millis": 1409663054859, "time_in_millis": 64 }, "shards": { "0": { "stage": "DONE", "stats": { "number_of_files": 1, "processed_files": 1, "total_size_in_bytes": 514, "processed_size_in_bytes": 514, "start_time_in_millis": 1409663054862, "time_in_millis": 22 } }, ...
响应包括快照的整体情况,但也包括下钻到每一个索引和每一个分片的统计值。这个给你展现了有关快照进展的很是详细的视图。分片能够在不一样的完成状态:
INITIALIZING
STARTED
FINALIZING
DONE
FAILED
最后,你可能想取消一个快照或恢复。 由于它们是长期运行的进程,执行操做的时候一个笔误或者过错就会花很长时间来解决——并且同时还会耗尽有价值的资源。
要取消一个快照,在他进行中的时候简单的删除快照就能够:
DELETE _snapshot/my_backup/snapshot_3
这个会中断快照进程。而后删除仓库里进行到一半的快照。
参考连接:https://www.elastic.co/guide/en/elasticsearch/reference/5.5/modules-snapshots.html
https://www.elastic.co/guide/cn/elasticsearch/guide/current/backing-up-your-cluster.html