快照和恢复

edit

快照是运行中的 Elasticsearch 集群的备份。您可以使用快照来:

  • 定期备份集群,无需停机
  • 在删除或硬件故障后恢复数据
  • 在集群之间传输数据
  • 通过在冷数据层和冻结数据层中使用可搜索快照来降低存储成本

快照工作流程

edit

Elasticsearch 将快照存储在称为快照仓库的集群外存储位置。在您可以拍摄或恢复快照之前,您必须在集群上注册一个快照仓库。Elasticsearch 支持多种仓库类型,包括云存储选项,例如:

  • AWS S3
  • Google Cloud Storage (GCS)
  • 微软 Azure

在注册快照仓库后,您可以使用 快照生命周期管理 (SLM) 来自动拍摄和管理 快照。然后,您可以 恢复快照 以恢复或转移其数据。

快照内容

edit

默认情况下,集群的快照包含集群状态、所有常规数据流以及所有常规索引。集群状态包括:

您还可以仅对集群中的特定数据流或索引进行快照。包含数据流或索引的快照会自动包含其别名。当您恢复快照时,可以选择是否恢复这些别名。

快照不包含或备份:

当恢复数据流时,如果目标集群没有与数据流匹配的索引模板,数据流将无法进行翻转,直到创建匹配的索引模板。 这会影响数据流的生命周期管理,并干扰数据流的大小和保留策略。

功能状态

edit

一个功能状态包含用于存储配置、历史记录和其他数据的索引和数据流,例如 Elasticsearch 安全功能或 Kibana。

要检索功能状态列表,请使用功能 API

一个功能状态通常包括一个或多个系统索引或系统数据流。它可能还包括由该功能使用的常规索引和数据流。例如,一个功能状态可能包括一个包含功能执行历史的常规索引。将此历史记录存储在常规索引中,可以让你更轻松地搜索它。

在 Elasticsearch 8.0 及更高版本中,功能状态是备份和恢复系统索引和系统数据流的唯一方式。

快照的工作原理

edit

快照会自动去重以节省存储空间并减少网络传输成本。要备份索引,快照会复制索引的分段并将其存储在快照仓库中。由于分段是不可变的,快照只需要复制自仓库上次快照以来创建的任何新分段。

每个快照在逻辑上也是独立的。当你删除一个快照时,Elasticsearch 只会删除那些仅由该快照使用的段。Elasticsearch 不会删除存储库中其他快照使用的段。

快照和分片分配

edit

快照从索引的主分片复制段。当你开始一个快照时,Elasticsearch会立即开始复制任何可用主分片的段。如果一个分片正在启动或重新定位,Elasticsearch会等待这些过程完成后再复制该分片的段。如果一个或多个主分片不可用,快照尝试将失败。

一旦快照开始复制分片的段,Elasticsearch 不会将该分片移动到另一个节点,即使通常会触发重新分配的重新平衡或分片分配设置。Elasticsearch 只会在快照完成复制分片的数据后移动该分片。

快照开始和结束时间

edit

快照并不代表集群在某个精确的时间点。相反,每个快照包括一个开始和结束时间。快照代表每个分片数据在两个时间点之间某个时刻的视图。

快照兼容性

edit

要将快照恢复到集群,快照、集群以及任何恢复的索引的版本必须兼容。

快照版本兼容性

edit

您无法将快照恢复到较早版本的Elasticsearch。例如,您无法将7.6.0中拍摄的快照恢复到运行7.5.0的集群中。

此文档适用于尚未发布的 Elasticsearch 版本 9.0.0-beta1。上述兼容性表仅适用于在已发布的 Elasticsearch 版本中创建的快照。如果您正在测试 Elasticsearch 的预发布版本,则仍然可以根据此兼容性表恢复在早期发布的版本中创建的快照。您还可以使用预发布版本创建快照,并使用相同的版本进行恢复。然而,一旦 Elasticsearch 的预发布版本写入了快照存储库,您不得将同一存储库与其他版本的 Elasticsearch 一起使用,即使这些版本相同。Elasticsearch 的不同预发布版本可能使用不同的且不兼容的存储库布局。如果存储库布局与正在使用的 Elasticsearch 版本不兼容,则创建和恢复快照可能会导致错误,或者可能会成功但会静默丢失一些数据。在使用不同版本之前,您应该丢弃您的存储库。

索引兼容性

edit

您从快照中恢复的任何索引也必须与当前集群的版本兼容。如果您尝试恢复在 不兼容版本中创建的索引,恢复尝试将会失败。

集群版本

索引创建版本

6.8

7.0–7.1

7.2–8.16

8.0–8.2

8.3-9.0

5.0–5.6

是

否

否

否

是[1]

6.0–6.7

是

是

是

否

是[1]

6.8

是

否

是

否

是[1]

7.0–7.1

否

是

是

是

是

7.2–8.16

否

否

是

是

是

8.0–9.0

否

否

否

是

是

1. 支持与归档索引一起使用。

您无法将索引恢复到较早版本的 Elasticsearch。例如,您无法将创建于 7.6.0 的索引恢复到运行 7.5.0 的集群中。

兼容的快照可以包含在较旧的不兼容版本中创建的索引。例如,8.16 集群的快照可以包含在 6.8 中创建的索引。将 6.8 索引恢复到 9.0 集群会失败,除非您可以使用 归档功能。如果您在升级集群之前进行快照,请记住这一点。

作为一种变通方法,您可以先将索引恢复到运行最新版本 Elasticsearch 的另一个集群中,该版本与索引和您当前的集群兼容。然后,您可以使用 reindex-from-remote 在当前集群上重建索引。只有当索引的 _source 字段启用时,才能进行远程重建索引。

从远程重新索引可能比恢复快照花费更长的时间。 在开始之前,请使用部分数据测试远程重新索引过程,以估计您的时间需求。

警告

edit

其他备份方法

edit

创建快照是备份集群的唯一可靠且受支持的方法。 您不能通过复制其节点数据目录来备份 Elasticsearch 集群。没有支持的方法可以从文件系统级别的备份中恢复任何数据。如果您尝试从这种备份中恢复集群,可能会失败并报告文件损坏或丢失,或者其他数据不一致的情况,或者可能看似成功但实际上已经丢失了部分数据。

集群节点数据目录的副本不能作为备份,因为它不是在某个时间点上对其内容的统一表示。您不能通过在制作副本时关闭节点,也不能通过获取文件系统级别的原子快照来解决这个问题,因为Elasticsearch具有跨越整个集群的一致性要求。您必须使用内置的快照功能来进行集群备份。

仓库内容

edit

不要修改仓库内的任何内容或运行可能干扰其内容的进程。 如果除了Elasticsearch之外的其他内容修改了仓库的内容,那么未来的快照或恢复操作可能会失败,报告损坏或其他数据不一致的情况,或者可能会看似成功但实际上已经丢失了部分数据。

然而,您可以安全地从备份中恢复一个仓库,只要

  1. 在恢复存储库内容时,该存储库未在Elasticsearch中注册。
  2. 当您完成恢复存储库时,其内容与您进行备份时的内容完全相同。

如果您不再需要存储库中的任何快照,请先从 Elasticsearch 中注销它,然后再从底层存储中删除其内容。

此外,快照可能包含安全敏感信息,您可能希望存储在专用存储库中