注册快照存储库编辑

本指南介绍如何注册快照存储库。快照存储库是快照的集群外存储位置。您必须先注册存储库,然后才能创建或恢复快照。

在本指南中,您将学习如何

  • 注册快照存储库
  • 验证存储库是否正常运行
  • 清理存储库以删除不需要的文件

先决条件编辑

  • 要使用 Kibana 的快照和恢复功能,您必须具有以下权限

    • 集群权限monitormanage_slmcluster:admin/snapshotcluster:admin/repository
    • 索引权限:对 monitor 索引的 all 权限
  • 要注册快照存储库,集群的全局元数据必须是可写的。确保没有任何集群块阻止写访问。

注意事项编辑

注册快照存储库时,请记住以下几点

  • 每个快照存储库都是独立的。Elasticsearch 不会在存储库之间共享数据。
  • 集群应该只注册一次特定的快照存储库存储桶。如果您在多个集群中注册了同一个快照存储库,则只有一个集群应该对该存储库具有写访问权限。在其他集群上,将存储库注册为只读。

    这可以防止多个集群同时写入存储库并损坏存储库的内容。它还可以防止 Elasticsearch 缓存存储库的内容,这意味着其他集群所做的更改将立即可见。

  • 将 Elasticsearch 升级到较新版本时,您可以继续使用升级前使用的同一个存储库。如果多个集群访问存储库,则它们都应该具有相同的版本。一旦存储库被特定版本的 Elasticsearch 修改,则在由旧版本访问时,它可能无法正常工作。但是,即使您在升级期间或之后创建了更多快照,您也可以通过将升级前创建的快照恢复到运行升级前版本的集群来从失败的升级中恢复。

管理快照存储库编辑

您可以通过两种方式注册和管理快照存储库

要在 Kibana 中管理存储库,请转到主菜单,然后单击堆栈管理 > 快照和恢复 > 存储库。要注册快照存储库,请单击注册存储库

您还可以使用创建快照存储库 API注册存储库。

快照存储库类型编辑

支持的快照存储库类型因部署类型而异

Elasticsearch Service 存储库类型编辑

Elasticsearch Service 部署会自动注册found-snapshots 存储库。Elasticsearch Service 使用此存储库和 cloud-snapshot-policy 定期创建集群的快照。您还可以将 found-snapshots 存储库用于您自己的SLM 策略或存储可搜索快照。

found-snapshots 存储库特定于每个部署。但是,如果部署位于同一帐户下且位于同一区域,则可以从另一个部署的 found-snapshots 存储库恢复快照。有关更多信息,请参阅 Cloud 快照和恢复文档。

Elasticsearch Service 部署还支持以下存储库类型

自管存储库类型编辑

如果您管理自己的 Elasticsearch 集群,则可以使用以下内置快照存储库类型

其他存储库类型可通过官方插件获得

您还可以将其他存储实现与这些存储库类型一起使用,只要其他实现完全兼容。例如,MinIO 提供了 AWS S3 API 的替代实现,您可以将 MinIO 与s3 存储库类型一起使用。

请注意,某些存储系统声称与这些存储库类型兼容,但没有完全模拟其行为。Elasticsearch 需要完全兼容。特别是,替代实现必须支持相同的 API 端点集,在发生故障时返回相同的错误,并提供等效的一致性保证和性能,即使在多个节点同时访问时也是如此。不兼容的错误代码、一致性或性能可能特别难以跟踪,因为错误、一致性故障和性能问题通常很少见且难以重现。

您可以使用存储库分析API 对存储系统的适用性执行一些基本检查。如果此 API 未成功完成,或指示性能不佳,则您的存储系统不完全兼容,因此不适合用作快照存储库。您需要与存储系统的供应商合作,解决您遇到的任何不兼容问题。

验证存储库编辑

当您注册快照存储库时,Elasticsearch 会自动验证该存储库在所有主节点和数据节点上是否可用且正常运行。

要禁用此验证,请将创建快照存储库 APIverify 查询参数设置为 false。您无法在 Kibana 中禁用存储库验证。

response = client.snapshot.create_repository(
  repository: 'my_unverified_backup',
  verify: false,
  body: {
    type: 'fs',
    settings: {
      location: 'my_unverified_backup_location'
    }
  }
)
puts response
PUT _snapshot/my_unverified_backup?verify=false
{
  "type": "fs",
  "settings": {
    "location": "my_unverified_backup_location"
  }
}

如果需要,您可以手动运行存储库验证检查。要在 Kibana 中验证存储库,请转到存储库列表页面,然后单击存储库的名称。然后单击验证存储库。您还可以使用验证快照存储库 API

response = client.snapshot.verify_repository(
  repository: 'my_unverified_backup'
)
puts response
POST _snapshot/my_unverified_backup/_verify

如果成功,则请求将返回用于验证存储库的节点列表。如果验证失败,则请求将返回错误。

您可以使用存储库分析 API更彻底地测试存储库。

清理存储库编辑

随着时间的推移,存储库可能会积累任何现有快照都没有引用的数据。这是快照功能在快照创建过程中发生故障时提供的数据安全保证以及快照创建过程的分散性的结果。这些未引用的数据不会以任何方式对快照存储库的性能或安全产生负面影响,但会导致存储使用量高于必要水平。要删除这些未引用的数据,您可以对存储库运行清理操作。这将触发对存储库内容的完整统计,并删除任何未引用的数据。

要在 Kibana 中运行存储库清理操作,请转到存储库列表页面,然后单击存储库的名称。然后单击清理存储库

您还可以使用清理快照存储库 API

response = client.snapshot.cleanup_repository(
  repository: 'my_repository'
)
puts response
POST _snapshot/my_repository/_cleanup

该 API 返回

{
  "results": {
    "deleted_bytes": 20,
    "deleted_blobs": 5
  }
}

根据具体的存储库实现,显示的可用字节数以及已删除的 blob 数将是近似值或精确结果。已删除的 blob 数的任何非零值都意味着已找到未引用的 blob,并随后将其清理。

请注意,此端点执行的大多数清理操作在从存储库中删除任何快照时都会自动执行。如果您定期删除快照,则在大多数情况下,您将不会从使用此功能中获得任何或仅获得很小的空间节省,因此应相应地降低调用它的频率。

备份存储库编辑

您可能希望对存储库进行独立备份,例如,以便拥有其内容的存档副本,以便您可以在以后使用它来重新创建当前状态的存储库。

您必须确保 Elasticsearch 在您备份其内容时不会写入存储库。您可以通过在所有集群上取消注册它,或使用 readonly: true 注册它来做到这一点。如果 Elasticsearch 在备份期间将任何数据写入存储库,则备份的内容可能不一致,并且将来可能无法从中恢复任何数据。

或者,如果您的存储库支持,您可以创建底层文件系统的原子快照,然后创建此文件系统快照的备份。非常重要的是,文件系统快照是原子创建的。

不要依赖于本节中描述的方法以外的方法创建的存储库备份。如果您使用其他方法创建存储库内容的副本,则生成的副本可能会捕获数据的不一致视图。从这样的副本恢复存储库可能会失败,报告错误,或者可能会成功但静默地丢失了一些数据。

不要使用单个节点的文件系统快照作为备份机制。您必须使用 Elasticsearch 快照和恢复功能将集群内容复制到单独的存储库。然后,如果需要,您可以创建此存储库的文件系统快照。

从备份恢复存储库时,必须先完全恢复存储库内容,然后才能在 Elasticsearch 中注册该存储库。如果在存储库已在 Elasticsearch 中注册的情况下更改其内容,则该存储库可能会变得不可读,或者可能会静默丢失部分内容。