目次


Linuxでの高可用性ミドルウェア、第5回:IBM DB2 Universal Database

DB2 UDBによる高可用性データベースのセットアップと実装

Comments

データは、現代のオンデマンド・ビジネスの血液です。そのデータを格納し、移動するシステム(サーバー、ネットワーク、データベース)は心臓です。しかし、どちらも、ハートビートがなければ、すなわち、そのデータにすぐにアクセスでき、最小限のダウンタイムでアクセスできるという信頼性がなければ、不活性のコンポーネントです。

はじめに

このシリーズの最初の記事「Linuxでの高可用性ミドルウェア、第1回:HeartbeatとApache Webサーバー」では、高可用性(HA)の概念とハートビートのインストールと構成の方法を解説しました。シリーズの最終回である今回は、ハートビートを使用したコールド・スタンバイ構成でのDB2 UDB 8.1のHA実装について解説します。

この実装では、ハートビートによってプライマリーの障害を検出した後、次のようにしてフェイルオーバーを開始します。

  • プライマリー上のDB2プロセスの停止
  • プライマリー上の共有ディスクのリリース
  • プライマリー上のサービスIPアドレスの削除
  • サービスIPアドレスのスタンバイへの追加
  • スタンバイ上の共有ディスクのマウント
  • スタンバイ・マシン上のDB2プロセスの再開始

この記事を最大限に活用するには、DB2 UDBと高可用性クラスターの基本的理解が必要です。このシリーズの最初の記事で、ソフトウェアにとって可用性が高いとは何を意味するのか、また、2ノード・システムにHigh-Availability Linuxプロジェクトのハートビート・ソフトウェアをインストールしてセットアップする方法を説明しています。

DB2 UDBとHAの基本

ハートビート・クラスターで使用されるDB2 UDBのデータは、ノード障害時に生き残ったノードからアクセスできるように、共有ディスクに置く必要があります。データベース・インスタンスを実行しているノードは、内部ディスク上に多数のファイルも保持しなければなりません。これらのファイルには、ノード上のすべてのデータベース・インスタンスに関するファイルが含まれます。

したがって、データベース・インスタンスに関するファイルは、内部ディスクと共有ディスクに分散されます。図1は、この編成を、インスタンスdb2inst1およびデータベースhadbのテスト・セットアップで説明されているDB2のファイルシステムの場合で示しています。

図1. インスタンスdb2inst1およびデータベースhadbのための高可用性DB2のセットアップ
Setup for high availability DB2 for instance db2inst1 and database hadb
Setup for high availability DB2 for instance db2inst1 and database hadb

このセットアップでは、

  • マシンha1は、プライマリーDB2 UDBデータベース・マシンとして機能します。
  • マシンha2は、ノードha1のバックアップとして機能します。
  • 各ノードに、DB2 UDB 8.1の専用ローカル・コピーがインストールされます。
  • データベースhadb固有のディレクトリー(db2inst1/NODE0000/SQL00001とdb2inst1/NODE0000/sqldbdir)は、共有ファイルシステム(/ha)上に保持されます。

データベースのインストール

このセクションのステップに従って、プライマリー・ノードとバックアップ・ノードの両方にDB2 UDB 8.1をインストールしてください。詳細については、DB2 Information Centerを参照してください(参考文献を参照)。

  1. rootとしてログインします。
  2. 次のコマンドを使用して、DB2 UDB 8.1インストール・イメージを解凍します。
    rm -rf /tmp/db28.1-install
    
    mkdir /tmp/db28.1-install
    
    tar xf C48THML.tar -C /tmp/db28.1-install

    ここで、C48THML.tarは、インストール用tarファイルです。
  3. カーネル・レベルを設定します。export LD_ASSUME_KERNEL=2.4.19
  4. DB2 Installationディスクで提供されているIBM Developer Kit for Linux, Java 2 Technology Editionは使用しないでください。DB2に付属のJDKをIBM 1.4.2 JDKに置き換えます。
    cd /tmp/db28.1-install/009_ESE_LNX_32_NLV
    
    mv ./db2/linux/java ./db2/linux/java.db2
    
    ln -s /opt/IBMJava2-142 ./db2/linux/java
  5. ./db2setupコマンドを使用して、DB2セットアップ・ウィザードを起動します。

ウィザード画面で、次の情報を使用します。

  • Product to installとして、DB2 UDB Enterprise Server Editionを使用します。
  • Group IDおよびUser IDについては、数字のグループID(gid)フィールドとユーザーID(uid)フィールドの値が両方のマシンで一致しなければなりません。ここでは、下記の表1に示されているIDを使用します。
  • Partitionについては、単一パーティション・インスタンスを選択します。
  • DB2 Instance Nameとして、db2inst1を選択します。
