使用 QEMU 客体代理在镜像快照期间使文件系统静默

https://blueprints.launchpad.net/nova/+spec/quiesced-image-snapshots-with-qemu-guest-agent

当在 kvm 实例中安装 QEMU 客体代理时,我们可以通过 libvirt 在快照期间请求实例冻结文件系统,以使快照保持一致。

问题描述

目前,我们需要在快照活动实例的镜像之前手动使文件系统静默 (fsfreeze),以创建一致的备份。当启用 QEMU 客体代理时,应该自动执行此操作。

提议的变更

当实例中启用 QEMU 客体代理时,Nova-compute libvirt 驱动程序将在拍摄镜像快照之前请求代理冻结文件系统(如果安装了 fsfreeze-hook,则包括应用程序)。拍摄快照后,驱动程序将请求代理解冻文件系统。

此功能的先决条件是

  1. 超visor 为 ‘qemu’ 或 ‘kvm’

  2. 在超visor 上安装了 libvirt >= 1.2.5(具有 fsFreeze/fsThaw API)

  3. 镜像元数据中的 ‘hw_qemu_guest_agent=yes’ 属性设置为 ‘yes’,并且 QEMU 客体代理已安装并启用在实例中

即使满足这些条件,如果静默失败(例如,代理未响应),快照也可能因异常而失败,以避免获取不一致的快照。

备选方案

使用 VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE 标志使用 libvirt 的 domain.reateSnapshot API 重写 nova 的快照,尽管这将改变当前磁盘镜像的命名方案。此外,它无法用于实现 cinder 卷的实时快照。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

在拍摄快照时,来自实例的磁盘写入将被阻止。

其他部署者影响

开发人员影响

实现

负责人

主要负责人

tsekiyama

工作项

在可用时实现快照期间的自动静默。现在代码已准备好进行审查:https://review.openstack.org/#/c/72038/

依赖项

测试

应将带有 qemu-guest-agent 的镜像的实时快照添加到场景测试中。请注意,这需要一个具有 libvirt >= 1.2.5 的环境。

文档影响

需要在操作指南中记录如何使用此功能(当前建议您手动使用 fsfreze 工具)。

参考资料