从快照恢复
一旦你备份过了数据,恢复它就简单了:只要在你希望恢复回集群的快照 ID后面加上 _restore
即可:
POST _snapshot/my_backup/snapshot_1/_restore
默认行为是把这个快照里存有的所有索引都恢复。如果 snapshot_1
包括五个索引,这五个都会被恢复到我们集群里。和 snapshot
API 一样,我们也可以选择希望恢复具体哪个索引。
还有附加的选项用来重命名索引。这个选项允许你通过模式匹配索引名称,然后通过恢复进程提供一个新名称。如果你想在不替换现有数据的前提下,恢复老数据来验证内容,或者做其他处理,这个选项很有用。让我们从快照里恢复单个索引并提供一个替换的名称:
POST /_snapshot/my_backup/snapshot_1/_restore
{
"indices": "index_1",
"rename_pattern": "index_(.+)",
"rename_replacement": "restored_index_$1"
}
POST _snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true
监控恢复操作
从仓库恢复数据借鉴了 Elasticsearch 里已有的现行恢复机制。在内部实现上,从仓库恢复分片和从另一个节点恢复是等价的。
如果你想监控恢复的进度,你可以使用 recovery
API。这是一个通用目的的 API,用来展示你集群中移动着的分片状态。
这个 API 可以为你在恢复的指定索引单独调用:
GET restored_index_3/_recovery
或者查看你集群里所有索引,可能包括跟你的恢复进程无关的其他分片移动:
GET /_recovery/
输出会跟这个类似(注意,根据你集群的活跃度,输出可能会变得非常啰嗦!):
输出会列出所有目前正在经历恢复的索引,然后列出这些索引里的所有分片。每个分片里会有启动/停止时间、持续时间、恢复百分比、传输字节数等统计值。
取消一个恢复
要取消一个恢复,你需要删除正在恢复的索引。因为恢复进程其实就是分片恢复,发送一个 删除索引
API 修改集群状态,就可以停止恢复进程。比如:
DELETE /restored_index_3
如果 restored_index_3
正在恢复中,这个删除命令会停止恢复,同时删除所有已经恢复到集群里的数据。