IBM Support

PowerHA SystemMirror for AIX V7.1環境のアプリケーション起動スクリプトにおける引き継ぎ起動と正常起動の切り分け例

News


Abstract

PowerHA V6.1以前の環境において、ユーザーが作成したアプリケーション起動スクリプト内で、正常起動時と引継ぎに伴う起動時とで処理を変えていたり、通知メッセージを設定していたりするケースでは、その判断に使用していたロジックが、PowerHA 7.1以降では仕様変更により使用できなくなる可能性が有ります。
このテクニカルフラッシュは2015年5月15日に公開されたもので、情報はas-isとなっています。

Content

概要
PowerHA V6.1以前の環境において、ユーザーが作成したアプリケーション起動スクリプト内で、正常起動時と引継ぎに伴う起動時とで処理を変えていたり、通知メッセージを設定していたりするケースでは、その判断に使用していたロジックが、PowerHA 7.1以降では仕様変更により使用できなくなる可能性が有ります。
このテクニカル・フラッシュでは、PowerHA 7.1構成において、アプリケーション起動スクリプト実行時に、正常起動なのか、引継ぎに伴う起動なのかを 判断するサンプル・ロジックを示します。
PowerHA 6.1以前:
アプリケーション起動スクリプト実行時に、clRGinfo -aコマンドにより、正常起動なのか、引継ぎに伴う起動なのかを 判断することが可能です。
clRGinfo -a出力において対象となるリソース・グループを解放するノードが存在する場合には引継ぎ起動。
ただし、RG間の依存関係が構成されていないことが前提。
PowerHA 7.1以降:
clRGinfo -aにて判断することが出来なくなっています。
これは、イベントの流れの変更に伴い、クラスター・マネージャーが資源の解放を行なうフェーズと取得を行なうフェーズが内部的に分離され、資源取得時点のclRGinfo -aにおいて資源解放ノードの情報が入手できなくなった為です。
フラッシュの対象者
PowerHA 7.1以降を使用し、アプリーションを起動するスクリプトにおいて、正常起動、引継ぎ起動を判別する必要があるユーザー。
対象環境
PowerHA 7.1以降
検証環境
PowerHA 7.1.3 SP2
処理概要
node_down, node_up, resource_state_change, external_resource_state_change イベントの前処理において、イベント名とリソース・グループの状態を記録し、アプリケーション起動スクリプトにて、その内容を元に、正常起動なのか、引継ぎに伴う起動なのかを 判断する。
この例では、正常起動と引継ぎ起動を以下のように判別します:
  • 正常起動: 状態記録時点で、対象リソース・グループがリモート・ノードでオンラインで無い、かつイベントがnode_downで無い場合
  • 引継ぎ起動: 上記以外
