跨集群的 ElasticSearch 快照

ElasticSearch Snapshot across cluster

最近我在由 3 个数据节点组成的 elasticsearch 集群中创建了一个 snapshot 索引。

我的主要目的是将这个索引移动到另一个集群中。

我使用的命令:

PUT /_snapshot/my_backup

{
    "type": "fs",
    "settings": {
        "location": "/home/me/backup",
        "compress": true
    }
}


PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true
{
  "indices": "daily-20141127"
}

注意:以上查询是在同一个数据节点中执行的。

Snapshot 已在上述位置成功创建,但 在我点击查询的另一个节点中 并且此备份位置中的每个节点都有一个文件夹(名称: indices),其中包含等效节点上备份索引的分片。

示例:
节点 1: home/me/my_backup/indices/1,2,3
节点 2: home/me/my_backup/indices/4,5,6
node3: home/me/my_backup/indices/7,8,9

所以我不得不手动将集群中的所有索引文件夹复制到具有快照元数据的节点以完成备份。然后我将备份文件夹复制到新集群并恢复它(恢复过程很好)

备份索引的所有索引文件夹是否可以在1个节点中而不是跨集群拆分?

您指定的 location 应该是 "shared" 位置,并且存储库中指定的路径应该指向所有节点共享的同一目录。它不能只是节点上的本地目录。例如:该位置可以是单独机器上的网络共享安装,所有节点都应指向它并且应该能够访问它。

这样做的原因是每个节点都可能持有分片中的主节点或副本,并且它应该能够制作包含在该特定分片中的文档的副本,然后移动到 "shared" 位置。

正如 Andrei 所写 - 要在多个节点上使用快照,您将需要一个所有节点都可以访问的共享位置,并且您必须 elasticsearch.yml 具有相同 path.repo 条目的设置。

有一个如何create shared repositories across multiple clusters的指南,其中涵盖了您需要的所有步骤,包括设置 Samba 服务器和客户端 + 配置 ElasticSearch。