Volume snapshot 改进

https://blueprints.launchpad.net/nova/+spec/volume-snapshot-improvements

此规范涵盖 libvirt volume 驱动程序中 volume snapshot 创建和删除操作的一些更新。这些更新是为了修复 Nova/Cinder 中与 volume 文件格式处理和 API 清理相关的一些问题。

问题描述

Nova 在操作 snapshot 文件时,目前不会将足够的信息传递回 Cinder。Cinder 需要跟踪每个文件的格式(raw, qcow2, vhd 等),以维护安全性和数据完整性。目前它必须猜测 snapshot 操作的结果来获取此信息。

Nova 目前会发送一个硬编码的 ‘90%’ 进度值,以指示 snapshot 操作结束时的状态转换。这应该被更通用的内容替换,以避免过度使用进度字段。

用例

部署者:如果用户在某些 Cinder volume 驱动器上将 qcow2 header 写入 volume,volume 可能会被标记为不可用。这项工作将修复问题,以便 Cinder 可以避免在此场景中使 volume 失效。

部署者:安全性提高(理论上),因为 Cinder 无需使用启发式方法进行上述检查。

开发者:Cinder 和 Nova 之间的 API 更加清晰(没有魔术进度值)

提议的变更

文件格式跟踪

每次 volume snapshot 创建或删除操作发生时,将有关已更改文件的文件格式信息添加到发送回 Cinder 的状态更新中。(目前仅在基于文件的 volume 驱动程序的 libvirt volume 驱动程序中使用,但没有什么可以阻止它变得更通用。)

对于 libvirt volume 驱动程序,可以通过查询实例 VM 的磁盘 backing chain 信息通过 domain.XMLDesc() 输出获取此信息。

对于 snapshot_create,确定新文件的格式,从 _volume_snapshot_create() 返回此格式,并添加一个字典,例如:‘file_format’: { ‘volume-1234.snapshot-abcd’: ‘qcow2’ } 到 _volume_update_snapshot_status() 调用中。

对于 snapshot_delete,确定 merge_target_file 的格式,或者如果该文件为 None,则确定 file_to_merge,在 snapshot 删除后,并将该信息添加到 _volume_update_snapshot_status() 调用中:‘file_format’: { ‘volume-1234’: ‘qcow2’ }

在旧版本的 libvirt 中,某些情况下可能无法在 domain 信息中明确给出此信息。在这种情况下,我们可以根据已知执行 blockCommit 会导致被提交文件的格式,而 blockRebase 会导致被拉取的文件的格式,来做出假设并返回格式。

进度更新

对于 Mitaka,继续在 update_snapshot_status 中发送 ‘progress’: ‘90%’ 标志以保持兼容性。(未来可以删除。)

发送一个新的状态 ‘creating_compute_complete’,以指示 compute 服务完成了其创建过程的一部分。Cinder 将将其转换为其自身方面的相关 volume 状态转换。

对于删除,与上述相同,使用 ‘deleting_compute_complete’。

这允许 Cinder 区分 Nova 是否正在处理信息,或者 Cinder 是否再次控制该 snapshot。

备选方案

保持现状(不太理想)。

数据模型影响

REST API 影响

安全影响

在 Juno 时间框架内存在一个安全问题,该问题已得到修补,使其安全。通过使系统完全健壮而不是仅仅修补,来完成这项工作。[参考 OSSA 2014-033]

这将使 Nova 和 Cinder 始终跟踪和使用每个 volume/snapshot 文件的文件格式知识。

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

deepakcs

其他贡献者

工作项

  • 将新的文件格式查询和报告添加到 libvirt snapshot 代码中

  • 将新的状态添加到 libvirt snapshot 创建/删除操作中

  • 与 Cinder 配合测试(大部分更改真正起作用的地方)

依赖项

测试

此更改最直接地影响 Mitaka 的 Cinder GlusterFS、NFS 和 SMBFS 驱动程序。这些驱动程序将运行 Mitaka 的 CI,这将验证这项工作。

文档影响

参考资料