注册快照仓库

编辑

本指南将向您展示如何注册快照仓库。快照仓库是用于存储快照的集群外存储位置。您必须先注册仓库,然后才能创建或还原快照。

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

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

前提条件

编辑
  • 要使用 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 中禁用仓库验证。

resp = client.snapshot.create_repository(
    name="my_unverified_backup",
    verify=False,
    repository={
        "type": "fs",
        "settings": {
            "location": "my_unverified_backup_location"
        }
    },
)
print(resp)
response = client.snapshot.create_repository(
  repository: 'my_unverified_backup',
  verify: false,
  body: {
    type: 'fs',
    settings: {
      location: 'my_unverified_backup_location'
    }
  }
)
puts response
const response = await client.snapshot.createRepository({
  name: "my_unverified_backup",
  verify: "false",
  repository: {
    type: "fs",
    settings: {
      location: "my_unverified_backup_location",
    },
  },
});
console.log(response);
PUT _snapshot/my_unverified_backup?verify=false
{
  "type": "fs",
  "settings": {
    "location": "my_unverified_backup_location"
  }
}

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

resp = client.snapshot.verify_repository(
    name="my_unverified_backup",
)
print(resp)
response = client.snapshot.verify_repository(
  repository: 'my_unverified_backup'
)
puts response
const response = await client.snapshot.verifyRepository({
  name: "my_unverified_backup",
});
console.log(response);
POST _snapshot/my_unverified_backup/_verify

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

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

清理仓库

编辑

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

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

您也可以使用 清理快照仓库 API

resp = client.snapshot.cleanup_repository(
    name="my_repository",
)
print(resp)
response = client.snapshot.cleanup_repository(
  repository: 'my_repository'
)
puts response
const response = await client.snapshot.cleanupRepository({
  name: "my_repository",
});
console.log(response);
POST _snapshot/my_repository/_cleanup

该 API 返回

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

根据具体的仓库实现,显示的空闲字节数以及删除的 blob 数量将是近似值或确切结果。删除的 blob 数量的任何非零值都表示发现了未引用的 blob 并随后进行了清理。

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

备份仓库

编辑

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

您必须确保在备份仓库内容时 Elasticsearch 不会写入仓库。如果 Elasticsearch 在备份期间向仓库写入任何数据,则备份的内容可能不一致,并且将来可能无法从中恢复任何数据。通过从具有写访问权限的集群中取消注册仓库来阻止写入仓库。

或者,如果您的仓库支持,您可以对底层文件系统进行原子快照,然后备份此文件系统快照。文件系统快照必须以原子方式拍摄,这一点非常重要。

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

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

从备份还原仓库时,在完全还原仓库内容之前,您不得在 Elasticsearch 中注册该仓库。如果您在仓库注册到 Elasticsearch 后更改仓库的内容,则仓库可能变得不可读或可能默默地丢失其某些内容。从备份还原仓库后,请使用 验证仓库完整性 API 来验证其完整性,然后再开始使用该仓库。