一致性组 Kilo 更新¶
https://blueprints.launchpad.net/cinder/+spec/consistency-groups-kilo-update
一致性组支持是在 Juno 中引入的。本提案旨在通过添加一些新功能来增强它。
问题描述¶
从一致性组快照创建一致性组
目前,用户可以创建一个一致性组并创建该一致性组的快照。但是,要从 Cgsnapshot 恢复,需要执行以下步骤:
创建一个新的一致性组。
对一致性组中的每个卷执行以下操作:
为与原始一致性组中的每个卷关联的快照调用“从快照创建卷”。
没有单个 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
其他贡献者
工作项¶
API 更改
从一致性组快照创建一致性组 API
修改一致性组 API
卷驱动程序 API 更改
从一致性组快照创建一致性组
修改一致性组
数据库模式更改
依赖项¶
测试¶
将添加新的单元测试来测试更改后的代码。
文档影响¶
需要进行文档更改。