Generic Applicationを使用します。
■作成するスクリプト
GenericApplication 作成には以下のスクリプトを用意する必要があります。
1. restore (起動)
2. remove (停止)
3. quickCheck (監視、任意)
※Windos版では、更に詳細な監視内容を定義したdeepCheckを使用可能です。
4. recover (ローカルリカバリ、 任意)
“recover” は問題が発生した場合にまずローカルでリカバリを実施し、
それでも復旧しない場合に Standby サーバに切替を行います。こちらの
作成は任意となっておりますが、作成しない場合、障害発生検知時、
すぐに Standby サーバへの切替が発生します
■スクリプトについて
障害発生時の一般的な流れは以下になります。
(ローカルリカバリにも失敗した場合)
サーバ1:
動作チェック(quickCheck 及び deepCheck) -> ローカルリカバリ (recover) -> 停止 (remove) —
サーバ2:
–> 起動 (restore) -> 動作チェック(quickCheck及びdeepCheck) ・・・繰り返し
■戻り値について
各スクリプトは以下の戻り値をもってスクリプト実行の成否が判断されます。
・障害検出なし 戻り値 0(exit 0)
・障害検出あり 戻り値 1(exit 1)
exit 1 で返った場合、以下の動作となります。
quickCheck 及び deepCheck-> recoverスクリプトを起動
recover -> Standby 側にて restore スクリプトを起動
remove -> 切替動作停止。ステータス等の変更は無し
restore -> OSF にステータス変更
■実装上の留意事項(各スクリプトのタイムアウトについて)
quickCheckについては、LifeKeeperの仕様上22秒以内(※)にスクリプトの実装が終
了する必要があります。22秒以内に監視結果が返ってこなかった場合、障害とは検出され
ず次回のチェック結果を待つことになります。
※Windows版の場合監視スクリプトのタイムアウト値は、リソース作成時に作成した監視
間隔に依存します。クイックチェック・詳細チェックそれぞれのタイムアウト値は以下の式で
決定しています。
クイックチェックのタイムアウト値=
クイックチェックの監視間隔 × MAX_QUICK_CHECK(1回)
詳細チェックのタイムアウト値=
詳細チェックの監視間隔 × MAX_DEEP_CHECK (2回)
MAX_QUICK_CHECKとMAX_DEEP_CHECKの値はレジストリ内で定義されていま
す。この値を変更することはできません。上記の時間を超えても監視スクリプトが終了しな
い場合には、Linux版と同様の処理となります。
remove、restoreスクリプトにはタイムアウトによる終了処理の実装がありません。これ
はアプリケーションにより起動処理及び停止処理に掛かる時間が異なるための仕様です。
そのため、切替処理などにおいてGenericARKで起動処理・停止処理がループしてし
まったり応答が無いまま待機状態となってしまった場合を考慮したスクリプト作成が必要と
なります。
また、二重での起動や二重での停止によるエラー回避も考慮に入れた実装を行なう必要
があります。
下記は、Apache のLifeKeeper for Linux向けのサンプルスクリプトです。
※ 上記の「実装上の留意事項」を配慮したスクリプトではありません。
//////// restore サンプル ////////
#!/usr/bin/ksh
# Restore Sample Script
LANG=C
/etc/rc.d/init.d/httpd start
/etc/init.d/httpd status | grep running > /dev/null 2>&1
if [ $? -ne “0” ] then
exit 1
fi
exit 0
//////// remove サンプル ////////
#!/usr/bin/ksh
# Remove Sample Script
/etc/rc.d/init.d/httpd stop
/etc/init.d/httpd status | grep stopped > /dev/null 2>&1
if [ $? -ne “0” ] then
exit 1
fi
exit 0
//////// quickCheck サンプル ////////
#!/usr/bin/ksh
# quickCheck Sample Script
LANG=C
/etc/init.d/httpd status | grep running > /dev/null 2>&1
if [ $? -ne “0” ] then
exit 1
fi
exit 0
//////// recover サンプル ////////
#!/usr/bin/ksh
# recover Sample Script
LANG=C
/etc/rc.d/init.d/httpd restart
/etc/init.d/httpd status | grep running > /dev/null 2>&1
if [ $? -ne “0” ] then
exit 1
fi
exit 0