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 进行测试(大部分更改真正起作用的地方)
依赖项¶
Cinder 更改(格式):https://review.openstack.org/#/c/165393/
Cinder 更改(状态):https://review.openstack.org/#/c/172373/
测试¶
此更改最直接地影响 Liberty 的 Cinder GlusterFS、NFS 和 SMBFS 驱动程序。这些驱动程序将运行 Liberty 的 CI,这将验证这项工作。
文档影响¶
无
参考资料¶
OSSA 2014-033 https://bugs.launchpad.net/cinder/+bug/1350504
Cinder 更改(格式):https://review.openstack.org/#/c/165393/
Cinder 更改(状态):https://review.openstack.org/#/c/172373/