本页面介绍什么是备份、备份的工作原理、一些常见使用场景以及创建和使用备份的最佳做法。如需了解如何创建和管理备份以及如何从备份中恢复 Filestore 实例,请参阅备份数据以用于灾难恢复。
什么是备份?
Filestore 备份是文件共享的副本,其中包含自创建备份的时间点开始的所有文件数据和文件共享的元数据。
创建文件共享的备份后,您可以修改或删除原始文件共享,而不会影响备份。
您可以使用备份将文件共享恢复到新的 Filestore 实例;对于基本层级实例,您可以使用备份恢复到源或现有的文件共享。
备份是创建时保留在您指定的区域内的区域级资源。您可以在 Filestore 实例所在的同一区域中创建备份,也可以在其他区域中创建备份,以帮助降低数据丢失的风险。
备份可全局寻址,可用于将文件共享恢复到任何区域,但不能跨项目共享。
创建备份
您创建的第一个备份是文件共享中所有文件数据和元数据的完整副本。每次后续备份都会复制自上次备份以来对数据所做的任何连续更改。
与同一实例、区域和 CMEK(如有使用)关联的一组备份称为备份链。
备份链位于单个 Cloud Storage 存储桶和区域中,可以位于用于存储源实例的区域之外。
所有服务层级都支持多个备份链,可让您将实例的备份存储在多个区域中。
每次创建备份时,系统都会对上一个备份进行差分更改和增量更改扫描:
差异更改:包括对共享中文件所做的更改,例如文件编辑、添加或删除。
增量更改:包括备份数据所在的存储桶中存储空间的变化。这可能包括对之前在链中引用的数据进行去重。
每次将备份保存到同一备份链时,系统会扫描之前的备份,以查找差分和增量更改。在这种情况下,不需要完整副本。
但是,将实例的数据存储在多个备份链中,意味着您要将备份保存并存储到交替位置。
每次在交替位置创建新备份时,系统都会再次生成备份的完整副本。在备份链之间交替时,备份 create
操作的延迟时间预计会更长。
先前备份中包含的未更改数据会在较新的备份中引用,但不会复制到其中。如果删除较早的备份,则其唯一数据将复制到下一个最近的备份,并且所有内部数据引用都将自动更新。
创建备份是瞬时操作,但您需要等待一段时间(与复制的时间量成正比)才能使用备份。在此期间,备份会经历三种状态:
状态 | 时长 | 说明 |
---|---|---|
正在创建 | 几秒钟 | 正在捕获文件共享的当前状态。对文件共享数据的任何新更改不一定都会包括在备份中。在启动备份之前,备份中会包含由实例确认的稳定写入。 |
正在完成 | 取决于大小 | 将数据上传到备份。对文件共享数据的任何新更改都不会包括在备份中。 |
准备就绪 | 直到删除备份为止 | 备份可以随时使用。 |
创建后,系统会自动压缩基本层级备份以降低费用。为可用区级、区域级和企业服务层级中的实例创建备份时,实例性能可能会降低。创建备份不会影响基本层级实例的可用性或性能。
删除备份
备份是项目级资源(不是源实例的子资源),并且需要有自己的单独存储空间。因此,备份的生命周期与源实例的生命周期无关。删除来源不会删除其关联的备份。如果要删除备份,则必须对备份(而不是实例)明确执行删除操作。
请务必删除所有不需要的备份。如果源实例被删除,任何剩余备份都会继续产生费用。
备份一经删除便无法恢复。
备份一致性
Filestore 备份具有 NFSv3 一致性语义。启动备份之前,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 实例时,无论源实例的层级如何,您都可以在基本 HDD 和基本 SSD 层级之间进行选择。
功能限制
Filestore 备份面向所有服务层级正式发布 (GA)。
存在以下限制:
Filestore 备份不能与 Filestore 多共享功能结合使用。
价格生效后,您将需要支付相关费用。
用户应创建新的备份或备份来替换预览版中创建的备份。在预览版中创建的备份可能会被删除。在预览版中创建的备份反映的是创建时的可用功能行为。新功能发布时,现有备份不会更新。
以下各部分详细介绍了与性能、存储空间、容量和加密相关的其他功能限制:
性能
通过多个硬链接对同一文件进行大量更改(例如数万个或数十万个),可能会影响性能。
对于利用率较高的实例,在上传备份时,性能可能会降低多达 15%。基本层级实例的性能不受备份
create
操作的影响。将实例的数据存储在多个备份链中确实会影响备份性能。在备份链之间切换时,备份
create
操作的延迟时间预计会更长。实例操作(例如实例
restore
或实例delete
)可能会延迟,直到备份create
操作完成。在某些情况下,
delete
操作最长可能需要 24 小时才能完成。
操作并发数
与同一源实例关联的备份
delete
操作必须一次执行一个。不支持在一个备份链内执行批量备份
delete
操作。当delete
操作待处理时,同一备份链中的所有新delete
操作都会返回RESOURCE_EXHAUSTED
错误。无论源实例是否已被删除,都会如此。如果源实例已被删除,用户也会收到类似的
FAILED_PRECONDITION
错误。此限制适用于除基本 SSD 和基本 HDD 之外的所有服务层级。
请注意,当备份引用单独的源实例时,Filestore 支持并发备份
delete
操作。例如,名为
Source1
的实例在Backup1
和Backup2
中引用了备份数据。Source2
在Backup3
和Backup4
中引用了备份数据。您不能同时删除Backup1
和Backup2
,但可以同时删除Backup2
和Backup3
。
如需了解详情,请参阅备份的速率限制。
在同一备份链内启动的备份
create
和备份delete
操作可以并发运行。但是,在删除最新备份时,用户无法完成备份create
操作。- 如果用户在删除最近的备份时尝试创建实例的新备份,则会收到
FAILED_PRECONDITION
错误。例如,如果Source1
的备份链由Backup1
和Backup2
组成,并且用户开始针对Backup3
的create
操作,则在create
操作完成之前,他们无法删除Backup2
。这是因为最近的备份包含成功完成备份create
操作所需的最关键数据。
- 如果用户在删除最近的备份时尝试创建实例的新备份,则会收到
如需详细了解操作速率限制,请参阅备份的操作速率限制。
存储
可用区级、区域级和企业级实例不支持将
restore
操作备份到源实例或现有实例。如果要恢复其中任何服务层级中的实例的备份,则必须创建新实例。新实例必须与源实例的服务层级和容量范围相匹配。例如,如果来源是使用容量范围较低的可用区级服务层级创建的,则新实例必须使用相同的服务层级和容量范围。
如果您需要使用旧版大规模 SSD 服务层级创建实例,则必须直接通过 Filestore API 运行操作。
如果您需要使用旧版企业服务层级创建实例,可以直接通过 Filestore API 或从 Google Cloud 中的恢复备份 > 新建实例页面运行操作。
例如,如果要创建实例容量为 10 TiB 的区域级资源,您必须使用旧版企业服务层级。
备份操作(例如
restore
、edit
或delete
)可能不适用于预览版中创建的部分备份。一旦将 RestoreInstance 操作应用于区域或企业实例,您将无法创建与此操作之前的快照同名的快照。
在删除备份或 Snapshot 删除过程中尝试通过备份恢复实例将失败。
如果删除备份失败,则状态会被标记为
invalid
。在此类情况下,您需要重试delete
操作。
容量
每个备份都会占用实例容量。此容量因自上次创建备份以来数据更改范围而异。
更具体地说,创建备份时,Filestore 会创建文件系统的内部快照,该快照也会占用一部分可用的实例容量。
快照大小还是相对于自上次创建备份以来对共享中的数据所作更改的范围而言。此快照将继续存在,直到下一次创建和上传备份为止。
备份引用的所有数据都会保持在捕获时的状态,并且会继续占用文件系统的容量。例如,如果您要从装载的文件系统中删除数据,该操作本身不会释放容量。为此,您需要在删除或覆盖大量数据后创建新的备份。
如需详细了解差分和增量更改及其处理方式,请参阅创建备份。
如需预测您的工作负载会有足够的容量,请考虑采用以下其中一种处理方式:
- 为数据变更频繁或变化率较高的工作负载增加实例容量。
加密
使用 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 备份使用入门
如需开始使用该功能,请参阅备份数据以用于灾难恢复。
后续步骤
- 了解如何备份和恢复文件共享。
- 了解如何使用 Cloud Scheduler 安排备份。
- 了解 Google Cloud 地区和区域。
- 了解备份pricing。