OpenStack で DB2 をサポートする

DB2 をサポートする OpenStack 環境を構築する

OpenStack は、データ・センター内にある大規模な計算リソース、ストレージ・リソース、ネットワーク・リソースのプールを制御するクラウド・オペレーティング・システムです。すべてのリソースはダッシュボードで管理され、管理者はダッシュボードでリソースを制御できる一方、ユーザーは Web インターフェースからリソースをプロビジョニングすることができます。OpenStack はデフォルトのデータベースとして MySQL、SQLite、PostgreSQL をサポートしています。この記事では、OpenStack で迅速に DB2 をサポートできるようにする方法を説明します。

Sheng Bo Hou, Software Engineer, IBM

Sheng Bo Hou は IBM Open Standards and Open Source Team のソフトウェア技術者です。彼は 2010年に IBM に入社以来、主にクラウド・コンピューティングの標準化に従事してきました。標準化やオープンソース・ソフトウェアと開発との統合に対する IBM のサポートの一環として、彼は現在 OpenStack コミュニティーに対するコントリビューターであり、バグのレポートや修正、ブループリントに関する活動などを通じて開発のアイデアを提供しています。



2012年 12月 06日

OpenStack は、優れたクラウド・オペレーティング・システムであるため、開発者、管理者、運用者は、仮想環境を扱うツールの 1 つとして OpenStack に関するスキルを身に付けておくのが賢明です。クラウドを効率的なものにするには効率的なデータベースが必要であり、クラウドに使用できるデータベースは数多くあります。しかし IBM DB2 を OpenStack とともに使用したいとしたら、どうでしょう? OpenStack はデフォルトでは IBM DB2 をサポートしていません。

この記事では簡単な演習として、OpenStack 環境で DB2 をサポートする方法を説明します。この方法は以下の 6 つのステップからなっています。

  1. 作業を開始するための材料を収集する
  2. データベース・アクセスのためのパッケージをインストールする
  3. DB2 に対するサポートを追加する
  4. OpenStack スクリプトを使用する
  5. DB2 用に OpenStack を構成する
  6. OpenStack と DB2 を実行する

では早速始めましょう。

ステップ 1: 作業を開始するための材料を収集する

