本页面介绍什么是备份、备份的工作原理、一些常见使用场景以及创建和使用备份的最佳做法。如需了解如何创建和管理备份,以及如何通过备份恢复 Filestore 实例,请参阅备份数据用于灾难恢复。
什么是备份?
Filestore 备份是指文件共享的副本,其中包含在创建备份时的文件共享的所有文件数据和元数据。
创建文件共享的备份后,您可以修改或删除原始文件共享,而不会影响备份。
您可以使用备份将文件共享恢复到新的 Filestore 实例,对于基本层级实例,还可以恢复到源文件共享或现有文件共享。
备份是创建时保留在您所指定区域内的区域级资源。您可以在 Filestore 实例所在的同一区域内创建备份,也可以在另一个区域创建备份,以帮助降低数据丢失的风险。
备份可在全球范围内寻址,且可用于将文件共享恢复到任何区域,但不能跨项目进行共享。
跨地区传输网络流量需要支付网络传输费用。如需了解详情,请参阅价格页面。
创建备份
您创建的第一个备份是文件共享中所有文件数据和元数据的完整副本。每次后续备份都会复制自上次备份之后对数据所做的任何后续更改。
与同一实例、区域和 CMEK(如果使用)关联的一组备份称为备份链。
备份链位于单个 Cloud Storage 存储桶和区域中,并且可以位于用于存储源实例的区域之外。
所有服务层级都支持多个备份链,让您能够将实例的备份存储在多个区域中。
每次创建备份时,系统都会扫描上一个备份,以查找差分更改和增量更改:
差分更改:包括对共享内容中的文件所做的更改,例如文件修改、添加或删除。
增量更改:包括对存储备份数据的存储桶中的存储空间所做的更改。这可能包括删除链中之前引用的数据的重复项。
每次将备份保存到同一备份链时,系统都会扫描上一个备份,以查找差分更改和增量更改。在这种情况下,无需完整复制。
不过,将实例的数据存储到多个备份链意味着您将备份保存并存储到交替的位置。
每当您在新位置创建新的备份时,系统都会重新生成备份的完整副本。在备份链之间切换时,备份 create
操作的延迟时间可能会更长。
先前备份中包含的未更改数据会在较新的备份中引用,但不会复制到其中。如果删除较早的备份,则其唯一数据将复制到下一个最近的备份,并且所有内部数据引用都将自动更新。
在内部,系统使用快照跟踪备份链的历史记录,这会占用源实例上的容量。
创建备份是瞬时操作,但您需要等待一段时间(与复制的时间量成正比)才能使用备份。在此期间,备份会经历三种状态:
状态 | 时长 | 说明 |
---|---|---|
正在创建 | 几秒钟 | 正在捕获文件共享的当前状态。对文件共享数据的任何新更改不一定都会包括在备份中。在启动备份之前,备份中会包含由实例确认的稳定写入。 |
正在完成 | 取决于大小 | 将数据上传到备份。对文件共享数据的任何新更改都不会包括在备份中。 |
准备就绪 | 直到删除备份为止 | 备份可以随时使用。 |
创建后,基本层级备份会自动压缩以降低费用。为可用区级、区域级和企业级服务层级的实例创建备份时,实例性能可能会下降。创建备份不会影响基本层级实例的可用性或性能。
解决数据冗余问题
默认情况下,备份采用增量方式,以避免系统向您收取冗余数据的费用,并最大限度地减少存储空间的用量。为了确保底层更改历史记录的可靠性,备份可能偶尔会捕获实例的完整副本。
如需了解详情,请参阅比较快照和备份。
备份删除
备份是项目级资源,而不是源实例的子资源,并且需要有自己的单独存储空间。因此,备份的生命周期与源实例的生命周期无关。删除来源不会删除其关联的备份。如果您想删除备份,则必须对备份(而非实例)明确执行删除操作。
请务必删除所有不需要的备份。如果删除源实例,则所有剩余的备份仍会继续产生费用。
备份一经删除便无法恢复。
备份一致性
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 实例时,您可以在基本 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 中执行 Restore backup(恢复备份)> New instance(新建实例)页面运行操作。
例如,如果您要创建实例容量为 10 TiB 的区域级资源,则必须使用旧版企业服务层级。
备份操作(例如
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 地区和区域。
- 了解备份价格。