备份概览

本页面介绍什么是备份、备份的工作原理、一些常见使用场景以及创建和使用备份的最佳实践。

什么是备份?

Filestore 备份是指文件共享的副本,其中包含在创建备份时的文件共享的所有文件数据和元数据。

创建文件共享的备份后,您可以修改或删除原始文件共享,而不会影响备份。

您可以使用备份将文件共享恢复到新的 Filestore 实例,或者对于基本层级实例,恢复到现有文件共享的源。

备份是创建时保留在您所指定区域内的区域级资源。您可以在 Filestore 实例所在的同一区域内创建备份,也可以在另一个区域创建备份,以帮助降低数据丢失的风险。

备份可在全球范围内寻址,且可用于将文件共享恢复到任何区域,但不能跨项目进行共享。

支持的层级

下表显示了支持备份、加密和相关 restore 操作的 Filestore 服务层级

层级 备份
支持
restore
新实例
restore恢复到
现有实例
restore
源实例
CMEK
支持
基本 HDD
基本 SSD
可用区级
区域
企业

价格

跨区域网络流量会产生网络传输费用。如需了解详情,请参阅价格页面。

创建备份

您创建的第一个备份是文件共享中所有文件数据和元数据的完整副本。每个后续备份都会复制自上次备份以来对数据所做的任何后续更改。

备份链

与同一实例、区域和 CMEK(如果使用)相关联的一组备份称为备份链

备份链位于单个 Cloud Storage 存储桶和区域中,并且可以位于用于存储源实例的区域之外。

所有服务层级都支持多个备份链,让您能够将实例的备份存储在多个区域中。

每次创建备份时,系统都会扫描之前的备份,以查找差分更改和增量更改:

  • 差异更改:包括对共享中的文件所做的更改,例如文件编辑、添加或删除。

  • 增量更改:包括对存储桶(备份数据所在的存储桶)中的存储空间的更改。这可能包括对链中之前引用的数据进行去重。

每次将备份保存到同一备份链时,系统都会扫描之前的备份,以查找差异和增量更改。在这种情况下,不需要完整副本。

不过,将实例的数据存储到多个备份链意味着您要将备份保存并存储到交替的位置。

每次您在备用位置创建新备份时,系统都会再次生成备份的完整副本。在备份链之间交替时,备份 create 操作的延迟时间会更长。

先前备份中包含的未更改数据会在较新的备份中引用,但不会复制到其中。如果删除较早的备份,则其唯一数据将复制到下一个最近的备份,并且所有内部数据引用都将自动更新。

在内部,系统会使用快照跟踪备份链的历史记录,而快照会占用源实例上的容量。

创建备份是瞬时操作,但您需要等待一段时间(与复制的时间量成正比)才能使用备份。在此期间,备份会经历三种状态:

状态 时长 说明
正在创建 几秒钟 正在捕获文件共享的当前状态。对文件共享数据的任何新更改不一定都会包括在备份中。在启动备份之前,备份中会包含由实例确认的稳定写入。
正在完成 取决于大小 将数据上传到备份。对文件共享数据的任何新更改都不会包括在备份中。
准备就绪 直到删除备份为止 备份可以随时使用。

创建后,基本级备份会自动压缩以降低费用。在为可用区级、区域级和企业级服务层级中的实例创建备份时,实例性能可能会下降。创建备份不会影响基本层级实例的可用性或性能。

处理冗余数据

默认情况下,备份采用增量方式,这可避免系统向您收取冗余数据的费用以及最大限度地减少存储空间的用量。为了确保底层更改历史记录的可靠性,备份可能偶尔会捕获实例的完整副本。

如需了解详情,请参阅比较快照和备份

备份删除

备份是项目级资源,而不是源实例的子资源,因此需要单独的存储空间。因此,备份的生命周期不会与源实例的生命周期相关联。删除源不会删除其关联的备份。如果您想删除备份,必须明确对备份(而非实例)执行删除操作。

请务必删除所有不需要的备份。如果源实例被删除,所有剩余的备份将继续产生费用。

删除备份是一项永久性操作,无法撤消。 如果备份删除失败,状态会被标记为 invalid。在这种情况下,请重试 delete 操作。

备份一致性

Filestore 备份具有 NFSv3 和 NFSv4.1 一致性语义。启动备份之前,Filestore 实例确认已写入到稳定的存储空间中或后跟已确认的 COMMIT 的所有写入将会包括在备份中。如需了解详情,请参阅 NFSv3 RFC-1813 第 3.3.7 节关于支持的文件系统协议

