一致性组 Kilo 更新

https://blueprints.launchpad.net/cinder/+spec/consistency-groups-kilo-update

一致性组支持是在 Juno 中引入的。本提案旨在通过添加一些新功能来增强它。

问题描述

  • 从一致性组快照创建一致性组

    目前,用户可以创建一个一致性组并创建该一致性组的快照。但是,要从 Cgsnapshot 恢复,需要执行以下步骤:

    1. 创建一个新的一致性组。

    2. 对一致性组中的每个卷执行以下操作:

      1. 为与原始一致性组中的每个卷关联的快照调用“从快照创建卷”。

    没有单个 API 允许用户从 Cgsnapshot 创建一致性组。

  • 修改一致性组 在创建一致性组并创建卷并将其添加到一致性组后,您可以删除包含所有卷的整个一致性组,但没有 API 可以将现有卷添加到一致性组或从中删除卷。

  • 数据库模式更改 创建一致性组时需要卷类型。目前,卷类型存储在 Cinder 数据库中 consistencygroups 表中的一个字段中。但是,这种方法存在一个限制,因为该列的大小是固定的。

用例

提议的变更

  • 从一致性组快照创建一致性组

    • 添加一个允许用户从 Cgsnapshot 创建一致性组的 API。

    • 相应地添加卷驱动程序 API。

  • 修改一致性组

    • 添加一个 API,用于在创建一致性组后将现有卷添加到一致性组并从中删除卷。

    • 相应地添加卷驱动程序 API。

  • 数据库模式更改

    提出以下更改:

    • 将创建一个新的 cg_volumetypes 表。

    • 此新表将包含 3 列:

      • cg_volumetype 条目的 uuid

      • 一致性组的 uuid

      • 卷类型的 uuid

    • 将为数据库迁移提供升级和降级函数。

备选方案

如果没有这些提议的更改,我们必须处理当前的限制。

数据模型影响

  • 数据库模式更改 提出的更改如下:* 将创建一个新的 cg_volumetypes 表。 * 此新表将包含 3 列

    • cg_volumetype 条目的 uuid

    • 一致性组的 uuid

    • 卷类型的 uuid

REST API 影响

新的一致性组 API 更改

  • 从 Cgsnapshot 创建一致性组 * V2/<租户 ID>/consistencygroups * 方法:POST * V2 的 JSON 模式定义

    {
        "consistencygroup":
        {
            "name": "my_cg",
            "description": "My consistency group",
            "cgsnapshot": my_cgsnapshot,
        }
    }
    
    • 在创建一致性组 API 中,如果未指定 cgsnapshot,则代码路径与之前相同,请求将发送到调度器;如果指定了 cgsnapshot,则请求将发送到原始一致性组所在的后端。

    • Cinder API 将负责在数据库中创建 consistencygroup 条目和卷条目。Cinder 驱动程序将负责在后端创建它。

  • 更新一致性组 * V2/<租户 ID>/consistencygroups/<cg uuid> * 方法:PUT * V2 的 JSON 模式定义

    {
        "consistencygroup":
        {
            "name": "my_cg",
            "description": "My consistency group",
            "addvolumes": [volume uuid 1, volume uuid 2,...]
            "removevolumes": [volume uuid 8, volume uuid 9,...]
        }
    }
    
    • 此方法可以更新名称、描述以及一致性组中的卷。在“addvolumes”之后,列表将包含要添加到组的卷的 UUID,在“removevolumes”之后,列表将包含要从组中删除的卷的 UUID。API 将验证输入名称、描述、addvolumes 和 removevolumes 字段中的 UUID 是否与 Cinder db 中的信息一致,并将请求发送到卷管理器。管理器将调用驱动程序在后端执行更新。API 将更新 Cinder db。

  • Cinder 卷驱动程序 API

    将添加以下新的卷驱动程序 API

    def create_consistencygroup_from_cgsnapshot(self, context,
        consistencygroup, volumes, cgsnapshot, snapshots)
    
    def modify_consistencygroup(self, context, consistencygroup,
        old_volumes, new_volumes)
    

安全影响

通知影响

其他最终用户影响

需要更改 python-cinderclient 以支持新的 API。

  • 从一致性组快照创建一致性组

    cinder consisgroup-create --name <name> --description <description>
    --cgsnapshot <cgsnapshot uuid or name>
    
  • 修改一致性组

    cinder consisgroup-modify <cg uuid or name> --name <new name>
    --description <new description> --addvolumes
    <volume uuid> [<volume uuid> ...] --removevolumes
    <volume uuid> [<volume uuid> ...]
    

性能影响

其他部署者影响

无。数据库模式更改是内部的,应该对最终用户是透明的。

开发人员影响

驱动程序开发人员可以实施新的驱动程序 API。

实现

负责人

主要负责人

xing-yang

其他贡献者

工作项

  1. API 更改

    • 从一致性组快照创建一致性组 API

    • 修改一致性组 API

  2. 卷驱动程序 API 更改

    • 从一致性组快照创建一致性组

    • 修改一致性组

  3. 数据库模式更改

依赖项

测试

将添加新的单元测试来测试更改后的代码。

文档影响

需要进行文档更改。

参考资料