永久性磁盘快照最佳做法


您可以随时创建永久性磁盘快照,但如果使用以下最佳做法,则可以更快速地创建快照,并且可靠性更高。

准备工作

准备一致的快照

如果您在应用运行时创建了永久性磁盘的快照,则快照可能无法捕获从内存传输到磁盘的待处理写入。由于这些不一致,快照可能不会在您捕获快照时反映应用的确切状态。在此场景中,快照被视为具有崩溃一致,因为它会捕获应用的状态,就好像机器截取快照时发生崩溃。

或者,您也可以暂停应用,这样所有应用事务都会完成,并且系统可在捕获快照前清空所有从内存写入到磁盘的操作。在这种情况下,快照被视为应用一致

创建崩溃一致快照

截取永久性磁盘的快照时,您无需执行任何额外步骤即可使快照崩溃。具体来说,您无需暂停工作负载。

如果您的工作负载无法容忍临时暂停,请考虑以下创建崩溃一致快照的流程:

  1. 在应用运行时,拍摄快照,因为部分应用数据不一致。
  2. 验证您可以从快照恢复工作负载到可接受的应用状态。
  3. 根据上一步,保留或删除快照。

使用崩溃一致快照可能需要重放文件系统和应用级日志,然后才能使用。因此,快照的质量取决于应用快速从崩溃一致状态恢复为服务的能力。

创建应用一致快照

  • Windows Server 用户:对于挂接到 Windows Server 实例的永久性磁盘,请使用 VSS 快照
  • Linux 用户:如需为挂接到 Linux 实例的磁盘快照实现应用一致,请创建快照前和快照后 Shell 脚本,以便准备好系统以实现应用一致性。然后创建一个启用了 guest-flush 选项的快照。这会在捕获快照之前和之后运行快照前和快照后脚本。如需了解相关说明,请参阅创建 Linux 应用一致性快照

手动创建应用一致快照

在某些情况下,您可能需要手动暂停应用才能实现一致的应用快照。

例如,如果需要多个永久性磁盘之间的应用一致,请使用此选项。在这种情况下,您必须冻结每个磁盘上的所有文件系统,并完成这些磁盘的所有快照创建工作,然后才能继续运行您的应用。

您无需停止虚拟机实例。例如,应用暂停可能涉及冻结和卸载文件系统。手动暂停应用后,仅当快照资源达到 UPLOADING 状态后,再恢复工作负载。

请求快照时,请调用 globalOperations.get 方法来检查操作的状态。下表显示了快照操作的状态与快照资源状态之间的关系。

操作状态 快照资源状态
PENDING 尚无快照资源。
RUNNING CREATINGUPLOADING

CREATING:创建快照尚未完成。
UPLOADING:已创建快照,但尚未保存到 Cloud Storage。
DONE FAILEDREADY

快照频率限制

通过永久性磁盘创建快照

您最多可以每 10 分钟截取一次磁盘快照。如果您想要发出大量截取磁盘快照的请求,您可以在 60 分钟内发出最多 6 个请求。

如果超出限制,则操作将失败并返回以下错误:

"code": "RESOURCE_OPERATION_RATE_EXCEEDED",
"message": "Operation rate exceeded for resource 'projects/project-id/zones/zone-id/disks/disk-name'. Too frequent operations from the source resource."

此限制适用于以下操作:

以下限制不适用于以下操作:

最佳做法是,每小时为磁盘创建一个快照。请避免超出此频率创建快照。实现此目的的最简单方法是设置快照时间表

通过快照创建新的区域永久性磁盘

可根据每个目标区域通过给定快照创建新的区域永久性磁盘(每隔十分钟最多创建一次)。目标区域是指通过快照创建的新永久性磁盘的存储位置。Google 不保证您将能够以快于该频率的频率通过快照创建磁盘,但如果您尚未在过去一小时内通过快照创建任何磁盘,则能够更频繁地创建磁盘。

请注意,就此频率限制而言,同一永久性磁盘的多个快照被视为不同的快照。

如果超出限制,则操作将失败并返回以下错误:

"code": "RESOURCE_OPERATION_RATE_EXCEEDED",
"message": "Operation rate exceeded for resource 'projects/project-id/zones/zone-id/disks/disk-name'. Too frequent operations from the source resource."

此限制适用于以下操作:

以下限制不适用于以下操作:

如需通过快照创建多个磁盘,请使用快照创建映像,然后通过该映像创建磁盘:

  1. 通过快照创建映像
  2. 通过映像创建永久性磁盘。在 Google Cloud Console 中,选择映像作为磁盘来源类型。如果使用 gcloud 工具,则使用 image 标志。如果使用 API,则使用 sourceImage 参数。

使用现有快照作为后续快照的基准

如果您有某个永久性磁盘的现有快照,则系统会自动将其作为您为同一个磁盘创建的任何后续快照的基准。

  • 先为某个永久性磁盘创建一个新的快照,然后再删除该磁盘之前的快照。如果系统能够使用先前的快照并且只读取永久性磁盘中新增或更改的数据,则可以更快地创建新的快照。
  • 等待新的快照创建完毕,然后再为同一个永久性磁盘创建后续快照。如果您为同一个永久性磁盘同时运行两个快照创建任务,那么这两个任务都会从相同的基准开始做完全重复的工作。如果等待新的快照创建完成,则任何后续快照创建任务都将运行得更快,因为它们只需要获取自上次快照创建完成以来发生了更改的数据。

将快照创建任务安排在非高峰时段运行

如果您要为永久性磁盘安排定期快照创建任务,则可以尽量在非高峰时段创建快照,以减少完成每个快照所需的时间。

  • 将自动快照创建任务安排在您的永久性磁盘所在地区的工作日白天运行。快照创建活动通常在工作日结束时达到峰值。
  • 将自动快照创建任务安排在您的永久性磁盘所在地区的早晨运行,而不是在午夜零点前后的时间。快照创建活动通常在午夜时分达到峰值。

在单独的永久性磁盘上存储您的数据

如果您为某个永久性磁盘创建快照,则存储在磁盘上的任何数据都将包含在该快照中。数据量越大,创建的快照就会越大,费用会更多,创建时间也会更长。如需确保只为您需要的数据创建快照,请将您的数据存储在单独的永久性磁盘上。

  • 将关键数据存储在辅助永久性磁盘(而不是启动磁盘)上。这样您就可以仅在必要时或以较低的频率为启动磁盘创建快照。
  • 如果您确实要为启动磁盘创建快照,请将交换分区、页面文件、缓存文件和非关键日志存储在一个单独的永久性磁盘上。这些文件和分区经常发生更改,快照创建过程可能会将它们标识为必须包含在增量快照中的已更改数据。
  • 将类似的数据集中存储在一个永久性磁盘上,从而减少需要创建的快照数量。将操作系统和易失性数据与要创建快照的数据分开,但不需要像在真实机器上那样将关键数据分散存储在多个永久性磁盘上。一个大容量永久性磁盘的性能与总容量大小相等的多个较小的永久性磁盘是相同的。

在永久性磁盘上启用 discard 选项或运行 fstrim

在 Linux 实例上,如果您之前在格式化和装载永久性磁盘时未使用磁盘选项,请在创建快照之前先在实例上运行 fstrim 命令。 该命令会移除文件系统不再需要的磁盘块,以便系统能够更快速地创建快照并且快照的大小也更小。如需了解如何在永久性磁盘上配置舍弃选项,请参阅格式化和装载永久性磁盘

为频繁使用的快照创建映像

如果您需要在同一地区反复使用快照来创建永久性磁盘,则使用快照一次并为其创建映像可以节省网络费用。存储该映像并使用它创建磁盘,然后启动虚拟机实例。有关说明,请参阅创建自定义映像

最佳做法是,每小时为磁盘创建一个快照。请避免超出此频率创建快照。实现此目的的最简单方法是设置快照时间表

其他最佳做法

  • 使用 ext4日志文件系统可以降低数据已缓存但实际上并未写入永久性磁盘的风险。
  • 定期为数据创建快照,能够最大程度地减少因意外故障导致的数据丢失。

后续步骤