常见使用场景

以下部分介绍了备份的常见应用场景。

备份数据用于灾难恢复

假设您的 Filestore 实例位于 us-west1-c,并且您希望保护自己的数据免受影响此区域的灾难的影响。您可以安排作业以定期在远程地区(例如 us- east1)创建此实例的备份。如果 us-west1-c 发生灾难,您可以使用之前的任何备份在其他位置创建新实例。

备份数据以防发生意外更改

如果您希望保护 Filestore 数据免遭意外更改,则可以安排定期创建实例备份的作业。如果数据丢失,您可以浏览备份列表以找出拥有所需文件版本的备份。然后,您可以根据备份创建一个新的 Filestore 实例,将其装载到原始实例所在的客户端,并将文件复制过来。

在复制文件之前,您可以在两个装载点使用 Linux diff 命令来检查原始实例上的数据与根据备份恢复的数据之间的差异。恢复数据后,您可以删除已恢复的实例,并创建新备份以保留数据的当前状态,供日后使用。

此外,您也可以执行就地恢复,即备份数据直接恢复到原始 Filestore 实例,从而将实例中的所有数据替换为备份中的数据。建议在执行就地恢复之前创建最新数据的备份,因为任何未备份的数据都将丢失。

创建克隆以用于开发和测试

假设您在提供生产流量的 Filestore 实例上设置了数据库。如果您想使用数据库作为输入运行测试,则可以通过生产实例的备份创建新的 Filestore 实例用于测试。这样,测试使用就不会干扰生产。

同样,您可以使用备份进行离线分析和调查,而不会影响生产。

数据迁移

创建 Filestore 实例后,您无法更改其位置或服务层级。如需将数据迁移到另一个区域,则可以创建数据备份,然后使用该备份创建新的 Filestore 实例,或者将备份恢复到现有实例。

功能限制

Filestore 备份已正式发布 (GA),适用于所有服务层级

Filestore 备份无法与 Filestore 多共享功能结合使用。

以下部分详细介绍了与性能、存储空间、容量、加密和其他主题相关的其他功能限制。

性能

  • 对于利用率较高的实例,在上传备份时,性能可能会降低多达 15%。基本层级实例的性能不受备份 create 操作的影响。

  • 将实例的数据存储到多个备份链确实会影响备份性能。在备份链之间交替时,备份 create 操作的延迟时间会更长。

  • 实例操作(例如实例 restore 或实例 delete)可能会延迟,直到备份 create 操作完成。

  • 在某些情况下,delete 操作可能需要长达 24 小时才能完成。

操作并发

  • 与同一来源实例关联的备份 delete 操作必须一次执行一个。

  • 不支持备份链中的批量备份 delete 操作。在 delete 操作处于待处理状态时,同一备份链中的任何新 delete 操作都会返回 RESOURCE_EXHAUSTED 错误。无论源实例是否已被删除,都是如此。如果源实例已被删除,您会收到 FAILED_PRECONDITION 错误。

    当备份引用不同的源实例时,Filestore 支持并发备份 delete 操作。

    例如,标记为 Source1 的实例在 Backup1Backup2 中引用了备份数据。Source2 具有在 Backup3Backup4 中引用的备份数据。Backup1Backup2 无法并行删除,但 Backup2Backup3 可以。

  • 在同一备份链中启动的备份 create 和备份 delete 操作可以同时运行。如果您已开始创建新备份,则必须等到该操作完成后才能删除最新的现有备份。这是因为,最新备份包含成功完成备份 create 操作所需的最关键数据。如果您尝试删除最新备份,则会收到 FAILED_PRECONDITION 错误。

    例如,Source1 的备份链由 Backup1Backup2 组成。当您开始对 Backup3 执行 create 操作时,在 create 操作完成之前,您无法删除 Backup2

  • 如需详细了解操作速率限制,请参阅备份的操作速率限制

存储

  • 您可以将基本层级实例的备份恢复为同一服务层级的源实例、已存在的实例或新实例。如果您选择新实例,则无论源实例的层级如何,您都可以在基本 HDD 实例和基本 SSD 实例之间进行选择。

  • 您无法将可用区级、区域级和企业级实例恢复为源实例或现有实例,而只能恢复为新实例。新实例层级不必与源实例层级一致。例如,您可以将区域级实例的备份恢复为可用区级实例。新实例的预配容量必须等于或大于源实例的预配容量。

