支持卷数量权重

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/cinder/+spec/support-volume-num-weighter

提供一种机制来帮助改善卷后端 IO 负载均衡和卷的 IO 性能。

问题描述

目前 cinder 支持根据 free_capacity 和 allocated_capacity 选择卷后端。卷数量权重是指调度器可以根据卷后端中的卷数量来选择卷后端,这可以提供另一种机制来帮助改善卷后端 IO 负载均衡和卷的 IO 性能。

通过以下用例解释卷数量权重的优势。

假设我们有卷后端 A,容量为 300G,卷后端 B,容量为 100G。卷后端 A 的 IO 能力与卷后端 B 的 IO 能力相同。每个卷的 IO 使用量几乎相同。使用 CapacityWeigher 作为权重类。

具体用例:如果我们创建六个 10G 卷,这些卷将被放置在卷后端 A 中。所有六个卷的 IO 流都推送到卷后端 A,这将导致卷后端 A 执行大量的 IO 调度工作。与此同时,卷后端 B 没有卷,其 IO 能力被浪费了。

如果我们有卷数量权重,调度器可以对这些卷进行适当的初始放置——三个在卷后端 A 上,三个在卷后端 B 上。这样我们就可以充分利用所有卷后端的 IO 能力,以帮助改善卷后端 IO 负载均衡和卷的 IO 性能。

用例

提议的变更

实现一个卷数量权重:VolumeNumberWeighter。
  1. _weigh_object 函数通过使用 db api volume_get_all_by_host 返回卷后端的非删除卷数量。

  2. 添加一个新的配置项 volume_num_weight_multiplier,其默认值为 -1,这意味着根据卷后端的非删除卷数量在卷后端之间分配卷。

由于 VolumeNumberWeighter 与 CapacityWeigher/AllocatedCapacityWeigher 互斥,并且 cinder 的 scheduler_default_weighers 是 CapacityWeigher,我们可以将 scheduler_default_weighers=VolumeNumberWeighter 设置在 /etc/cinder/cinder.conf 中并重启 cinder-scheduler 以使 VolumeNumberWeighter 生效。

VolumeNumberWeighter 提供了帮助改善卷后端 IO 负载均衡和卷的 IO 性能的机制,但不能取代 CapacityWeigher/AllocatedCapacityWeigher,因为 CapacityWeigher/AllocatedCapacityWeigher 可用于在用户更关注卷后端之间可用存储空间平衡时提供可用存储空间的平衡。

备选方案

无。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

ling-yun

工作项

  • 实现卷数量权重

  • 将卷数量权重的权重选项添加到 OPENSTACK CONFIGURATION REFERENCE

依赖项

测试

设置卷后端 A 容量为 300G,卷后端 B 容量为 100G。创建六个 10G 卷,预期结果是在卷后端 A 中有 3 个卷,在卷后端 B 中有 3 个卷。

文档影响

将卷数量权重的权重选项添加到 OPENSTACK CONFIGURATION REFERENCE。

参考资料