在 OpenStack 中启用 DB2

设置 OpenStack 环境以支持 DB2

OpenStack 是一个云操作系统,它控制着整个数据中心中庞大的计算、存储和网络资源池。所有资源都通过一个仪表板来进行管理,这为管理员提供了控制权,同时使用户能够通过 Web 界面配制资源。OpenStack 支持 MySQL、SQLite 和 PostgreSQL 作为其默认数据库,在本文中,作者展示如何快速启用 OpenStack 来支持 DB2®。

Hou Sheng Bo, 软件工程师, IBM

Sheng Bo Hou 是 IBM Open Standards and Open Source 团队的一位软件工程师。自他 2010 年加入 IBM 以来,一直从事云计算标准工作。为了与 IBM 对标准的支持保持一致,以及集成开源软件和开发,他目前正在 OpenStack 社区参与 bug 报告和修复、蓝图互动 (blueprint engagements) 等的创意开发工作。



2013 年 1 月 14 日

OpenStack 是一个优秀的云操作系统;开发人员、管理员和操作员在自己的虚拟工具包中拥有与它相关的技能是明智之举。高效的云需要一个高效的数据库且可接受多个数据库。但如果您希望将 IBM® DB2 用于 OpenStack,该怎么办?OpenStack 默认并不支持 DB2。

这个简短的练习展示如何在 OpenStack 环境中实现 DB2 支持。涉及的 6 个步骤包括:

  1. 开始前收集材料。
  2. 安装数据库访问包。
  3. 添加对 DB2 的额外支持。
  4. 使用 OpenStack 脚本。
  5. 为 DB2 配置 OpenStack。
  6. 运行 OpenStack 和 DB2。

让我们开始吧。

第 1 步:开始前收集材料

OpenStack 构建于 Python 2.7 和 Ubuntu 11.10(64 位环境版本)中的其他一些包之上。IBM DB2 是您希望能够支持的目标数据库。开始之前,您需要以下要素:

  • 一台物理机器。
  • 一个操作系统,比如 Ubuntu 11.10 或更高版本,它应为 64 位操作系统。
  • 一种编程语言,比如 Python 2.7+。对于 Python,在系统准备好后运行以下命令:
    sudo apt-get install python-software-properties
    sudo apt-get update, sudo apt-get install python-dev libaio-dev
    Install pip: sudo apt-get install python-pip
    Install ez_setup: sudo pip install ez_setup
  • 推荐使用 DB2 Version 9.7 或更高版本。

第 2 步:安装数据库访问包

SQLAlchemy 是 Python SQL 工具包和对象关系映射器,它通过一个企业级持久性模式套件来为 SQL for Python 应用程序开发人员提供支持,该套件旨在实现高效且高性能的数据库访问。SQLAlchemy 尝试像关系代数引擎一样对待数据库,而不是像一个表集合,从而适应两种大小和性能原则及抽象原则。

SQLAlchemy 中的对象关系映射器(以无限制的多种方式将类映射到数据库)支持以一种完全解耦的方式开发对象模型和数据库模式。

SQLAlchemy-migrate 是模式迁移工具。它提供了一种方式来处理 SQLAlchemy 项目中的数据库模式更改,还提供了一种数据库更改存储库机制,这种机制既可在命令行上使用,也可在 Python 代码内使用。

  1. 下载 SQLAlchemy。使用 sudo pip install SQLAlchemy==0.7.2(或者您选择的任何版本)进行安装。
  2. 下载 SQLAlchemy-migrate。因为 DB2 不受支持,所以安装针对 DB2 的补丁 ibmdb2.patch(参见 下载 一节)。将补丁保存在 SQLAlchemy-migrate 的 root 文件夹中并运行命令 -p1 < ibmdb2.patch。接下来,安装 SQLAlchemy-migrate。

第 3 步:添加对 DB2 的额外支持

要将 DB2 连接到 Python,需要安装 IBM Data Server Driver、ibm_dbibm_db_sa。另外,要安装 OpenStack,您需要超级用户的权限,所以必须要为 sudoer 和 global 设置必要的变量。您需要以下驱动程序和适配器才能让 OpenStack 支持 DB2。

Fix Central 下载用于 ODBC 和 CLI 的 IBM Data Server Driver;选择具有类似 ibm_data_server_driver_for_odbc_cli_linuxxXX_vXX.tar.gz 文件名的合适版本。解压该文件。

将 3 个变量设置为全局变量;在 OpenStack 中,许多命令通过 sudo 运行,这需要保留这 3 个变量:

  • Defaults env_keep+="IBM_DB_DIR"
  • Defaults env_keep+="IBM_DB_LIB"s
  • Defaults env_keep+="LD_LIBRARY_PATH"

将代码添加到 Defaults env_reset 之后。

需要在环境中设置 3 个变量。这三个变量可放入 ~/.bashrc 文件中。将以下行添加到 ~/.bashrc 中:

export IBM_DB_DIR=<ODBC and CLI DIR>/clidriver
export IBM_DB_LIB=<ODBC and CLI DIR>/clidriver/lib
export LD_LIBRARY_PATH=<ODBC and CLI DIR>/clidriver/lib
alias sudo='sudo LD_LIBRARY_PATH=/<ODBC and CLI DIR>/clidriver/lib'

