本页面介绍什么是备份、备份的工作原理、一些常见使用场景以及创建和使用备份的最佳做法。如需了解如何创建和管理备份,以及如何通过备份恢复 Filestore 实例,请参阅备份数据以进行灾难恢复。
什么是备份?
Filestore 备份是文件共享的副本,其中包含自创建备份以来的所有文件数据和文件共享元数据。
创建文件共享备份后,您可以修改或删除原始文件共享,而不会影响备份。
您可以使用备份将文件共享恢复到新的 Filestore 实例,对于基本层级实例,也可以将文件共享恢复到来源或现有文件共享。
备份是保留在您创建时指定的区域内的区域级资源。您可以在 Filestore 实例所在的区域或其他区域创建备份,以帮助降低数据丢失的风险。
备份可全局寻址,可用于将文件共享恢复到任何区域,但无法跨项目共享。
创建备份
您创建的第一个备份是文件共享中所有文件数据和元数据的完整副本。后续每次备份都会复制自上次备份以来对数据所做的任何后续更改。
与同一实例、区域和 CMEK(如果使用)关联的一组备份称为备份链。
备份链位于单个 Cloud Storage 存储桶和区域中,并且可以位于用于存储源实例的区域之外。
所有服务层级都支持多个备份链,让您可以在多个区域中存储实例的备份。
每次创建备份时,系统都会扫描先前的备份,检查是否存在差分更改和增量更改:
差异化更改:包括对共享中的文件所做的更改,例如文件修改、添加或删除。
增量更改:包括对备份数据所在存储桶中的存储空间的更改。这可能包括对之前在链中引用的数据进行去重。
每次将备份保存到同一备份链时,系统都会扫描先前的备份,以执行差分更改和增量更改。在这种情况下,不需要完整副本。
但是,将实例数据存储到多个备份链意味着您将保存备份并将其存储到交替位置。
每次为交替位置创建新备份时,都会再次生成备份的完整副本。交替使用备份链时,备份 create
操作的延迟时间预计较长。
先前备份中包含的未更改数据会在较新的备份中引用,但不会复制到其中。如果删除较早的备份,则其唯一数据将复制到下一个最近的备份,并且所有内部数据引用都将自动更新。
创建备份是瞬时操作,但您需要等待一段时间(与复制的时间量成正比)才能使用备份。在此期间,备份会经历三种状态:
状态 | 时长 | 说明 |
---|---|---|
正在创建 | 几秒钟 | 正在捕获文件共享的当前状态。对文件共享数据的任何新更改不一定都会包括在备份中。在启动备份之前,备份中会包含由实例确认的稳定写入。 |
正在完成 | 取决于大小 | 将数据上传到备份。对文件共享数据的任何新更改都不会包括在备份中。 |
准备就绪 | 直到删除备份为止 | 备份可以随时使用。 |
创建后,系统会自动压缩基本层级备份以降低费用。在为可用区级(以前为大规模 SSD)和企业服务层级中的实例创建备份时,实例性能可能会降低。创建备份不会影响基本层级实例的可用性或性能。
删除备份
备份是项目级资源,而不是源实例的子资源,并且需要有自己的单独存储空间。因此,备份的生命周期与源实例的生命周期无关。删除来源不会删除与其关联的备份。如果要删除备份,您必须对备份(而不是实例)明确执行删除操作。
请务必删除所有不需要的备份。如果来源实例被删除,所有剩余备份将继续产生费用。
备份内容一经删除便无法恢复。
备份一致性
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 备份不能与 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
操作。如果您要恢复任一服务层级中的实例的备份,则必须创建一个新实例。备份操作(例如
restore
、edit
或delete
)可能不适用于预览版中创建的部分备份。对企业实例应用 RestoreInstance 操作后,您将无法创建与此操作之前的快照名称相同的快照。
在删除备份或删除快照时,尝试使用备份恢复实例将失败。
如果备份删除失败,状态将被标记为
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。