RBD 实例快照¶
https://blueprints.launchpad.net/nova/+spec/rbd-instance-snapshots
在使用 RBD 作为 glance 和 nova 的存储时,实例快照速度慢且效率低,导致用户体验不佳。使用本地磁盘进行上传会增加运营商支持实例快照的成本。
作为背景阅读,以下链接提供了有关 Ceph 中可用的快照功能的概述。
https://docs.ceph.net.cn/docs/master/rbd/rbd-snapshot/
问题描述¶
RBD 经常用于支持 glance 镜像和 nova 磁盘。当使用 rbd 作为 nova 的磁盘时,nova “快照”速度慢,因为它们通过将数据从 rbd 下载到本地文件、将其上传到 glance 并将其放回 rbd 来创建完整副本。由于通常使用原始镜像与 rbd 配合使用以启用写时复制克隆,因此此过程会删除上传到 glance 的数据中的稀疏性。这对用户体验来说是一个问题,因为这个缓慢、低效的过程需要比必要的更长的时间才能让用户自定义镜像。
对于运营商而言,这也是一个效率和成本问题。对于基于 rbd 的 nova 部署,这是最后一个使用大量本地磁盘空间的部分。
用例¶
这允许最终用户快速迭代镜像,例如自定义或更新它们,并更快地开始使用快照。
对于运营商而言,这消除了计算节点上大型本地磁盘的任何需求,因为 rbd 中的实例数据保留在 rbd 中。它还防止了大量空间的浪费。
项目优先级¶
无
提议的变更¶
与其将所有数据复制到本地磁盘,不如通过在 Nova 中获取 RBD 快照并将其克隆到 Glance 中将其保留在 RBD 中。与其上传数据,不如告诉 Glance 它在 RBD 中的位置。这样数据就保留在 Ceph 集群中,并且最终用户可以更快地使用快照。
总的来说,工作流程如下
通过 Nova 在 Ceph 存储池中创建临时磁盘的 RBD 快照,该存储池是 Nova 配置为使用的存储池。
将 RBD 快照克隆到 Glance 的 RBD 存储池。[7]
为了避免管理快照和克隆之间的依赖关系,在 Glance 的 RBD 存储池中深度展平 RBD 克隆,并将其与 Ceph 中的 Nova RBD 快照分离。[7]
删除 Ceph 中创建的 RBD 快照,因为它不再需要。(1)
使用创建并在(2)和(3)中展平的 RBD 克隆的位置更新 Glance。
这与当两者都在 rbd 上时,镜像克隆到 nova 实例磁盘的方式相反 [0]。
如果这些步骤中的任何一个失败,请清理任何部分状态并回退到当前的全复制方法。RBD 快照方法失败的速度很快,通常是瞬时的。云管理员可以监视这些失败并解决导致 RBD 快照失败的底层 CEPH 问题。
失败将在 nova 计算日志中以堆栈跟踪的形式报告。
有几个原因可以回退到完全复制而不是在高效快照失败时退出
它使升级变得优雅,因为 nova 快照在 glance 具有高效快照权限之前仍然有效(有关 glance 权限详细信息,请参阅安全影响)。
当由于架构选择(例如不使用 rbd 作为 glance 后端,或为 glance 和 nova 使用不同的 ceph 集群)而无法使用高效快照时,nova 快照仍然有效。
这与 nova 和 cinder 中的现有 rbd 行为一致。如果从 glance 镜像克隆失败,这两个项目在创建卷或实例磁盘时都会回退到完全复制。
备选方案¶
克隆展平步骤可以作为绿色线程中的后台任务处理,或者完全异步地作为定期任务处理。这将提高用户界面性能,因为快照将立即可用,但它也会引入类似于竞争条件的删除依赖镜像的问题。
可以完全省略展平步骤,并让 glance 负责跟踪各种镜像依赖关系。在 rbd 级别,每个磁盘的实例快照将包含以下三项。这对于任何实例都是如此,无论它是从快照本身创建的,还是只是从常规镜像创建的。在 rbd 中,将会有
实例磁盘的快照
实例磁盘的克隆
克隆的快照
(3)通过 glance 的后端位置公开。(2)是 glance 的内部细节。(1)是 nova 和 glance 处理的内部细节。
在 rbd 级别,带有快照的磁盘无法删除。如果用户删除带有快照的实例,请通过让 glance 负责最终删除它们(在删除其依赖快照后)来隐藏此信息。Nova 通过在 rbd 中重命名它删除的实例磁盘来做到这一点,以便 glance 知道它们可以被删除。
当删除 glance 快照时,它会删除(3),然后是(2),然后是(1)。如果 nova 已经重命名了其父磁盘在 rbd 中的预设后缀,则该实例已经销毁,因此 glance 会尝试删除原始实例磁盘。当删除最后一个快照时,原始实例磁盘将被成功删除。
如果在销毁实例之前创建 glance 快照并删除它们,nova 将像往常一样删除实例磁盘。
Nova 用于让 glance 知道它需要清理原始磁盘的机制可能不同。它可以使用具有某些限制的镜像属性,这些限制在当前的 glance api 中是不可能的
它必须只能写入一次
为了避免暴露后端细节,它需要对最终用户隐藏
将此状态存储在 ceph 中比存储在可能不同步的外部数据库中更容易保持一致。它也会在 glance_store api 中造成奇怪的抽象泄漏,而上层不需要了解它。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
Glance 需要配置为启用 direct_url 支持,以便 Nova 确定要从哪里克隆镜像,具体取决于系统配置,这可能会泄漏后端凭据 [5]。Devstack 已经更新为在请求 Ceph 支持时切换行为 [6]。
文档通常建议为 glance 和 nova 使用不同的 ceph 存储池,并为每个存储池提供不同的访问权限。由于 nova 需要能够在 glance 使用的存储池中创建快照,因此它也需要对该存储池具有写入访问权限。
通知影响¶
无
性能影响¶
基于 RBD 的实例的快照速度将大大提高。
其他最终用户影响¶
基于 RBD 的实例的快照速度将大大提高。
其他部署者影响¶
要在具有 authx 的现有安装中使用此功能,需要将“allow rwx pool=images”添加到 nova 的 ceph 用户功能中。可以使用“ceph auth caps”命令来执行此操作 [1]。如果未更新这些权限,nova 将继续使用现有的完全复制机制进行实例快照,因为快速快照将失败,nova 计算将回退到完全复制方法。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
nic
- 其他贡献者
jdurgin pbrady nagyz cfb-n/cburgess
工作项¶
实现:[4]
libvirt imagebackend 目前由于某种原因无法将 AMI 镜像识别为原始镜像(因此可克隆),因此此提议的更改对非常流行的镜像格式的效用有限。应在单独的更改中解决此问题。
依赖项¶
您需要 Havana 或更高版本的 glance,因为 direct URL 是在 Havana 中添加的。
测试¶
网关中的带有 ceph 的现有 tempest 测试会泛泛地覆盖实例快照。由于高效快照会自动启用,因此无需更改 tempest 测试。此外,nova 中的单元测试将验证错误处理(如果该过程失败则回退到完全复制),并确保在正确配置的情况下使用 rbd 快照和克隆而不是完全复制。
文档影响¶
请参阅上面的安全性和其他部署者影响部分。
参考资料¶
[1] Ceph 身份验证文档:https://ceph.net.cn/docs/master/rados/operations/user-management/#modify-user-capabilities
[2] 替代方案:Glance 清理补丁:https://review.openstack.org/127397
[3] 替代方案:Nova 补丁:https://review.openstack.org/125963
[4] Nova 补丁:https://review.openstack.org/205282
[5] https://bugs.launchpad.net/glance/+bug/880910