为每个存储配置权重支持

https://blueprints.launchpad.net/glance-store/+spec/store-weight

为每个存储配置权重支持。权重最高的存储将优先用于下载镜像。

问题描述

自从引入将单个镜像导入到多个存储或将现有镜像复制到多个存储以来,单个镜像可以存储在多个位置或 Glance 配置的不同存储中。当前下载镜像基于默认的 location_strategy,即 location_order,如果存在多个位置,则逐个遍历镜像位置(在这种情况下,它将返回存储在第一个位置的镜像)。如果用户希望从特定存储下载镜像,则可以使用 store_type 作为位置策略,以优先从该存储下载镜像。例如,如果 location_strategy 设置为 store_type,并且 store_type 偏好 rbd,则镜像将仅从 rbd 存储下载。现在,store_type 位置策略的问题在于,可能存在相同类型的多个存储(多个 rbd 或文件存储)。因此,即使将 location_strategy 设置为 store_type,用户仍然无法从特定存储下载镜像。

考虑以下用例,以提供从特定存储下载的支持

  • 我有一个大型镜像,并且希望从 SSD 存储下载它,因为它速度很快。

  • 我对特定镜像进行多次并发下载,因此希望从 RELIABLE 存储下载它,因为其 I/O 处理更好。

提议的变更

此提案需要在 glance_store 以及 glance 中进行更改。

Glance store 侧的更改

为每个存储添加新的配置选项 weight,默认值为零。操作员可以根据需要更改每个存储的配置。权重最高的存储将优先用于下载镜像。


[default] enabled_backends = robust:rbd,cheap:file

[robust] rbd_store_pool=images weight=10

[cheap] filesystem_store_datadir=/opt/stack/data/glance/images/ weight=5

在上面的示例中,robust 存储将始终是下载镜像的首选存储。如果镜像在 robust 存储中不可用,则将在下一个内联的 cheap 存储中搜索。

如果未为存储提供权重(即,所有存储都具有默认权重 0),则将基于镜像创建顺序搜索镜像(类似于 location_order)。

Glance 侧的更改

一旦 glance_store 侧的更改实现,我们需要修改镜像的 GET API,以根据分配给每个存储的 weight 对镜像位置进行排序。如果 weight 是默认值,则位置顺序将不会更改。

备选方案

将新的位置策略 ‘store_identifier’ 添加到现有的默认两个策略。这将添加逗号分隔的存储标识符列表,这些列表将优先用于下载镜像。将在 store_identifier_location_strategy 组下添加新的配置选项 store_identifier_preference,用户/部署者可以在其中引用基于存储标识符的首选项。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

部署者/操作员需要为每个 glance-store 配置 weight

开发人员影响

实现

负责人

主要负责人

dansmith

其他贡献者

abhishek-kekane

工作项

  • 为每个存储添加新的配置选项 weight

  • GET API 更改,以根据存储 weight 对位置进行排序

  • 单元和功能测试

  • Tempest 覆盖

依赖项

测试

将添加足够的单元/功能和 tempest 测试。

文档影响

需要记录基于分配给每个存储的权重如何更改位置顺序。

参考资料