针对 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 两侧都需要进行更改。
Glance
通过 stores info API 暴露存储类型和 rbd 特定的存储信息(在本例中,如 glance rbd 存储池名称)[2]。 我们可以通过 stores info API 提供存储特定的细节来扩展到其他存储,就像我们在 cinder 侧使用 get pools API 一样 [3]。 关于其实现的更多信息可以在 glance 侧的规范中提供。
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 镜像依赖性是否阻止删除源资源
上传卷到镜像
删除原始卷
并且
上传卷到镜像
从镜像创建卷
删除镜像
文档影响¶
无