表1. DB2セットアップ用のグループおよびユーザー名とID
グループ名GIDユーザー名UID
dasadm12001dasusr12001
db2grp12002db2inst12002
db2fgrp12003db2fenc12003

高可用性データベースの作成

以下のステップに従って、高可用性データベースhadbを作成します。

  1. プライマリー(ha1)とバックアップ(ha2)の両方のノードにユーザーdb2inst1としてログオンします。su - db2inst1
  2. ノードha1とha2の両方でdb2iautoユーティリティーを次のように使用して(ユーザーdb2inst1として)、DB2(R)インスタンスがブート時に起動しないようにします。
    cd sqllib/bin
    
    ./db2iauto -off db2inst1
  3. DB2 HAを正しく実行するように、/etc/inittabファイルを修正します。ha1とhaの両方のノードで、システム起動時にDB2を起動する行をコメントアウトします。#fmc:2345:respawn:/opt/IBM/db2/V8.1/bin/db2fmcd #DB2 Fault Monitor Coordinator
  4. プライマリー・ノードha1でDB2を起動します。db2start
  5. 次のコマンドを使用して(ユーザーrootとして)、バックアップ(ha1)にファイルシステム/haをマウントします。mount /ha
  6. ノードha1上でこのコマンドを使用して、データベースhadbを作成します。db2 create database hadb on /ha
  7. ノードha1上でこのコマンドを使用して、データベースhadbに接続できることを確認します。db2 connect to hadb。接続できたら、次のコマンドを使用して切断します。db2 connect reset。
  8. ノードha1で、db2stopを使用してDB2を停止します。
  9. ユーザーrootとしてmount /haを使用して、バックアップ(ha2)にファイルシステム/haをマウントします。
  10. プライマリー・ノードha2で、db2startを使用してDB2を起動します。
  11. ユーザーdb2inst1として、ノードha2で次のコマンドを実行して、データベースhadbをカタログします。db2 catalog database hadb on /ha
  12. ノードha2でdb2 connect to hadbを使用して、データベースhadbに接続できることを確認します。接続できたら、db2 connect resetを使用して切断します。
  13. ノードha2で、db2stopを使用してDB2を停止します。

DB2を管理するためのハートビートの構成

次に、/etc/ha.d/haresourcesファイルを構成して(プライマリー・マシンとバックアップ・マシンの両方のノードで)、DB2プロセスを管理するスクリプトを含めます。このスクリプトは、ハートビートに付属しています。

変更済みのファイルの該当部分を以下に示します。

ha1.haw2.ibm.com 9.22.7.46
      Filesystem::hanfs.haw2.ibm.com:/ha::/ha::nfs::rw,hard db2::db2inst1

この行は、ハートビートの開始時に、ha1がクラスターIPアドレスを与え、共有ファイルシステムをマウントし、データベース・サーバーも開始することを指定しています。シャットダウン時には、ハートビートは、まず、データベース・サーバーを停止した後、共有ファイルシステムをアンマウントして、最後にIPをギブアップします。

DB2 UDBフェイルオーバーのテスト