イベント毎には以下の通り。
node_downイベント:ノード停止
node_downをトリガーとした正常起動は無い為、アプリケーション・コントロール・スクリプトの実行時に、記録されたイベントがnode_downイベントならば、常に「引継ぎ起動」と判断する。
サービス・ノード強制停止時のnode_downイベント発生時点ではリソース・グループの状態がOFFLINEと判断されることが確認されている為、ここではリソース・グループの状態では無くイベントを判断に使用している。
node_upイベント:ノード起動
対象リソース・グループが事前に他のノードでオンラインであった場合に、「引継ぎ起動」、それ以外の場合、「正常起動」と判断する。
なお、多くのケースでは「正常起動」であるが、フォールバック・ポリシーがFBHPN(リスト中のより高い優先順位のノードにフォールバック)のリソース・グループ構成で、高優先順位ノードの起動時やPOL設定ノード起動時には「引継ぎ起動」となる。
resource_state_changeイベント:選択引継ぎ
アプリケーション障害、サービス・アドレスを持つインターフェース障害、共用VG障害時には、resource_state_changeイベントが実行される。
対象リソース・グループが事前に他のノードでオンラインであった場合に、「引継ぎ起動」、それ以外の場合、「正常起動」と判断する。
なお、基本的には「引継ぎ起動」が想定される。
external_resource_state_changeイベント:リソース・グループ操作
ユーザー指示のリソース・グループの起動や移動時には、external_resource_state_changeイベントが実行される。
対象リソース・グループが事前に他のノードでオンラインであった場合には、「引継ぎ起動」、それ以外の場合、「正常起動」と判断する。
リソース・グループ単体での起動時には「正常起動」、移動時には「引継ぎ起動」と判断されることになる。停止時にはアプリケーション・コントロール・スクリプトにおける起動スクリプトは実行されない。
サンプル・スクリプト
/usr/local/bin/clRGinfos
#! /bin/ksh
# PRE COMMAND of node_up, node_down, resource_state_change, external_resource_state_change
FLG=/tmp/clRGinfos
echo $* > $FLG
/usr/es/sbin/cluster/utilities/clRGinfo -s >> $FLG
exit 0
start script
#! /bin/ksh
FLG=/tmp/clRGinfos
RGNAME=rg1 # このアプリケーション・コントロール・スクリプトを実行するRG名
LOCALNODENAME=$(/usr/es/sbin/cluster/utilities/get_local_nodename)
EVENTNAME=$(cat $FLG | awk 'NR==1 {print $1}')
IS_ONLINE_AT_REMOTE=$(cat $FLG | awk -F: '$1 == "'$RGNAME'" && $2 == "ONLINE" && $3 != "'${LOCALNODENAME}'"')
if [[ "${EVENTNAME}" != "node_down" && -z "${IS_ONLINE_AT_REMOTE}" ]]
then
: Normal START # 正常起動時処理
else
: Fallover START # 引継ぎ起動時処理
fi
exit
PowerHA 設定
Pre/Postイベント・コマンド設定
ユーザー定義クラスター・イベント名
クラスター・イベントの説明
クラスター・イベントのスクリプト・ファイル名
clRGinfos
 
/usr/local/bin/clRGinfos
事前定義済みイベントの変更
対象イベント
イベント前処理コマンド
(Pre command)
node_up
clRGinfos
node_down
clRGinfos
resource_state_change
clRGinfos
external_resource_state_change
clRGinfos
PowerHA 設定コマンド
export PATH=$PATH:/usr/es/sbin/cluster/utilities/
clmgr add event 'clRGinfos' file='/usr/local/bin/clRGinfos'
clfileprop -m HACMP_Files
clmgr modify event 'node_up' pre_event_command=$( { clmgr q event node_up | awk -F\" '/^PRE_EVENT_COMMAND=/ {print $2}' | tr ',' '\n'; echo clRGinfos; } | sort -u | tr '\n' ',' | sed 's/,$//' )
clmgr modify event 'node_down' pre_event_command=$( { clmgr q event node_down | awk -F\" '/^PRE_EVENT_COMMAND=/ {print $2}' | tr ',' '\n'; echo clRGinfos; } | sort -u | tr '\n' ',' | sed 's/,$//' )
clmgr modify event 'resource_state_change' pre_event_command=$( { clmgr q event resource_state_change | awk -F\" '/^PRE_EVENT_COMMAND=/ {print $2}' | tr ',' '\n'; echo clRGinfos; } | sort -u | tr '\n' ',' | sed 's/,$//' )
clmgr modify event 'external_resource_state_change' pre_event_command=$( { clmgr q event external_resource_state_change | awk -F\" '/^PRE_EVENT_COMMAND=/ {print $2}' | tr ',' '\n'; echo clRGinfos; } | sort -u | tr '\n' ',' | sed 's/,$//' )

[{"Type":"MASTER","Line of Business":{"code":"LOB57","label":"Power"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"HW1A1","label":"IBM Power Systems"},"ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]

Document Information

Modified date:
13 February 2023

UID

ibm16851849