ISVアプリケーションや利用者アプリケーションを、userApplicationの状態遷移に連動して起動/停止するためには、Onlineスクリプト、OfflineスクリプトおよびCheckスクリプトを作成してください。
作成したスクリプトは、Cmdlineリソースに設定して、そのリソースをuserApplicationに設定します。詳細については、“6.7.3.1 Cmdlineリソースの設定”を参照してください。
Onlineスクリプトは、userApplicationがOnlineまたはStandbyに状態遷移する場合に起動されます。
Offlineスクリプトは、userApplicationがOfflineに状態遷移する場合に起動されます。
Checkスクリプトは、Online/Offlineスクリプトにより起動/停止されるリソースの状態を監視するために用いられます。
ここでは、スクリプトの例と、スクリプト作成時の注意事項を説明します。
注意
Onlineスクリプト、Offlineスクリプト、およびCheckスクリプトでは、サーバ毎の設定 (”/etc/profile” や “/etc/bashrc”等)である環境変数が設定を受継ぐことを保証していません。このため、アプリケーションの処理ロジックで使用する環境変数はOnlineスクリプト、Offlineスクリプト、およびCheckスクリプトの中で定義してください。
Cmdlineリソースの設定では、OnlineスクリプトとOfflineスクリプトを、それぞれStartスクリプトとStopスクリプトとして設定します。以下に、サンプルを示します。
Startスクリプト/Stopスクリプト
#!/bin/sh # # Script.sample # Sample of Online/Offline Script # # Copyright(c) 2003 FUJITSU LIMITED. # All rights reserved. # # $1 -c : OnlineScript # -u : OfflineScript if [[ $1 = "-c" ]]; then # Start your application elif [[ $1 = "-u" ]]; then # Stop your application else # Default operation exit 1 # Error fi exit 0
上記のScript.sampleはStartスクリプトとStopスクリプトを兼ねています。
次にCheckスクリプトのサンプルを示します。
Checkスクリプト
#!/bin/sh # # Script.sample.check # Sample of Check script # # Copyright(c) 2003 FUJITSU LIMITED. # All rights reserved. # # 対象リソースの現在の状態をチェックします。 # 状態が Online の場合: exit 0 # それ以外の状態の場合: exit 1
以上のスクリプトは、Cmdlineリソースに次のように設定します。
Startスクリプト $FULL_PATH/Script.sample -c
Stopスクリプト $FULL_PATH/Script.sample -u
Checkスクリプト $FULL_PATH/Script.sample.check
設定方法については“6.7.3.1 Cmdlineリソースの設定”を参照してください。
●ホットスタンバイ運用の場合
Cmdlineリソースについてホットスタンバイ運用を行う場合には、次の対応が必要となります。
Online/Offline/Checkスクリプトのホットスタンバイ対応
Cmdlineリソースへの属性の設定
Online/Offline/Checkスクリプトのホットスタンバイ対応
Onlineスクリプト、OfflineスクリプトおよびCheckスクリプトをホットスタンバイ運用に対応した記述にします。 以下にホットスタンバイ運用に対応したOnline/Offlineスクリプトのサンプルを示します。
Startスクリプト/Stopスクリプト(ホットスタンバイ運用)
#!/bin/sh # # Script.sample # Sample of Online/Offline Script # # Copyright(c) 2003 FUJITSU LIMITED. # All rights reserved. # # $1 -c : OnlineScript # -u : OfflineScript if [[ $1 = "-c" ]]; then if [ ${HV_LAST_DET_REPORT} = "Offline" ]; then if [ ${HV_INTENDED_STATE} = "Standby" ]; then # commands for Offline -> Standby else # commands for Offline -> Online fi else # commands for Standby -> Online fi elif [[ $1 = "-u" ]]; then if [ ${HV_LAST_DET_REPORT} = "Standby" ]; then # commands for Standby -> Offline else # commands for Online -> Offline fi else # Default operation exit 1 # Error fi exit 0
次にホットスタンバイ運用に対応したCheckスクリプトのサンプルを示します。
Checkスクリプト(ホットスタンバイ運用)
#!/bin/sh # # Script.sample.check # Sample of Check script # # Copyright(c) 2003 FUJITSU LIMITED. # All rights reserved. # # 対象リソースの現在の状態をチェックします。 # 状態が Online の場合: exit 0 # 状態が Standby の場合: exit 4 # 状態が Faulted の場合: exit 2 # 状態が Offline の場合: exit 1
Cmdlineリソースへの属性の設定
CmdlineリソースのSTANDBYCAPABLE属性およびALLEXITCODES属性を有効にします。
詳細については、“6.7.3.1 Cmdlineリソースの設定”を参照してください。
●Start/Stopスクリプトの終了コードについて
Start/Stopスクリプトの終了コードにより、userApplicationの状態遷移の動作が変わります。以下に終了コードと状態遷移の動作を示します。
設定されたCmdlineリソースの状態遷移が正常に処理されたとみなされて、userApplicationの状態遷移処理が継続されます。userApplicationに設定された全てのリソースが正常に処理されるとuserApplicationの状態遷移が正常動作したことになります。
設定されたCmdlineリソースの状態遷移に異常が発生したとみなされて、userApplicationの状態遷移処理が中断します。
●Checkスクリプトの終了コードについて
Cmdlineリソースの状態は、Checkスクリプトの終了コードにより判断されます。 以下に終了コードとCmdlineリソースの状態の対応を示します。
CmdlineリソースのALLEXITCODES属性を有効にすると、Checkスクリプトはより詳細なリソース状態を返すことができるようになります。 以下にALLEXITCODES属性が有効な場合の終了コードとCmdlineリソースの状態の対応を示します。
詳細については“HELP”を参照してください。
●タイムアウトについて
指定された時間内にOnlineスクリプトまたはOfflineスクリプトの処理が完了しない場合はタイムアウトとなり、スクリプトの処理はシグナルSIGTERMにより中断され、状態遷移がエラーとなります。
デフォルト:300秒
タイムアウト値は Cmdlineリソースの「TIMEOUT」Flag値で指定可能です。
Cmdlineリソース作成時に、“6.7.3.1 Cmdlineリソースの設定”の“属性の変更”を参照し、適切なタイムアウト値を設定してください。また、Cmdlineリソース使用時にタイムアウトが発生した場合には、“8.1 クラスタアプリケーションの変更”によりタイムアウト値を適切な値に変更してください。
OnlineスクリプトおよびOfflineスクリプト実行時には、次の環境変数が設定されます。
設定される環境変数を以下に示します。
環境変数 | 概要 |
---|---|
HV_APPLICATION | リソースが属している userApplication名が設定されます。 例) app1 |
HV_AUTORECOVER | スクリプトの呼び出しがAutoRecoverに起因するかどうかの情報が設定されます。AutoRecoverについては、“PRIMECLUSTER RMS 導入運用手引書”の“11 付録-属性”を参照してください。 0: AutoRecoverに起因しない |
HV_FORCED_REQUEST | オペレータ操作による強制フェイルオーバであるか否かを示す値が設定されます。 0: 強制フェイルオーバではない |
HV_NODENAME | リソース名 が設定されます。 例) Cmdline0 |
HV_OFFLINE_REASON | リソースが Offline状態になる理由が設定されます。 SWITCH:userApplicationの切替え要求(hvswitch)でOfflineになった |
HV_SCRIPT_TYPE | 実行されたスクリプトの種類が設定されます。 Online: Onlineスクリプト |
HV_LAST_DET_REPORT | 現在のリソースの状態が設定されます。 Online : Online状態 |
HV_INTENDED_STATE | 状態遷移完了後に予期されるリソースの状態が設定されます。 Online : Online状態 |
NODE_SCRIPTS_TIME_OUT | スクリプトのタイムアウト時間(秒)が設定されます。 例) 300 |
RMSにはその他にも環境変数が存在します。
参照
hvenv.localの詳細については、“PRIMECLUSTER RMS導入運用手引書”の“2.9 環境変数”を参照してください。
RMSの環境変数の詳細については、“PRIMECLUSTER RMS導入運用手引書”の“12 付録-環境変数”を参照してください。
注意
各スクリプト実行時に設定される環境変数は、hvdisp コマンド(ENVおよびENVLオプション)で表示されるRMSの環境変数だけです。サーバ(システム)ごとに設定した環境変数(/etc/profile)は引継がれません。このため、スクリプトの実行時に必要な環境変数は各スクリプトの中で定義する必要があります。