从快照恢复edit

一旦备份了一些数据,恢复它就简单了:只要在你希望恢复到集群的快照 ID后面加上 _restore 即可:

POST _snapshot/my_backup/snapshot_1/_restore

默认行为是恢复这个快照中存在的所有索引。 如果 snapshot_1 包括五个索引,这五个都会被恢复到集群里。 和 snapshot API 一样,可以选择要恢复的索引。

还有另外一些重命名索引的选项。 这个选项允许你通过模式(pattern)匹配索引名称,然后在恢复过程中提供一个新名称。 如果你想在不替换现有数据的前提下,恢复老数据来验证内容,或者做其他处理,这个选项很有用。让我们从快照里恢复单个索引并提供一个替换的名称:

POST /_snapshot/my_backup/snapshot_1/_restore
{
    "indices": "index_1", 
    "rename_pattern": "index_(.+)", 
    "rename_replacement": "restored_index_$1" 
}

只恢复索引index_1,忽略快照中存在的其它索引。

查找所提供的模式能匹配上的正在恢复的索引。

然后用替代的模式重命名它们。

这将恢复 index_1 到你的集群里,但是重命名成了 restored_index_1

和快照(snapshot)类似, restore 命令也会立刻返回,恢复进程会在后台运行。如果你希望 HTTP 调用阻塞直到恢复完成,只需添加 wait_for_completion 标记:

POST _snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true

监控恢复操作edit

从仓库恢复数据依托于 Elasticsearch 里存在的的已经内置的恢复机制。 在内部实现上,从仓库恢复分片和从另一个节点恢复是等价的。

如果你想监控恢复的进度,可以使用 recovery API。 这是一个通用的 API,它显示了分片在集群中移动的状态。

可以为正在恢复的某一个索引调用这个API:

GET restored_index_3/_recovery

或者查看集群里的所有索引,可能包括跟你的恢复进程无关的其他移动的分片:

GET /_recovery/

输出会跟这个类似(注意,根据集群的活跃度,输出可能会变得非常冗长!):

{
  "restored_index_3" : {
    "shards" : [ {
      "id" : 0,
      "type" : "snapshot", 
      "stage" : "index",
      "primary" : true,
      "start_time" : "2014-02-24T12:15:59.716",
      "stop_time" : 0,
      "total_time_in_millis" : 175576,
      "source" : { 
        "repository" : "my_backup",
        "snapshot" : "snapshot_3",
        "index" : "restored_index_3"
      },
      "target" : {
        "id" : "ryqJ5lO5S4-lSFbGntkEkg",
        "hostname" : "my.fqdn",
        "ip" : "10.0.1.7",
        "name" : "my_es_node"
      },
      "index" : {
        "files" : {
          "total" : 73,
          "reused" : 0,
          "recovered" : 69,
          "percent" : "94.5%" 
        },
        "bytes" : {
          "total" : 79063092,
          "reused" : 0,
          "recovered" : 68891939,
          "percent" : "87.1%"
        },
        "total_time_in_millis" : 0
      },
      "translog" : {
        "recovered" : 0,
        "total_time_in_millis" : 0
      },
      "start" : {
        "check_index_time" : 0,
        "total_time_in_millis" : 0
      }
    } ]
  }
}

type 字段告诉你恢复的本质;此分片正在从一个快照中恢复。

source 哈希描述了作为恢复来源的特定快照和仓库。

percent 字段告诉你恢复的状态。这个特定分片的文件目前已经恢复了 94%;它几乎的完整的了。

输出会列出所有当前正在恢复中的索引,然后列出这些索引里的所有分片。每个分片都会有启动/停止时间、持续时间、恢复百分比、传输字节数等统计信息。

取消一个恢复edit

要取消一个恢复,你需要删除正在恢复的索引。 因为恢复过程其实就是分片的恢复,发送一个 delete-index API 修改集群状态,就会反过来停止恢复。比如:

DELETE /restored_index_3

如果 restored_index_3 正在恢复中,这个删除命令会停止恢复,同时删除任何已经恢复到集群里的数据。