このセクションでは、DB2データベースhadbの高可用性をテストする方法を説明します。これはおそらく、この記事で説明したプロセスの中で最も複雑なプロセスなので、詳細に注意してください。

  1. プライマリー・ノードでハートビート・サービスを開始し、次にバックアップ・ノードで開始します。ユーザーrootとして、/etc/rc.d/init.d/heartbeat startコマンドを使用します。 ハートビートが正常に開始されると、ha.cfファイルで構成したIPアドレスを持つ新しいインターフェースが表示されます。ハートビートを開始した後、プライマリー上のログ・ファイル(デフォルトは/var/log/ha-log)を見て、IPの引き継ぎが行われた後、DB2が開始されたことを確認してください。psコマンドを使用して、プライマリー・ノードでDB2プロセスが実行していることを確認します。ハートビートは、バックアップ上では上記のプロセスを開始しません。これは、プライマリーに障害が発生しなければ行われません。
  2. ha1ノードでユーザーdb2inst1として、データベースのステータスをチェックします。db2 -tf /ha/hahbcode/db2/listdb.sqlこの例の場合、このコマンドの出力は次のようになるはずです。

                               Active Databases
    
    Database name                              = HADB
    Applications connected currently           = 0
    Database path                              = /ha/db2inst1/NODE0000/SQL00001/
  3. 次のように、ha1ノードでユーザーdb2inst1として、テスト・テーブル(hadb.TestHATable)を作成します。db2 -tf /ha/hahbcode/db2/createdb.sql
  4. 次に、ha1ノードでユーザーdb2inst1として、テスト・テーブルに1行のデータを挿入します。db2 -tf /ha/hahbcode/db2/insertdb.sql
  5. ha1ノードでユーザーdb2inst1として、テスト・テーブルの内容を検査します。db2 -tf /ha/hahbcode/db2/selectdb.sql前のステップで挿入したデータ行を確認できるはずです。この例では、出力は次のとおりです。
    [db2inst1@ha1 db2inst1]$ db2 -tf /ha/hahbcode/db2/selectdb.sql
    
       Database Connection Information
    
     Database server        = DB2/LINUX 8.1.0
     SQL authorization ID   = DB2INST1
     Local database alias   = HADB
    
    
    
    COL1        COL2
    ----------- ------------
             10 Hello
    
      1 record(s) selected.
    
    
    DB20000I  The SQL command completed successfully.
  6. フェイルオーバーをシミュレートするには、プライマリー・システムでユーザーrootとしてハートビートを停止します。/etc/rc.d/init.d/heartbeat stop1分以内に、すべてのサービスがバックアップ・マシン上に表示されるはずです。/var/log/ha-logファイルをチェックして、バックアップ・マシンでpsコマンドを使用すると、DB2がバックアップ上で実行していることを確認できます。
  7. ha2ノードでユーザーdb2inst1として、データベースのステータスをチェックします。db2 -tf /ha/hahbcode/db2/listdb.sqlこの例では、このコマンドの出力は次のとおりです。

                               Active Databases
    
    Database name                              = HADB
    Applications connected currently           = 0
    Database path                              = /ha/db2inst1/NODE0000/SQL00001/
  8. ha2ノードでユーザーdb2inst1として、テスト・テーブル(hadb.TestHATable)の内容を検査します。db2 -tf /ha/hahbcode/db2/selectdb.sqlDB2がノードha1上で実行していたときに挿入したデータ行を確認できるはずです。この例では、出力は次のとおりです。
    [db2inst1@ha2 db2inst1]$ db2 -tf /ha/hahbcode/db2/selectdb.sql
    
       Database Connection Information
    
     Database server        = DB2/LINUX 8.1.0
     SQL authorization ID   = DB2INST1
     Local database alias   = HADB
    
    
    
    COL1        COL2
    ----------- ------------
             10 Hello
    
      1 record(s) selected.
    
    
    DB20000I  The SQL command completed successfully.

    これは、データがプライマリーからバックアップへのフェイルオーバーを生き延びたことを示しています。
  9. ha2ノードでユーザーdb2inst1として、テスト・テーブルに1行のデータを挿入します。db2 -tf /ha/hahbcode/db2/insertdb.sql
  10. プライマリー・システムでユーザーrootとしてハートビートを開始することによって、プライマリー・ノードを起動できます。/etc/rc.d/init.d/heartbeat start1分以内に、すべてのサービスがプライマリー・マシン上に表示されるはずです。/var/log/ha-logファイルをチェックして、バックアップ・マシンでpsコマンドを使用すると、DB2がプライマリー上で実行していることを確認できます。
  11. ha1ノードでユーザーdb2inst1として、テスト・テーブルの内容を検査します。db2 -tf /ha/hahbcode/db2/selectdb.sql2行のデータを確認できるはずです。この例では、出力は次のとおりです。
    [db2inst1@ha1 db2inst1]$ db2 -tf /ha/hahbcode/db2/selectdb.sql
    
       Database Connection Information
    
     Database server        = DB2/LINUX 8.1.0
     SQL authorization ID   = DB2INST1
     Local database alias   = HADB
    
    
    
    COL1        COL2
    ----------- ------------
             10 Hello
             10 Hello
    
      2 record(s) selected.
    
    
    DB20000I  The SQL command completed successfully.

    これは、データがバックアップからプライマリーへのフェイルオーバーを生き延びたことを示しています。

まとめ

重要なデータベース・アプリケーションには、データ損失を防ぎ、データ・ストアの高可用性を保証する堅牢な戦略が必要です。DB2 UDBは、優れた可用性特性によって大規模データベースの管理を容易にします。

この記事では、オープン・ソース・ソフトウェアと安価なハードウェアを使用してDB2 UDBデータベースのHAを容易に、しかも費用効率的に実装できることを説明しました。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux, Open source, Information Management
ArticleID=228547
ArticleTitle=Linuxでの高可用性ミドルウェア、第5回:IBM DB2 Universal Database
publish-date=07142005