可搜索快照编辑

借助可搜索快照,您可以使用 快照 以极具成本效益的方式搜索不常访问的只读数据。 层和 冻结 层数据层使用可搜索快照来降低您的存储和运营成本。

可搜索快照消除了从热层滚动后对 副本分片 的需求,这可能会将搜索数据所需的本地存储空间减少一半。可搜索快照依赖于您已用于备份的相同快照机制,并且对您的快照存储库存储成本的影响最小。

使用可搜索快照编辑

搜索可搜索快照索引与搜索任何其他索引相同。

默认情况下,可搜索快照索引没有副本。底层快照提供了弹性,并且预计查询量足够低,单个分片副本就足够了。但是,如果您需要支持更高的查询量,则可以通过调整 index.number_of_replicas 索引设置来添加副本。

如果一个节点发生故障并且需要在其他地方恢复可搜索快照分片,则在 Elasticsearch 将分片分配给其他节点时,集群运行状况不会为 绿色 的时间窗口很短。命中这些分片的搜索可能会失败或返回部分结果,直到分片重新分配给运行状况良好的节点。

您通常通过 ILM 管理可搜索快照。可搜索快照 操作会在常规索引到达 冻结 阶段时自动将其转换为可搜索快照索引。您还可以通过使用 挂载快照 API 手动挂载现有快照中的索引来使其可搜索。

要从包含多个索引的快照挂载索引,我们建议创建仅包含要搜索的索引的快照的 克隆,然后挂载克隆。如果快照有任何已挂载的索引,则不应删除该快照,因此创建克隆使您能够独立于任何可搜索快照管理备份快照的生命周期。如果您使用 ILM 管理可搜索快照,它将根据需要自动克隆快照。

您可以使用与常规索引相同的机制来控制可搜索快照索引的分片的分配。例如,您可以使用 索引级分片分配过滤 将可搜索快照分片限制为节点的子集。

与正常的恢复操作一样,可搜索快照索引的恢复速度受存储库设置 max_restore_bytes_per_sec 和节点设置 indices.recovery.max_bytes_per_sec 的限制。默认情况下,max_restore_bytes_per_sec 是无限的,但 indices.recovery.max_bytes_per_sec 的默认值取决于节点的配置。请参阅 恢复设置

我们建议您在创建将作为可搜索快照索引挂载的快照之前,对每个分片的一个段进行 强制合并 索引。从快照存储库读取每次都需要时间和成本,并且段越少,恢复快照或响应搜索所需的读取次数就越少。

可搜索快照非常适合管理大型历史数据存档。历史信息的搜索频率通常低于最近的数据,因此可能不需要副本即可获得其性能优势。

对于更复杂或更耗时的搜索,您可以将 异步搜索 与可搜索快照一起使用。

将以下任何存储库类型与可搜索快照一起使用

您还可以使用这些存储库类型的替代实现,例如 MinIO,只要它们完全兼容。使用 存储库分析 API 分析您的存储库是否适合与可搜索快照一起使用。

可搜索快照的工作原理编辑

当从快照挂载索引时,Elasticsearch 会将其分片分配给集群中的数据节点。然后,数据节点根据指定的 挂载选项 自动从存储库检索相关分片数据到本地存储。如果可能,搜索将使用本地存储中的数据。如果本地没有数据,Elasticsearch 会从快照存储库下载所需的数据。

如果持有其中一个分片的节点发生故障,Elasticsearch 会自动在另一个节点上分配受影响的分片,并且该节点会从存储库恢复相关分片数据。不需要副本,也不需要复杂的监控或编排来恢复丢失的分片。尽管可搜索快照索引默认没有副本,但您可以通过调整 index.number_of_replicas 为这些索引添加副本。可搜索快照分片的副本通过从快照存储库复制数据来恢复,就像可搜索快照分片的主副本一样。相反,常规索引的副本是通过从主副本复制数据来恢复的。

挂载选项编辑

要搜索快照,您必须先将其作为索引本地挂载。通常 ILM 会自动执行此操作,但您也可以自己调用 挂载快照 API。从快照挂载索引有两种选择,每种选择都有不同的性能特征和本地存储占用空间

