为 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 提供了有关如何使用该引擎以及错误代码的足够详细信息。
可以在这里找到 DB2 SQL 错误消息说明:http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/index.jsp?topic=%2Fcom.ibm.db2.luw.messages.sql.doc%2Fdoc%2Frsqlmsg.html
可以在这里找到有关使用 python 开发 DB2 的信息:http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/index.jsp?topic=%2Fcom.ibm.swg.im.dbclient.python.doc%2Fdoc%2Fc0054366.html
OpenStack 中 DB2 问题的联系人
Matt Riedemann (mriedem@us.ibm.com) - Nova 核心成员
Brant Knudson (bknudson@us.ibm.com) - Keystone 核心成员
Jay Bryant (jsbryant@us.ibm.com) - Cinder 核心成员
Rahul Priyadarshi (rahul.priyadarshi@in.ibm.com) - ibm_db_sa 维护者
实现¶
负责人¶
- 主要负责人
邮箱: jsbryant@us.ibm.com Launchpad ID: jsbryant
工作项¶
使 test_migrations.py 模块能够使用配置的 DB2 后端运行单元测试。
添加 DB2 的适当列类型。
添加支持为 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 单元测试。
文档影响¶
社区中的安装指南没有详细说明数据库的设置。RHEL/Fedora 安装指南说明使用 RDO 中 openstack-utils 提供的 openstack-db 脚本,该脚本使用 MySQL。其他安装指南只是说明 SQLite3、MySQL 和 PostgreSQL 是广泛使用的数据库。因此,对于安装指南,将更新关于支持的数据库的通用语句,以将 DB2 添加到列表中。以下位置也将进行更新
安全指南中有数据库主题,因此也会有 DB2 方面的考虑,具体如下
参考资料¶
Stackforge 上有 Chef cookbook 支持配置 OpenStack 以使用现有的 DB2 安装:http://git.openstack.org/cgit/stackforge/cookbook-openstack-common/
最初编写用于描述 OpenStack 的 DB2 的 wiki 文档:https://wiki.openstack.org/wiki/DB2Enablement
DB2 10.5 InfoCenter:http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/index.jsp
一些较旧的手动设置 DB2 与 OpenStack 的说明:http://www.ibm.com/developerworks/cloud/library/cl-openstackdb2/index.html
ibm-db-sa:https://code.google.com/p/ibm-db/source/clones?repo=ibm-db-sa