针对 RBD 后端的镜像上传卷优化

https://blueprints.launchpad.net/cinder/+spec/optimize-upload-volume-to-rbd-store

本文档提出通过使用 COW 克隆来优化从 cinder rbd 后端上传卷到 glance rbd 存储的操作。

问题描述

目前,当执行上传卷到镜像操作时,如果源(cinder)和目标(glance)后端都是 rbd,则没有任何优化,而是执行了逐块复制数据的通用代码路径。 我们可以通过执行 COW 克隆来改进这一点,就像在从镜像创建卷时所做的那样 [1]

用例

我们希望使用 COW 克隆来提高从 cinder rbd 后端上传卷到 glance rbd 存储的性能。

提议的变更

Glance 和 cinder 两侧都需要进行更改。

  1. Glance

通过 stores info API 暴露存储类型和 rbd 特定的存储信息(在本例中,如 glance rbd 存储池名称)[2]。 我们可以通过 stores info API 提供存储特定的细节来扩展到其他存储,就像我们在 cinder 侧使用 get pools API 一样 [3]。 关于其实现的更多信息可以在 glance 侧的规范中提供。

  1. Cinder

从 Glance 获取存储信息并找到默认存储。 如果 glance 默认存储是 rbd 并且 cinder 正在使用 rbd 后端来上传卷到镜像,那么我们将从卷存储池到镜像存储池(存储池名称由 glance 提供)执行 COW 克隆操作,并在 glance 侧注册镜像位置。

我们还将引入一个新的配置参数 enable_clone_optimization 来启用/禁用 cinder 侧的此优化。 更多信息可以在 安全影响 部分找到。

备选方案

数据模型影响

REST API 影响

无。 这是 RBD 驱动程序特定的功能。

安全影响

由于此优化跳过了在 glance 侧发生的镜像写入,它还将跳过在这种情况下计算的校验和和哈希值。 我们将引入一个新的配置参数 enable_clone_optimization 来启用/禁用此优化,并提及启用它带来的安全风险。 默认情况下,它将被禁用。

Active/Active HA 影响

通知影响

其他最终用户影响

性能影响

在 cinder RBD 到 glance RBD 的情况下,上传卷到镜像将得到显著改进。

镜像大小

2GB

3GB

5GB

未使用 COW 克隆的时间

1分17秒

1分15秒

2分49秒

使用 COW 克隆的时间

1.29秒

2.32秒

1.63秒

-98%

-97%

-99%

其他部署者影响

Cinder 服务用户需要具有 Glance 存储池的读写权限。 请注意,读取权限可能已经授予,只需要提供写入权限即可。

开发人员影响

实现

负责人

主要负责人

Rajat Dhasmana (whoami-rajat)

工作项

  • 查询 glance 获取存储信息(在从 glance 侧暴露细节之后)

  • 如果要上传的卷位于 glance RBD 存储中(卷上传到 glance 默认存储),则执行 COW 克隆

依赖项

Glance 侧的更改需要暴露存储类型和 RBD 存储信息,例如 glance 存储池名称。

测试

  • 单元测试

  • Tempest 或手动测试,以检查 RBD 镜像依赖性是否阻止删除源资源

    • 上传卷到镜像

    • 删除原始卷

    并且

    • 上传卷到镜像

    • 从镜像创建卷

    • 删除镜像

文档影响

参考资料