完全挂载的索引

在 Elasticsearch 集群中完全缓存快照索引的分片。ILM 在 阶段使用此选项。

完全挂载的索引的搜索性能通常与常规索引相当,因为几乎不需要访问快照存储库。在恢复过程中,搜索性能可能会比常规索引慢,因为搜索可能需要一些尚未检索到本地缓存的数据。如果发生这种情况,Elasticsearch 将急切地检索完成搜索所需的数据,并与正在进行的恢复并行进行。磁盘上的数据在重新启动后保留,这样节点在重新启动后不需要重新下载已存储在节点上的数据。

由 ILM 管理的索引在完全挂载时会添加前缀 restored-

部分挂载的索引

使用仅包含快照索引数据的最近搜索部分的本地缓存。此缓存具有固定大小,并在分配在同一数据节点上的部分挂载索引的分片之间共享。ILM 在 冻结 阶段使用此选项。

如果搜索需要缓存中没有的数据,Elasticsearch 会从快照存储库获取丢失的数据。需要这些提取的搜索速度较慢,但提取的数据存储在缓存中,以便将来可以更快地提供类似的搜索。Elasticsearch 会从缓存中清除不常使用的数据以释放空间。重新启动节点时,缓存将被清除。

尽管比完全挂载的索引或常规索引慢,但部分挂载的索引仍然可以快速返回搜索结果,即使对于大型数据集也是如此,因为存储库中的数据布局针对搜索进行了大量优化。许多搜索在返回结果之前只需要检索总分片数据的一小部分。

由 ILM 管理的索引在部分挂载时会添加前缀 partial-

要部分挂载索引,您必须有一个或多个具有可用共享缓存的节点。默认情况下,专用冻结数据层节点(具有 data_frozen 角色且没有其他数据角色的节点)使用总磁盘空间的 90% 和总磁盘空间减去 100GB 预留空间中的较大值配置共享缓存。

强烈建议将专用冻结层用于生产环境。如果您没有专用冻结层,则必须配置 xpack.searchable.snapshot.shared_cache.size 设置以在一个或多个节点上为缓存预留空间。部分挂载的索引仅分配给具有共享缓存的节点。

xpack.searchable.snapshot.shared_cache.size
(静态) 为部分挂载索引的共享缓存保留的磁盘空间。接受总磁盘空间的百分比或绝对 字节值。对于专用冻结数据层节点,默认为总磁盘空间的 90%。否则默认为 0b
xpack.searchable.snapshot.shared_cache.size.max_headroom
静态字节值)对于专用冻结层节点,要维护的最大预留空间。如果未显式设置 xpack.searchable.snapshot.shared_cache.size,则此设置默认为 100GB。否则,它默认为 -1(未设置)。仅当 xpack.searchable.snapshot.shared_cache.size 设置为百分比时,才能配置此设置。

为了说明这些设置如何协同工作,让我们看两个在专用冻结节点上使用设置的默认值的示例

  • 4000 GB 磁盘将导致共享缓存大小为 3900 GB。4000 GB 的 90% 是 3600 GB,预留 400 GB 的预留空间。默认的 max_headroom 为 100 GB 生效,因此结果为 3900 GB。
  • 400 GB 磁盘将导致共享缓存大小为 360 GB。

您可以在 elasticsearch.yml 中配置这些设置

xpack.searchable.snapshot.shared_cache.size: 4TB

您只能在具有 data_frozen 角色的节点上配置这些设置。此外,具有共享缓存的节点只能有一个 数据路径

Elasticsearch 还使用名为 .snapshot-blob-cache 的专用系统索引来加速可搜索快照分片的恢复。此索引用作部分或完全挂载数据之上的附加缓存层,并包含启动可搜索快照分片所需的最小数据。Elasticsearch 会自动删除此索引中不再使用的文档。可以使用以下设置调整此定期清理