下载 ibm_db,这是 IBM 数据库的一个 Python 驱动程序和 DBI 包装器,为 IBM 数据库提供了一个 Python 接口。

  1. 转到目录:
    cd <ibm_db directory>
  2. 运行命令:sudo python setup.py buildsudo python setup.py install

下载 ibm_db_sa:此适配器提供了 IBM 数据服务器的 Python/SQLAlchemy 接口。依据 SQLAlchemy-migrate 和 OpenStack 代码的需求,需要在代码上进行了一些修改。请使用附件中的 ibm_db_sa.zip。

  1. 转到目录:
    cd <ibm_db_sa directory>
  2. 运行命令 sudo python setup.py buildsudo python setup.py install

第 4 步:使用 OpenStack 脚本

OpenStack 默认会编写支持 MySQL 的代码。IBM DB2 对可为空的字段(允许设置数据类型)和要配置的索引类型、UNIQUE 约束条件(惟一地标识数据库表中的每个记录)的接受与否等具有更严格的需求。所以用于 SQLAlchemy-migrate 的 Python 代码需要替换为支持 IBM DB2 的需求的代码(包括 OpenStack 的 Project Nova/Compute、云计算结构控制器、一个 IaaS 系统的主要部分)。

注意:因为根据我的测试情况,Nova 无法正确支持这些需求,所以我准备了特定的 Python 脚本 082_essex.py 和 096_recreate_dns_domains。可从 下载 一节获取它们。安装 Python 脚本以为 DB2 启用 Nova。

以下是两种替代方案:

  1. 如果从源代码安装,请备份目录 <nova dir>/nova/db/sqlalchemy/migrate_repo/versions 下的文件,然后将两个脚本文件复制到该目录中。
  2. 如果通过运行命令来安装,请备份 <nova dir*gt;/nova/db/sqlalchemy/migrate_repo/versions 下的文件,然后将两个脚本文件复制到该目录中。

我已 为此问题创建了一个 bug 报告,您可以关注一下

Some columns should be defined nullable=False,since they are unique in the table. 
For example, address in virtual_interfaces, host in aggregate_hosts, name in 
aggregates, etc. MySQL is OK, but databases with more strict column creation can 
yield errors, if it is not strictly defined.

Due to the same reason, method register_models in nova/db/sqlalchemy/models.py 
does not work for MYSQL. uuid in instance must be define unique and not null.

第 5 步:为 DB2 配置 OpenStack

数据库连接需要设置为 IBM DB2 的正确地址,然后所有数据库表都应初始化。这一步展示了操作过程。

对于 Nova 组件(云结构控制器):

  1. 创建一个名为 nova 的表;此表比较特殊。您需要使用 PAGESIZE=8K 将页面大小设置为 8K,而不是默认的 4K。在 SQL 中,该命令类似于: CREATE DATABASE nova AUTOMATIC STORAGE YES ON '/home/db2inst1' DBPATH ON '/home/db2inst1' USING CODESET UTF-8 TERRITORY CN COLLATE USING SYSTEM PAGESIZE 8192
  2. 修改 /etc/nova/nova.conf 文件中的 sql_connectionconnection,将它设置为 ibmdb://name:password@address:50000/nova

对于 Glance 组件(提供虚拟磁盘映像的发现、注册和交付服务的 Image Service 组件):

  1. 创建一个名为 glance 的表。
  2. 修改 /etc/glance/glance-registry.conf 文件中的 sql_connection,将它设置为 ibmdb://name:password@address:50000/glance

对于 Keystone 组件(提供身份、令牌、目录和策略服务的组件):

  1. 创建一个名为 keystone 的表。
  2. 修改 /etc/keystone/keystone.conf 文件中的 sql_connectionconnection,将它设置为 ibmdb://name:password@address:50000/keystone

对于 Cinder 组件(以服务形式提供块存储的组件):

  1. 创建一个名为 cinder 的表。
  2. 修改 /etc/cinder/cinder.conf 文件中的 sql_connectionconnection,将它设置为 ibm_db_sa://name:password@address:50000/cinder

第 6 步:运行 OpenStack 和 DB2

完成这些步骤后,可安装您的 OpenStack(例如,通过使用 DevStack,这是一个 shell 脚本,相对来说易于构建一个完整的 OpenStack 开发环境)。在这之后,您可运行带 DB2 的新 OpenStack 开发环境。

注意:如果使用 DevStack 构建,请通过修改以下这行代码来更改 stack.sh 文件:

screen_it n-cpu "cd $NOVA_DIR && sg libvirtd $NOVA_DIR/bin/nova-compute"

更改为:

screen_it n-cpu "cd $NOVA_DIR && $NOVA_DIR/bin/nova-compute"

否则您将收到一个类似于这样的错误:

ImportError: libdb2.so.1: cannot open shared object file: No such file or directory

但是,请确保您当前的用户位于组 libvirtd 中。您可编辑 /etc/group 来添加它。

最后注意一点:OpenStack 是一个不断演化的平台,这意味着每个项目组件的脚本可能需要不断更新。请定期查阅 OpenStack 站点,了解这些组件的任何更改。


下载

描述名字大小
脚本文件script_and_patches.zip42KB

参考资料

学习

获得产品和技术

讨论

  • 加入 developerWorks 社区。查看开发人员推动的博客、论坛、群组和维基,并与其他 developerWorks 用户交流。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing, Information Management, Open source
ArticleID=854840
ArticleTitle=在 OpenStack 中启用 DB2
publish-date=01142013