为 DB2 (v10.5+) 添加 Cinder 支持

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/cinder/+spec/db2-database

社区目前支持 MySQL 和 PostgreSQL 生产数据库。其他一些核心项目已经支持 DB2 (Keystone, Glance, Ceilometer, Heat)。此蓝图为 Cinder 添加了对 DB2 作为生产数据库的支持。

问题描述

  • 目前社区中没有支持部署器使用 DB2 后端数据库运行 Cinder 的方案。

  • 对于任何在现有 DB2 数据库上运行应用程序并希望迁移到 OpenStack 的用户,他们必须使用不同的数据库引擎来运行 Cinder 在 OpenStack 中。

  • 由于大多数核心项目支持 DB2 但 Cinder 尚未支持,核心项目之间的支持矩阵目前存在不一致的情况。

用例

提议的变更

使 Cinder 能够在 DB2 上运行所需的更改有限,因为 Cinder 的数据库结构并不复杂。目前不需要修改迁移脚本即可在 DB2 数据库上进行部署。

需要更新单元测试以支持使用 ibm_db_sa 驱动程序针对 DB2 后端运行测试,并且所有 Cinder 补丁都将针对使用 IBM 维护的 DB2 运行的 Tempest 完整运行进行测试。请注意,这些第三方 CI 运行已经为 Cinder 启用。

Oslo 的 db.api 层中已经存在代码来支持 DB2 的常见功能,例如重复条目错误处理和连接跟踪,因此这不属于此规范的范围。但是,Cinder 需要同步到最新的 Oslo DB 代码才能启用 DB2 支持。

备选方案

部署器可以使用其他支持的数据库后端,例如 MySQL 或 PostgreSQL,但这对于已经运行 DB2 应用程序并希望与 OpenStack 集成的客户来说可能不是理想的选择。此外,您可以运行其他核心项目,并在单个 DB2 OpenStack 数据库中使用多个模式,但您必须单独运行 Cinder,这会带来维护/配置问题。

数据模型影响

当前 Cinder 数据模型没有影响。由于未来更改而出现的问题将由第三方 CI 测试发现,并在那时解决。

此声明的唯一例外在于单元测试路径。我在 Icehouse 中进行了两次提交,以开始实现启用 DB2 单元测试的基础设施。这些提交是为了添加一个 bool_type 字典 (2a7b11922bd9389287915c45de92ca5eed3d448e) 和一个 time_type 字典 (a9527de9ed3a2eae951564c3c74b7319113e8bf5)。我需要为 DB2 添加适当的类型,就像为 MySQL 所做的那样,作为我将为 DB2 制作的单元测试更改的一部分。

REST API 影响

无。

安全影响

无。

通知影响

无。

其他最终用户影响

无。

性能影响

在 DB2 上执行迁移单元测试可能比在其他后端数据库上花费更长的时间,因为创建数据库模式需要时间。但是,这种影响只会出现在运行 DB2 的单元测试时。

其他部署者影响

没有计划将 Cinder 数据库从预先存在的安装 (例如 MySQL) 迁移到 DB2。因此,部署器需要从全新的 Cinder 安装开始才能将 DB2 作为后端数据库启用。

开发人员影响

对开发人员的唯一影响是,如果他们正在添加不适用于 DB2 的 DB API 代码或迁移,他们必须相应地进行调整,就像我们今天使用 MySQL 和 PostgreSQL 一样。IBM ATC 将为需要 DB2 特定条件的此类问题提供支持/指导,尽管对于大多数情况,DB2 InfoCenter 提供了有关如何使用该引擎以及错误代码的足够详细信息。

实现

负责人

主要负责人

邮箱: jsbryant@us.ibm.com Launchpad ID: jsbryant

工作项

  1. 使 test_migrations.py 模块能够使用配置的 DB2 后端运行单元测试。

    1. 添加 DB2 的适当列类型。

    2. 添加支持为 Cinder 测试创建 DB2 模式。

依赖项

  • DB2 支持是在 Icehouse 期间添加到 sqlalchemy-migrate 0.9 的:https://blueprints.launchpad.net/sqlalchemy-migrate/+spec/add-db2-support

  • Cinder 的单元测试工作不需要任何需求更改。运行时要求是 ibm-db-sa 和 ibm_db 模块,两者都可从 pypi 获取。sqlalchemy-migrate 可选地导入 ibm-db-sa。ibm-db-sa 模块需要一个原生编译的 ibm_db,它具有与 DB2 ODBC/CLI 驱动程序通信的 c 绑定。

  • 请注意,仅支持 DB2 10.5+,因为这是添加了对可为空列上的唯一索引支持的版本,而 sqlalchemy-migrate 采用这种方式处理可为空列上的唯一约束。

测试

  • IBM 已经在 Cinder 上运行 DB2 的第三方 CI。

  • 将启用 DB2 的 Cinder 单元测试。

文档影响

参考资料