注册快照存储库

编辑

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

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

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

先决条件

编辑
  • 要使用 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 验证其完整性,然后再开始使用存储库。