OpenStack は、Ubuntu 11.10 の 64 ビット版環境に含まれる、Python 2.7 といくつかの追加パッケージをベースに構築されています。この記事でサポートできるようにしたい対象のデータベースは IBM DB2 です。作業を開始するには以下のものが必要です。

  • 物理マシン
  • Ubuntu 11.10 またはそれ以降のバージョンのオペレーティング・システム。オペレーティング・システムは、64 ビット OS でなければなりません。
  • プログラミング言語 (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 はバージョン 9.7 またはそれ以降のバージョンを使用することを推奨します。

ステップ 2: データベース・アクセスのためのパッケージをインストールする

SQLAlchemy は、Python の SQL ツールキット兼オブジェクト・リレーショナル・マッパーです。SQLAlchemy では、効率的かつハイパフォーマンスなデータベース・アクセスができるように設計された一連のエンタープライズ・レベルのパーシスタンス・パターンを使用することで、Python アプリケーション開発者が SQL を実行できるようにします。SQLAlchemy はデータベースを単なるテーブルの集合 (表の集合) として扱うのではなくリレーショナル代数エンジンのように扱うことで、SQL データベースが持つ規模とパフォーマンスに関する基本的性質と、抽象化に関する基本的性質に対応しようとします。

SQLAlchemy のオブジェクト・リレーショナル・マッパー (オープン・エンドのさまざまな方法でクラスをデータベースにマッピングします) により、オブジェクト・モデルとデータベース・スキーマを明確に分離した形で作成することができます。

SQLAlchemy-migrate はスキーマをマイグレーションするためのツールです。このツールは SQLAlchemy プロジェクトにおけるデータベース・スキーマの変更に対処するための手段となり、データベース変更に対するリポジトリー・メカニズムでもあります。このツールはコマンドラインから使用することも、Python コードの中から使用することもできます。

  1. SQLAlchemy をダウンロードし、sudo pip install SQLAlchemy==0.7.2 (あるいは、ご使用の任意のバージョンを指定) を実行してインストールします。
  2. SQLAlchemy-migrate をダウンロードします。DB2 はサポートされていないため、ibmdb2.patch という、DB2 用のパッチをインストールします (「ダウンロード」セクションを参照)。このパッチを SQLAlchemy-migrate のルート・フォルダーに保存し、-p1 < ibmdb2.patch コマンドを実行します。次に SQLAlchemy-migrate をインストールします。

ステップ 3: DB2 に対するサポートを追加する

DB2 を Python と接続するには、IBM Data Server Driver (ibm_dbibm_db_sa) をインストールします。また、OpenStack をインストールするにはスーパーユーザーの権限が必要になります。そこで、sudo を実行する人向けに必要な変数をグローバルに設定する必要があります。OpenStack で DB2 をサポートするには以下のドライバーとアダプターが必要です。

IBM Data Server Driver for ODBC and CLI を Fix Central からダウンロードし、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_db は、IBM データベース用 Python インターフェースを提供する、IBM データベース用 Python ドライバー兼 DBI ラッパーです。

  1. カレント・ディレクトリーを以下のように変更します。
    cd <ibm_db directory>
  2. sudo python setup.py build コマンドと sudo python setup.py install コマンドを実行します。

ibm_db_sa をダウンロードします。このアダプターは IBM データ・サーバーに対する Python/SQLAlchemy インターフェースを提供します。SQLAlchemy-migrate のコードと OpenStack のコードの要件に従い、このアダプターのコードには少し変更が加えられています。

  1. カレント・ディレクトリーを以下のように変更します。
    cd <ibm_db_sa directory>
  2. sudo python setup.py build コマンドと sudo python setup.py install コマンドを実行します。

ステップ 4: OpenStack スクリプトを使用する

OpenStack はデフォルトで、MySQL をサポートするコードを作成します。IBM DB2 はフィールドに関する要件が、NULL 可能 (データ型を設定可能) かどうかが構成されたり、索引型が構成されたり、(データベース表内の各レコードを一意に特定する) UNIQUE 制約を受け付けたりする等々、MySQL よりも厳しくなっています。そのため、(OpenStack の Nova (Compute) プロジェクト (IaaS システムの主要部分である、クラウド・コンピューティングのファブリック・コントローラー) を含めて) IBM DB2 の要件をサポートするコードで SQLAlchemy-migrate の Python コードを置き換える必要があります。

注: 私のテストによると、Nova はこれらの要件を適切にサポートしていないため、私は専用の Python スクリプトとして 082_essex.py と 096_recreate_dns_domains を用意しました。このスクリプトは「ダウンロード」セクションから入手することができます。この Python スクリプトをインストールし、DB2 に対して Nova を使用できるようにします。

これに代わる方法としては、以下の 2 つの方法があります。

  1. ソース・コードからインストールする場合には、<nova dir>/nova/db/sqlalchemy/migrate_repo/versions ディレクトリー配下のファイルをバックアップし、そのディレクトリーに上記 2 つのスクリプト・ファイルをコピーします。
  2. コマンドを実行することによってインストールする場合には、<nova dir*gt;/nova/db/sqlalchemy/migrate_repo/versions ディレクトリー配下のファイルをバックアップし、そのディレクトリーに上記 2 つのスクリプト・ファイルをコピーします。

私は、この問題に関するバグ・レポートを皆さんが追跡できるように、以下の内容で既に挙げてあります。

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」という名前の表を作成します。この表は特別で、ページ・サイズをデフォルトの 4K ではなく 8K にする必要があります (PAGESIZE=8K)。このコマンドを 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_connection または connection を変更し、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 コンポーネント (ID、トークン、カタログ、ポリシーなどのサービスを提供するコンポーネント) に対する設定:

  1. 「keystone」という名前の表を作成します。
  2. /etc/keystone/keystone.conf ファイルの sql_connection または connection を変更し、ibmdb://name:password@address:50000/keystone に設定します。

Cinder コンポーネント (サービスとしてブロック・ストレージを提供するコンポーネント) に対する設定:

  1. 「cinder」という名前の表を作成します。
  2. /etc/cinder/cinder.conf ファイルの sql_connection または connection を変更し、ibm_db_sa://name:password@address:50000/cinder に設定します。

ステップ 6: DB2 を使用して OpenStack を実行する

上記のステップを完了すると、OpenStack をインストールすることができます (例えば DevStack というシェル・スクリプトを使用すると、完全な OpenStack 開発環境を比較的容易に構築することができます)。それを終えると、DB2 を使用する新しい OpenStack 開発環境を実行することができます。

注: DevStack を使用して OpenStack 開発環境を構築する場合には 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 グループのユーザーでなければなりません。現在のユーザーを libvirtd グループに追加するには /etc/group を編集します。

最後の注: OpenStack は進化を続けているプラットフォームです。つまり各プロジェクトのコンポーネント用のスクリプトは、時々更新が必要になる可能性があります。OpenStack のサイトを訪れ、コンポーネントに対する変更がないかどうかを定期的にチェックしてください。


ダウンロード

内容ファイル名サイズ
Script filesscript_and_patches.zip42KB

参考文献

学ぶために

製品や技術を入手するために

  • IBM SmartCloud Enterprise にアクセスしてください。
  • 皆さんに最適な方法で IBM 製品を評価してください。製品の試用版をダウンロードする方法、オンラインで製品を試す方法、クラウド環境で製品を使う方法、あるいは SOA Sandbox で数時間を費やし、サービス指向アーキテクチャーの効率的な実装方法を学ぶ方法などがあります。

議論するために

  • developerWorks コミュニティーに参加してください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者によるブログ、フォーラム、グループ、ウィキを調べることができます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Information Management, Open source
ArticleID=848025
ArticleTitle=OpenStack で DB2 をサポートする
publish-date=12062012