26.2.6 MC/ServiceGuardに関する準備
クラスタソフトウェアにMC/ServiceGuardを使用している場合にこの項をお読みください。
この項の説明とMC/ServiceGuardのマニュアルを参照して環境設定を行ってください。MC/ServiceGuardの環境設定方法の詳細については,MC/ServiceGuardのマニュアルを参照してください。
- 〈この項の構成〉
(1) パッケージとは
MC/ServiceGuardが系切り替えを行う単位をパッケージといいます。パッケージとはアプリケーションが動くために必要な次に示すリソースの集合のことです。
-
ボリュームグループ
-
ネットワークアドレス
-
サービス(アプリケーション)
-
起動又は停止時の操作(スクリプト)
通常,HiRDBと連携するリソースを一つのパッケージとして扱い,MC/ServiceGuardによって系を切り替えます。パッケージの概要,及びMC/ServiceGuardによるパッケージ処理の流れを次の図に示します。
(2) HiRDBを開始するシェルスクリプト
HiRDBを開始($PDDIR/bin/pdstartを実行)するシェルスクリプトを作成し,パッケージの開始時(サービス開始前処理時)にそのシェルスクリプトを実行するようにしてください。そのためには,MC/ServiceGuardのパッケージコントロールスクリプト中にHiRDBを開始するシェルスクリプトを実行する設定をします。HiRDBの開始処理の流れを次の図に示します。
(a) HiRDBを開始するシェルスクリプトの例
HiRDBを開始するシェルスクリプトの例を次に示します。
●HiRDB/シングルサーバの場合
#!/bin/sh PDDIR=/HiRDB_S PDCONFPATH=${PDDIR}/conf SHLIB_PATH=${PDDIR}/lib PATH=${PATH}:${PDDIR}/bin export PDDIR PDCONFPATH SHLIB_PATH PATH ${PDDIR}/bin/pdstart>/dev/null 2>&1
●HiRDB/パラレルサーバの場合
#!/bin/sh PDDIR=/HiRDB_P PDCONFPATH=${PDDIR}/conf SHLIB_PATH=${PDDIR}/lib PATH=${PATH}:${PDDIR}/bin export PDDIR PDCONFPATH SHLIB_PATH PATH ${PDDIR}/bin/pdstart -q>/dev/null 2>&1
- 注
-
2行目のPDDIRディレクトリは各環境に合わせて変更してください。
pdstart -qコマンドは,系切り替え機能使用時にHiRDB/パラレルサーバのユニットを開始するコマンドです。
(b) pdstartコマンドが失敗してHiRDBが開始できない場合
pdstartコマンドが失敗する原因には次に示すものがあります。
-
HiRDBが開始中です。
-
HiRDBが稼働中です。
-
HiRDBが正常終了又は計画停止中です。
-
HiRDBが異常終了処理中です。
-
HiRDBの環境設定が正しくありません。
1〜4はパッケージが停止していない状態でパッケージを開始した場合に起こります。このタイミングを正確に判断する手段はありません。この場合,pdstartコマンドのエラーはほかに影響しないため,エラーを無視しても問題ありません。
5はHiRDBの環境設定が正しくないため,HiRDBを開始できない状態です。この場合はHiRDBの環境設定をし直してください。
(c) 注意事項
システム用RDエリアを作成していない場合,HiRDBの開始時(pdstartコマンド実行時)にシステム用RDエリアを作成する(pdinitコマンドを実行する)指示が出ます。MC/ServiceGuardから起動したpdstartコマンドはバックグラウンド実行のため,この指示に応答できません。したがって,MC/ServiceGuardの運用を開始する前にpdstartコマンドを実行して,システム用RDエリアが作成されているかどうかを確認してください。
(3) HiRDBを終了するシェルスクリプト
HiRDBを終了($PDDIR/bin/pdstopを実行)するシェルスクリプトを作成し,パッケージの停止時にそのシェルスクリプトを実行するようにしてください。そのためには,MC/ServiceGuardのパッケージコントロールスクリプト中にHiRDBを終了するシェルスクリプトを実行する設定をします。HiRDBの終了処理の流れを次の図に示します。
(a) HiRDBを終了するシェルスクリプトの例
HiRDBを終了するシェルスクリプトの例を次に示します。
●HiRDB/シングルサーバの場合
#!/bin/sh PDDIR=/HiRDB_S PDCONFPATH=${PDDIR}/conf SHLIB_PATH=${PDDIR}/lib PATH=${PATH}:${PDDIR}/bin export PDDIR PDCONFPATH SHLIB_PATH PATH ${PDDIR}/bin/pdstop -f -q>/dev/null 2>&1
- 注
-
HiRDBを強制終了するオプション(pdstop -f -q)を指定してください。
●HiRDB/パラレルサーバの場合
#!/bin/sh PDDIR=/HiRDB_P PDCONFPATH=${PDDIR}/conf SHLIB_PATH=${PDDIR}/lib PATH=${PATH}:${PDDIR}/bin export PDDIR PDCONFPATH SHLIB_PATH PATH ${PDDIR}/bin/pdstop -z -q>/dev/null 2>&1
- 注
-
HiRDBを強制終了するオプション(pdstop -z -q)を指定してください。
(b) 注意事項
-
パッケージの停止処理は障害発生による系切り替え時にも実行されます。このとき,すぐに系が切り替わるようにHiRDBを強制終了し,待機系でHiRDBを再開始して業務を引き継ぐようにします。
-
正常終了又は計画停止などの終了モードをシェルスクリプト中に指定できません。
-
HiRDBを正常終了する場合は,あらかじめHiRDBをpdstopで終了後,パッケージを非アクティブ化してください。
(4) ダミープロセスを生成するシェルスクリプト(MC/ServiceGuardが監視するサービス)(モニタモード限定)
MC/ServiceGuardはサービス(アプリケーション)の監視をします。MC/ServiceGuardはサービスを子プロセスとして実行し,サービスの終了を検知した場合にそれをパッケージの障害と判断します。HiRDBの開始及び終了処理以外のHiRDBとMC/ServiceGuardとのインタフェースはサービスの終了(exit)だけです。HiRDBの全プロセスはpdprcdが監視していて,HiRDBの異常終了時にはHiRDBの機能によって再開始を行うため,MC/ServiceGuardにHiRDBのプロセスを監視してもらう必要はありません。プロセスの起動と監視の関連を次の図に示します。
なお,パッケージとしてのHiRDBが動作中である状態を維持させるために,ダミーのサービス(ダミープロセス)が必要です。このダミープロセスは,次に示す条件をすべて満たす必要があります。
- 〈条件〉
-
-
サーバプロセスを常駐させます。
-
MC/ServiceGuardはパッケージの停止を指示するときにSIGTERMを発行するため,SIGTERMを受信したらプロセスを終了します。
-
MC/ServiceGuardにHiRDBの異常終了を通知する必要はありません。
-
ダミープロセスを生成するシェルスクリプトの例を次に示します。
#!/bin/sh trap exit SIGTERM while true do sleep 5 done exit
- 〔説明〕
-
Bourneシェルでコーディングした例です。SIGTERM(=15)を受信するまで無限ループ内でsleepを実行しています。そのほかの実現方法も可能です。
このシェルスクリプトをパッケージコントロールスクリプト中のSERVICE_CMDに指定します。常駐プロセスの起動には,パッケージコントロールスクリプト中のSERVICE_RESTART[]="-R"として無限起動扱いにすることをお勧めします。そうしないと,プロセスの予期しない終了がHiRDBのサーバの異常終了扱いにされてしまいます。
(5) パッケージのIPアドレス
パッケージのIPアドレス(再配置可能なIPアドレス)をパッケージコントロールスクリプトに指定します。
IP[0] = パッケージのIPアドレス(再配置可能なIPアドレス)
(6) MC/ServiceGuardとHiRDBの連動構成例
MC/ServiceGuardとHiRDBの連動構成例について説明します。システム構成は次の図に示すとおりとします。なお,HiRDBはHiRDB/シングルサーバとします。
(a) パッケージコントロールスクリプト
●システム構成に関する定義
VGCHANGE="vgchange -a e" VG[0]=vg10 LV[0]=/dev/vg10/lvol11; FS[0]=/hirdb IP[0]=192.168.30.51 SUBNET[0]=192.168.30.0
●MC/ServiceGuardのサービスの登録(HiRDBの開始,終了,及び監視をするための定義)
SERVICE_NAME[0]=hirdb #サービス=監視するプロセスを指定します[必須] #MC/ServiceGuardが起動してプロセスの終了を監視します SERVICE_CMD[0]=/etc/cmcluster/hirdb_pkg/monitor.sh 1 SERVICE_RESTART[0]="-R" #サービス起動前処理:ここでHiRDBを開始します function customer_defined_run_cmds { /etc/cmcluster/hirdb_pkg/run.sh 2 test_return 51 } #サービス停止前処理:ここでHiRDBを終了します function customer_defined_halt_cmds { /etc/cmcluster/hirdb_pkg/halt.sh 3 test_return 52 }
- 〔説明〕
-
-
ダミープロセスを生成するシェルスクリプトを指定します。
-
HiRDBを開始するシェルスクリプトを指定します。
-
HiRDBを終了するシェルスクリプトを指定します。
-
(b) シェルスクリプト
●ダミープロセスを生成するシェルスクリプト(monitor.sh)
#!/bin/ksh trap exit SIGTERM while true do sleep 5 done exit
●HiRDBを開始するシェルスクリプト(run.sh)
#!/bin/sh PDDIR=/home/test PDCONFPATH=${PDDIR}/conf SHLIB_PATH=${PDDIR}/lib PATH=${PATH}:${PDDIR}/bin export PDDIR PDCONFPATH SHLIB_PATH PATH /home/test/bin/pdstart > /dev/null 2>&1
●HiRDBを終了するシェルスクリプト(halt.sh)
#!/bin/sh export PDDIR=/home/test export PDCONFPATH=${PDDIR}/conf export SHLIB_PATH=${PDDIR}/lib export PATH=${PATH}:${PDDIR}/bin /home/test/bin/pdstop -f -q> /dev/null 2>&1
(c) HiRDBシステム定義
●システム共通定義
set pd_mode_conf = MANUAL1 set pd_ha_ipaddr_inherit = Y set pd_ha = use pdunit -x pkghost -u puid -d /home/test pdstart -t SDS -s sds -x pkghost
注 パッケージにアクセスするための再配置可能なIPアドレスに対応するホスト名を指定します。
●ユニット情報定義
set pd_hostname = vr2001