本文介绍如何使用 Azure 备份为 Azure 部署的 Linux 虚拟机(VM)创建应用程序一致性备份。 其中介绍了如何配置脚本框架和故障排除。
当 Azure 备份拍摄 VM 的快照时,应用程序一致性可确保应用程序在 VM 还原后正确启动。 若要实现此行为,请使用 Linux 规范和后标框架,该框架支持使用 Azure 资源管理器部署的 Linux VM。 这些脚本不适用于使用 System Center Service Manager 或 Windows 部署的 VM。
框架的工作原理是什么?
框架在创建 VM 快照时提供运行自定义前置脚本和后置脚本的选项。 在创建虚拟机快照之前运行预处理脚本。 VM 快照创建后,立即运行后脚本。 在创建 VM 快照时,前置脚本和后置脚本提供了灵活性,使您能够控制应用程序和环境。
预执行脚本调用本地应用程序 API,以控制 I/O 活动并将内存中的内容清除到磁盘。 这些操作可确保快照具有应用一致性。 Postscripts 使用本机应用程序的 API 解冻 I/O,使应用程序能够在 VM 快照后恢复正常作业。
为 Azure Linux 虚拟机配置预脚本和后脚本
若要配置前置脚本和后置脚本,请执行以下步骤:
以根用户身份登录到要备份的 Linux VM。
从 GitHub 下载 VMSnapshotScriptPluginConfig.json ,并将其复制到要备份的所有 VM 的 /etc/azure 文件夹中。 如果 /etc/azure 文件夹不存在,请创建它。
将前置脚本和后置脚本复制到您计划备份的所有 VM 上的应用程序中。 可以将脚本复制到 VM 上的任意位置。 请务必更新 VMSnapshotScriptPluginConfig.json 文件中脚本文件的完整路径。
若要使用以下文件,请确保你具有相应的权限:
- VMSnapshotScriptPluginConfig.json:权限为 600。 例如,只有根用户才应具有对此文件的读取和写入权限,并且任何用户都不应具有执行权限。
- 规范文件:权限为 700。 例如,只有根用户才应具有对此文件的读取、写入和执行权限。 该文件应为 shell 脚本,但从理论上讲,此脚本可以在内部生成或引用其他脚本(如 Python 脚本)。
- 后标:权限为 700。 例如,只有根用户才应具有对此文件的读取、写入和执行权限。 该文件应为 shell 脚本,但从理论上讲,此脚本可以在内部生成或引用其他脚本(如 Python 脚本)。
重要
该框架为用户提供了众多权力。 保护框架,并确保只有根用户有权访问关键 JSON 和脚本文件。
如果不符合要求,脚本无法运行,这会导致文件系统崩溃和备份不一致。
按如下所述配置 VMSnapshotScriptPluginConfig.json:
-
pluginName
:将此字段保留原样,或者脚本可能无法按预期工作。 -
preScriptLocation
:提供要备份的 VM 上 prescript 的完整路径。 -
postScriptLocation
:提供要备份的 VM 上 postscript 的完整路径。 -
preScriptParams
:提供必须传递给规范的可选参数。 所有参数都必须用引号表示。 如果使用多个参数,请使用逗号分隔参数。 -
postScriptParams
:提供必须传递给 postscript 的可选参数。 所有参数都必须用引号表示。 如果使用多个参数,请使用逗号分隔参数。 -
preScriptNoOfRetries
:设置发生错误时应重试前置脚本的次数,然后再终止。 零表示只有一次尝试,如果没有故障,则不重试。 -
postScriptNoOfRetries
:设置在终止前发生错误时应重试 postscript 的次数。 零表示只有一次尝试,如果没有故障,则不重试。 -
timeoutInSeconds
:为前脚本和后脚本分别指定单个超时(最大值为 1800)。 -
continueBackupOnFailure
:如果希望 Azure 备份在创建前脚本或创建后脚本失败时回退到文件系统一致性备份/崩溃一致性备份,请将此值设置为 true。 如果脚本失败,将此值设置为 false 会失败备份。 (如果有一个单磁盘 VM 无论此设置如何,都回退到崩溃一致性备份,这是一个例外。)当continueBackupOnFailure
的值设置为false时,如果备份失败,服务将根据重试逻辑(在规定的尝试次数内)再次尝试备份操作。 -
fsFreezeEnabled
:指定在创建 VM 快照时是否应调用 Linuxfsfreeze
,以确保文件系统一致性。 建议将此设置设置为 true ,除非应用程序依赖于禁用fsfreeze
。 -
ScriptsExecutionPollTimeSeconds
:设置扩展在每次轮询到脚本执行之前必须休眠的时间。 例如,如果值为 2,扩展会检查前脚本或后脚本是否每 2 秒完成一次执行。 可以采用的最小值和最大值分别为 1 和 5。 该值应严格为整数。
-
现在已配置脚本框架。 如果已配置 VM 备份,则下一个备份将调用脚本并触发应用程序一致性备份。 如果未配置 VM 备份,请按照将 Azure 虚拟机备份到恢复服务保管库中的步骤对其进行配置。
排查 Azure Linux VM 应用程序一致性备份错误
请确保在编写前置脚本和后置脚本时添加适当的日志记录。 查看脚本日志以修复任何脚本问题。 如果运行脚本时仍有问题,请参阅下表。
错误 | 错误消息 | 建议的措施 |
---|---|---|
Pre-ScriptExecutionFailed |
预脚本返回了错误,因此备份可能不具备应用一致性。 | 查看脚本的失败日志以解决此问题。 |
Post-ScriptExecutionFailed |
postscript 返回了可能影响应用程序状态的错误。 | 查看脚本的故障日志以解决问题,并检查应用程序状态。 |
Pre-ScriptNotFound |
在 VMSnapshotScriptPluginConfig.json 配置文件中指定的位置找不到该预设脚本。 | 确保配置文件中指定的路径中存在规范,以确保应用程序一致性备份。 |
Post-ScriptNotFound |
在 VMSnapshotScriptPluginConfig.json 配置文件中指定的位置找不到 postscript。 | 确保 postscript 存在于配置文件中指定的路径中,以确保应用程序一致性备份。 |
IncorrectPluginhostFile |
Pluginhost 附带VmSnapshotLinux 扩展名的文件已损坏,因此预处理和后处理无法运行,并且备份无法保持应用程序一致性。 |
卸载VmSnapshotLinux 扩展。 它会自动重新安装下一个备份来解决问题。 |
IncorrectJSONConfigFile |
VMSnapshotScriptPluginConfig.json 文件不正确,因此预脚本和后脚本无法运行,备份无法保持应用一致性。 | 从 GitHub 下载副本并再次对其进行配置。 |
InsufficientPermissionforPre-Script |
对于运行脚本,根用户应是文件的所有者。 该文件应具有 700 个权限。 (也就是说,只有所有者才应具有读取、写入和执行权限。 | 确保根用户是脚本文件的所有者,并且只有所有者具有读取、写入和执行权限。 |
InsufficientPermissionforPost-Script |
对于运行脚本,根用户应是文件的所有者。 该文件应具有 700 个权限。 (也就是说,只有所有者才应具有读取、写入和执行权限。 | 确保根用户是脚本文件的所有者,并且只有所有者具有读取、写入和执行权限。 |
Pre-ScriptTimeout |
用于应用程序一致性备份的脚本执行超时。 | 检查脚本并增加位于 /etc/azure 的 VMSnapshotScriptPluginConfig.json 文件中的超时。 |
Post-ScriptTimeout |
应用程序一致性备份的 postscript 的执行超时。 | 检查脚本并增加位于 /etc/azure 的 VMSnapshotScriptPluginConfig.json 文件中的超时。 |