使用 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,则包括应用程序)。拍摄快照后,驱动程序将请求代理解冻文件系统。
此功能的先决条件是
超visor 为 ‘qemu’ 或 ‘kvm’
在超visor 上安装了 libvirt >= 1.2.5(具有 fsFreeze/fsThaw API)
镜像元数据中的 ‘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 工具)。
参考资料¶
无