Amazon Web Services ブログ
高い可用性を持つ IBM Db2 データベースをAWS上に構築する
多くのAWSのお客様がミッションクリティカルなワークロードをIBM Db2データベースプラットフォームを利用して実行しています。一般的に、こういったワークロードには、ノード障害やデータセンターサイトの障害時でも運用を続けられる高い可用性が必要とされます。
従来のIBMソフトウェアにおける高可用性手法は、共有ディスクと仮想IPアドレスを使用し、これをTivoli System Automation for Multi-Platforms (TSAMP)でコントロールするというものでした。このブログポストでは ネイティブのIBMとAWSの技術を用い、かつ自動化された手法を説明します。これによりミッションクリティカルなDb2ワークロードをAWS上で稼働でき、高可用性のDb2データベースを安心して提供できるようになります。
注:このガイドで使用するIBM Db2は、フル機能が90日間利用できるトライアル版のDb2 for Linux, Unix and Microsoft Windows バージョン11です。トライアル期間が終了したあとは、必要とするエディションを選択、購入し、ライセンスファイルを導入して利用することが可能です。このガイドで利用している機能が使用できるエディションは、Db2 Advanced Enterprise Server Edition、 Db2 Enterprise Server Edition、Db2 Advanced Workgroup Server Edition、Db2 Workgroup Server Editionです。より詳細な情報はIBM Webサイトを確認してください。(訳注:こちらにエディションの違いの詳細があります)
この記事のステップを進めていくと、2つのアベイラビリティゾーン(AZ)にまたがって高可用性を実現するDb2 データベースを作成します。データはAZ1にあるプライマリーインスタンスとAZ2にあるスタンバイインスタンスの間でHADR(High Availability Disaster Recovery)機能でレプリケーションされます。もしプライマリーノードが利用できなくなった場合、TSAMPがそれを検知し、スタンバイインスタンスにフェイルオーバーさせます。Db2 クライアントアプリケーションは自動クライアントリルート機能 (IBM Automatic Client Reroute : ACR)により自動的に新しくプライマリーになったインスタンスに再接続されます。
事前準備のステップ
このソリューションはAWSのデフォルトVPC (Virtual Private Cloud)にデプロイされます。デフォルトVPCはAWSアカウント作成時に自動的に各リージョンに作成されています。もしデフォルトVPCが無い場合は、次のステップに進む前に以下を実行してください。
- 同一リージョンの2つのパブリックサブネットを持つVPCを作成してください。それぞれのサブネットは別のAZに配置してください。
- VPCにインターネットゲートウェイを配置してください。それぞれのサブネットはインターネットゲートウェイ経由でインターネットに出られるようにします。
最初にAmazon S3 バケットを作成し、IBM Db2インストールファイルを以下のようにしてアップロードします。このS3バケットは、この後の自動的なビルドサイクルの中でプライマリーとスタンバイの情報を交換するためにも使用されます。
- Db2ソリューションをデプロイするのと同じAWSリージョンにS3バケットを作成します。バケットのコンフィグで追加の設定は不要です。
- バケットの中にdb2というフォルダ(プレフィックス)を作成します。
- IBM Db2 の90日間トライアルのLinux版(IBM Db2 – 90 Day Trial)をIBMウェブサイトからダウンロードします
- ダウンロードしたgunzipファイルを、先ほど作成したS3バケットのdb2フォルダ以下にアップロードします。
高可用性のDb2ソリューションを構築する
ソリューションの構築はAWS CloudFormationテンプレートにより自動化されています。こちらのリンクでCloudFormationコンソールを開き、開始してください。(訳注:リンク先は自動的にアイルランドリージョンが指定されているため、必要であれば別のリージョンに切り替えてください)
本CloudFormationテンプレートはいくつかのパラメータ入力を必要とします:
VpcId
: ソリューションを構築するVPCのIDを入力します。Stack Name
: スタックに分かりかすい名前を付けます。例:Db2-hadrKeyPairName
: 登録済のAmazon EC2キーペア名を指定します。このキーペアでDb2のEC2インスタンスにアクセスします。LinuxInstanceType
: ワークロードで必要とされるEC2インスタンスタイプを選択します。DB2VolumeSize
: データベース用のAmazon EBSボリュームのサイズを指定します。S3Bucket
: 事前に作成したS3バケット名を指定します。DB2Instance
: デフォルトのまま利用するか、Db2インスタンス名を指定します。DB2Database
: デフォルトのまま利用するか、Db2データベース名を指定します。SyncMode
: 必要とするHADRの同期モードを選択します。SSHCidr
: 適切なCIDRブロックを入力します。このCIDRブロック内にあるサーバからDb2のEC2インスタンスにSSH接続が許可されます。DB2ClientCidr
: 適切なCIDRブロックを入力します。このCIDRブロック内にあるサーバからDb2データベースへの(Db2クライアントとしての)接続が許可されます。PrimaryEC2InstanceName
: デフォルトのまま利用するか、プライマリEC2インスタンスの名前を入力します。PrimarySubnetId
: プライマリEC2インスタンスが入るサブネットIDを入力します。SecondaryEC2InstanceName
: デフォルトのまま利用するか、セカンダリEC2インスタンスの名前を入力します。SecondarySubnetId
: セカンダリEC2インスタンスが入るサブネットIDを入力します。
パラメータを入力し終わったら、以下のように進めます:
- Next(次へ)をクリック。
- 次の画面で、タグ、IAMロール、もしくは追加のオプションを選択し、Next(次へ)をクリック。
- 最終画面で内容を確認し、Create(作成)ボタンでソリューションの構築を開始します。
このソリューションではEC2インスタンスのブートストラップ(初期構築)にユーザデータを使用しています。より詳細な情報を得るには、CloudFormationテンプレートのuser dataセクションを確認してください。ビルドの進捗を確認するには、それぞれのEC2インスタンスにSSHでログインし、以下のコマンドを実行してください。: tail –f /var/log/cloud-init-output.log
Db2クラスターの詳細を確認する
CloudFormationテンプレートに記載されたブートストラップシーケンスが完了すると、クラスターの詳細を3つのIBMのコマンドを利用することで確認できます: lssam
, lsrpnode
および db2pd
です。
HADRの設定は、プライマリー、スタンバイそれぞれのインスタンスでrootユーザにて以下のコマンドを実行することで確認できます(以下のtestdbの部分はご自身が指定された名前に変更して実行してください)。
su - db2inst1 -c "db2pd -hadr -db testdb"
それぞれのインスタンスでこのような結果が得られるはずです。
この出力結果のうち以下に注目してください:
HADR_ROLE
: このパラメータはインスタンスがプライマリノードかスタンバイ(セカンダリ)かを表示します。HADR_STATE
: このパラメータはPEER
と表示されるはずです。HADR_CONNECT_STATUS
: このパラメータはCONNECTED
と表示されるはずです。
プライマリ、もしくはスタンバイインスタンスでrootユーザで lsrpnode
コマンドを使用することでTSAクラスターの状態を得ることができます。以下のような結果が得られるはずです。これはそれぞれのノードでのRSCT(IBM Reliable Scalable Cluster Technorogy) のバージョンを示しています。
lssam
コマンドをプライマリーインスタンスでrootで実行することでTSAクラスターリソースの確認が可能です。以下のような表示が得られるはずです。
lssam
コマンドは、TSAクラスター内のリソースとリソースグループを表示します。上記でオフライン(Offline)となっているリソースは、データベースがスタンバイノードでアクティブになっていない事を示しています。
クラスターをテストする
以下のコマンドを利用して手動でのフェイルオーバーを実行しクラスターをテストすることが可能です。
以下は実行例です。
コマンド実行後に lssam
コマンドを数回実行して、スタンバイノードにデータベースがフェイルオーバーされることを確認してください。
自動クライアントリルート(Automatic Client Reroute: ACR)をテストする
次にACRをテストします。簡単に実行するため、Db2クライアントインスタンスからDBA(DB管理者)ユーザを利用してデータベースに接続します。接続できるようにするには、DBAユーザがプライマリ、スタンバイ両方のインスタンスでパスワード設定されている必要があります。DBAユーザにパスワードを設定するために、以下のコマンドを両方のDb2インスタンスで実行してください。
以下は実行例です。(この例ではDBAユーザ名はデフォルトのdb2inst1を使用しています)
続いて、Db2クライアントとなるサーバに(ローカルPCから)SSHで接続し、以下のステップを実行します。以下のステップではプライマリーインスタンスへ接続し、データベース設定の詳細を取得します。プライマリーインスタンスは”Alternate server host name”(代替サーバホスト名)を返します。ACRに対応したDb2クライアントはこの代替ホスト名を記憶しておき、プライマリーインスタンスが利用できない場合は自動的に代替ホストに接続します。
以下のコマンドをDBAユーザで、Db2クライアントから実行します:
- Db2サーバのエリアス(接続情報)を以下のコマンドで作成します。
以下が例です。
- 作成した接続情報の上に以下のコマンドでデータベース名をカタログします。
以下が例です。
- 以下のコマンドでデータベースに接続します。
以下が例です。
- 以下のコマンドでスタンバイインスタンスの情報を表示させます。この情報はAlternate server hostnameのところに表示されます。
実行結果の例は以下の通りです。
サマリー
これでAWS上で高可用性のDb2データベースを稼働することが出来ました。プライマリーインスタンスに書き込まれた全てのトランザクションは、設定した同期モード(ASYNC-同期、NEARSYNC-近同期、SYNC-同期)にしたがってスタンバイインスタンスに反映されます。
プライマリーインスタンスに障害が発生したり、利用できなくなると、TSAMPはそれを検知し自動的にスタンバイインスタンスへフェイルオーバーさせます。フェイルオーバーが発生するとDb2クライアントはプライマリーインスタンスが利用不可になった事を検知し、自動的に(以前の)スタンバイインスタンスに接続します。
プロダクション(本番)用途でこのソリューションを利用する際にはいくつかの変更をする必要があるでしょう。例えば、Db2サーバをプライベートサブネットに配置するように変更する必要があるかもしれません。もしくは、レスポンスファイル(インストールの設定情報)をカスタマイズしたり、Db2のライセンス設定部分を自動化する等も検討することも考えられます。
さあ、準備は整いました!ミッションクリティカルのDB2ベースのアプリケーションをAWS上にマイグレーションしましょう!
著者について
Nicholas AnsellはAWSプロフェッショナルサービスのシニアコンサルタントです。彼はお客様のゴールをAWSサービスを活用して実現できるよう、お客様をご支援しています。
翻訳:下佐粉 昭 (@simosako)
原文:https://thinkwithwp.com/jp/blogs/database/creating-highly-available-ibm-db2-databases-in-aws/