容量

  • 为可用区级、区域级和企业级实例创建的备份可能会消耗实例容量。此容量因自创建备份以来对数据所做的更改范围而异。更具体地说,创建备份时,Filestore 会创建文件系统的内部快照,该快照也会占用一部分可用的实例容量。

  • 快照大小与自上次创建备份以来对共享中的数据所做的更改范围有关。此快照会一直存在,直到创建并上传下一个后续备份。

  • 备份引用的所有数据都会以捕获时的状态保留,并继续占用文件系统的容量。因此,举例来说,如果您从已装载的文件系统中删除数据,该操作本身不会释放容量。相反,若要执行此操作,您需要在删除或覆盖大量数据后创建新备份。

    如需详细了解差分更改和增量更改及其处理方式,请参阅创建备份

  • 为了确保工作负载有足够的容量,请考虑应用以下方法之一:

    • 对于数据变化频繁或变化率较高的大型工作负载,请增加实例容量。

    • 频繁进行备份。如果上次备份已过时,内部快照可能会累积更多更改,并消耗更多实例容量。

加密

使用 CMEK 加密备份链时,存在以下限制:

  • 整个备份链都使用相同的 CMEK 进行加密。

  • 使用 CMEK 创建备份时,CMEK 必须与目标备份位于同一区域。

  • 如果将备份链存储在与源实例不同的区域中,您可能需要应用单独的密钥,一个用于源,一个用于备份链。

    • 所有服务层级都支持多个备份链,或支持将实例的备份存储在多个区域中。如果选择使用 CMEK 进行加密,CMEK 密钥必须与它加密的资源位于同一区域。如果您将备份存储在与源不同的区域,并且 CMEK 不是多区域密钥,则必须使用单独的 CMEK 密钥。如需了解详情,请参阅 CMEK 限制选择最佳 CMEK 位置
  • 单个 CMEK 会应用于存储备份链的 Cloud Storage 存储桶,并且无法组合或替换。

  • 基本层级备份不支持 CMEK。

如需了解详情,请参阅对备份链的 CMEK 支持

协议

  • 恢复备份时,新实例必须使用与源实例相同的协议

最佳做法

以下各部分介绍了建议的最佳实践。

准备文件共享以实现最佳备份一致性

备份的质量取决于您的应用通过在大量写入工作负载期间创建的备份恢复数据的能力。在大多数情况下,即使您的应用向文件共享写入数据,您也可以创建具有良好一致性的备份。但是,如果您的应用要求严格的一致性,建议您执行以下一项或多项操作:

  • 使用 sync 装载。如需了解详情,请参阅 nfs(5) 中的“同步装载选项”部分。或者,您也可以使用 O_DIRECT|O_SYNC 标志打开文件。如需了解详情,请参阅 open(2)
  • 暂停将数据写入文件共享的应用或操作系统进程,使其在启动备份之前清空对文件共享的更改。如需了解详情,请参阅 fsync(2)
  • 如果您的应用需要在多个共享之间保持一致性,请在写入所有文件共享的所有实例上暂停所有应用,并在恢复应用之前为所有文件共享创建备份。
  • 如果需要保持应用级层一致性,请在创建备份之前先停止应用并卸载文件共享。

将现有备份用作新备份的基准,以缩短创建备份的时间

区域内的现有文件共享备份将用作创建新文件共享备份的基准,从而缩短备份创建时间。因此,我们建议您执行以下操作:

  • 在删除先前的文件共享备份之前,先创建新的文件共享备份。

  • 等待新备份处于 Ready 状态,然后再创建相同文件共享的后续备份。

将备份任务安排在非高峰时段运行,以缩短创建备份的时间

在非高峰时段创建备份可以缩短创建备份的时间。如果您要安排定期备份文件共享,建议在非高峰时段安排备份。

在 Filestore 实例所在地区中创建备份的高峰时段是每个工作日的结束时和午夜。建议您在清晨或工作日创建备份。

在不同的 Filestore 实例上整理数据,以最大限度地提高效率

文件共享中的数据越多,备份越大,费用也就越高。如果仅备份您需要备份的数据,我们建议您在不同的文件共享上整理数据,即:

  • 在不同的文件共享上存储写入模式不同或备份要求不同的重要数据。
  • 将类似的数据保留在一个文件共享中,从而减少您需要创建的备份数量。

配额

对于基本 SSD 和基本 HDD 服务层级,每个区域的备份数量存在配额限制。

备份配额限制不适用于可用区级、区域级和企业服务层级。

如需了解详情,请参阅服务层级和配额

Filestore 备份使用入门

如需开始使用此功能,请参阅备份数据以进行灾难恢复

后续步骤