使用 QEMU 客体代理在镜像快照期间使文件系统静默¶
https://blueprints.launchpad.net/nova/+spec/quiesced-image-snapshots-with-qemu-guest-agent
当在 kvm 实例中安装 QEMU 客体代理时,我们可以通过 libvirt 在快照期间请求实例冻结文件系统,以使快照保持一致。
问题描述¶
目前,我们需要在快照活动实例的镜像之前手动使文件系统静默 (fsfreeze),以创建一致的备份。当启用 QEMU 客体代理时,这应该被自动执行。
(在 cinder 的 create-snapshot API 上的静默包含在另一个提案中 [1])
用例¶
有了此功能,用户可以在实例运行时创建具有一致文件系统状态的快照镜像(快照镜像启动时将不会运行 fsck)。
这将很有用,例如
在安装或升级软件之前快速备份。
自动每天夜间备份镜像。
项目优先级¶
无
提议的变更¶
当实例中启用 QEMU 客体代理时,Nova-compute libvirt 驱动程序将在拍摄镜像快照之前请求代理冻结文件系统(如果安装了 fsfreeze-hook,则包括应用程序)。
对于从卷启动的实例,Nova 将在静默实例后为每个附加的卷调用 Cinder 的 snapshot-create API。为了避免双重静默,Nova 应该告诉 Cinder 在快照时不静默实例。为此,‘quiesce=True|False’ 参数将被添加到 Cinder 的 snapshot-create API 中。
拍摄快照后,驱动程序将请求代理解冻文件系统。
此功能的先决条件是
超visor 是 ‘qemu’ 或 ‘kvm’
hypervisor 中安装了 libvirt >= 1.2.5(具有 fsFreeze/fsThaw API)
在镜像元数据上设置了 ‘hw_qemu_guest_agent=yes’ 属性和 ‘hw_require_fsfreeze=yes’ 属性,并且 QEMU 客体代理已安装并在实例中启用
即使满足这些条件,如果静默失败(例如,代理未响应),快照也可能因异常而失败,以避免获取不一致的快照。
备选方案¶
使用 libvirt 的 domain.createSnapshot API 和 VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE 标志重写 nova 的快照,尽管这将改变磁盘镜像的当前命名方案。此外,它无法用于实现 cinder 卷的实时快照。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
在拍摄快照时,来自实例的磁盘写入将被阻止。
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
tsekiyama
工作项¶
在可用时实现快照期间的自动静默。
添加一个使用 libvirt >= 1.2.5 的静默快照场景测试(Fedora 实验队列将是一个很好的测试起点)。
依赖项¶
无
测试¶
带有 qemu-guest-agent 镜像的实时快照应添加到 tempest。请注意,它需要一个具有 libvirt >= 1.2.5 的环境,因此它将是启用 virt-preview 仓库的 Fedora 实验队列作业。
文档影响¶
需要在操作指南中记录如何使用此功能(当前建议您手动使用 fsfreeze 工具)。