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 驱动,可以通过查询 instance 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 会导致被拉取的文件的格式来做出假设。

进度更新

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

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

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

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

备选方案

保持现状(不太理想)。

数据模型影响

REST API 影响

安全影响

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

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

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

deepakcs

其他贡献者

工作项

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

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

  • 使用 Cinder 进行测试(大部分更改真正起作用的地方)

依赖项

测试

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

文档影响

参考资料