searchable_snapshots.blob_cache.periodic_cleanup.interval
动态)计划定期清理 .snapshot-blob-cache 索引的时间间隔。默认为每小时 (1h)。
searchable_snapshots.blob_cache.periodic_cleanup.retention_period
动态)在 .snapshot-blob-cache 索引中保留过时文档的保留期。默认为每小时 (1h)。
searchable_snapshots.blob_cache.periodic_cleanup.batch_size
动态)在 .snapshot-blob-cache 索引的定期清理期间一次搜索和批量删除的文档数。默认为 100
searchable_snapshots.blob_cache.periodic_cleanup.pit_keep_alive
动态)在 .snapshot-blob-cache 索引的定期清理期间执行的 时间点保持活动 请求使用的值。默认为 10m

使用可搜索快照降低成本编辑

在大多数情况下,可搜索快照通过消除对副本分片的需要以及在节点之间复制分片数据的需要来降低运行集群的成本。但是,如果在您的环境中从快照存储库检索数据的成本特别高,则可搜索快照可能比常规索引成本更高。在使用可搜索快照之前,请确保您的操作环境的成本结构与可搜索快照兼容。

副本成本编辑

为了实现弹性,常规索引需要在多个节点上为每个分片提供多个冗余副本。如果一个节点发生故障,Elasticsearch 会使用冗余来重建任何丢失的分片副本。可搜索快照索引不需要副本。如果包含可搜索快照索引的节点发生故障,Elasticsearch 可以从快照存储库重建丢失的分片缓存。

如果没有副本,很少访问的可搜索快照索引所需的资源要少得多。包含无副本完全挂载的可搜索快照索引的冷数据层的节点数和磁盘空间是包含常规索引中相同数据的层的节点数和磁盘空间的一半。冻结层仅包含部分挂载的可搜索快照索引,需要的资源更少。

数据传输成本编辑

当常规索引的分片在节点之间移动时,其内容会从集群中的另一个节点复制。在许多环境中,在节点之间移动数据的成本很高,尤其是在节点位于不同区域的云环境中运行时。相反,当挂载可搜索快照索引或移动其分片之一时,数据始终从快照存储库复制。这通常要便宜得多。

大多数云提供商对区域之间传输的数据和从其平台传输的数据收取高额费用。您应该只将快照挂载到与快照存储库位于同一区域的集群中。如果您希望跨多个区域搜索数据,请配置多个集群并使用 跨集群搜索跨集群复制,而不是可搜索快照。

备份和恢复可搜索快照编辑

您可以使用 常规快照 来备份包含可搜索快照索引的集群。当您恢复包含可搜索快照索引的快照时,这些索引将再次作为可搜索快照索引恢复。

在恢复包含可搜索快照索引的快照之前,您必须先 注册 包含原始索引快照的存储库。恢复后,可搜索快照索引会从其原始存储库挂载原始索引快照。如果需要,您可以为常规快照和可搜索快照使用单独的存储库。

可搜索快照索引的快照仅包含少量元数据,用于标识其原始索引快照。它不包含来自原始索引的任何数据。如果备份的原始索引快照不可用,则备份的恢复将无法恢复任何可搜索快照索引。

由于可搜索快照索引不是常规索引,因此无法使用 仅源存储库 来创建可搜索快照索引的快照。

可搜索快照的可靠性

可搜索快照索引中数据的唯一副本是存储在存储库中的基础快照。如果您删除此快照,数据将永久丢失。尽管 Elasticsearch 可能已将某些数据缓存到本地存储以加快搜索速度,但此缓存数据不完整,如果您删除基础快照,则无法将其用于恢复。例如

  • 当 Elasticsearch 中挂载了任何可搜索快照时,您不得取消注册其所在的存储库。
  • 如果任何索引都作为可搜索快照索引挂载,则不得删除快照。快照包含数据的唯一完整副本。如果您删除它,则无法从其他地方恢复数据。
  • 如果您从另一个集群具有写入权限的存储库中的快照挂载索引,则必须确保另一个集群不会删除这些快照。快照包含数据的唯一完整副本。如果您删除它,则无法从其他地方恢复数据。
  • 如果存储库发生故障或快照内容损坏,并且您无法将其恢复到以前的健康状态,则数据将永久丢失。

    所有主要公共云提供商提供的 Blob 存储通常都提供针对故障或损坏的良好保护。如果您管理自己的存储库存储,则您需要负责其可靠性。