ユーザー定義事象の例には、 ページング・スペースが一定の満了状態に達するときに、 AIX 物理ノードで DB2 データベース区画をシャットダウンする事象や、 特定のノードで処理が停止する場合に、 DB2 データベース区画を再始動したりフェールオーバー操作を開始したりする事象が挙げられます。 データベース区画のシャットダウン、 およびページング・スペースを解放するためのトランザクションの打ち切りといったユーザー定義事象を説明する例が samples サブディレクトリーにあります。
/user/sbin/cluster/events/rules.hacmprd 規則ファイルには HACMP 事象が含まれています。 このファイルの各事象記述には、 以下の 9 つの構成要素があります。
たとえ行を使用しない場合でも、 事象定義では各オブジェクトに 1 行が必要となります。 これらの行が削除されると、 HACMP ES クラスター管理プログラムは事象定義を適切に解析できなくなり、 これが原因でシステムがハングする可能性があります。 「#」で始まる行は注釈行として扱われます。
注: | 規則ファイルは、注釈行を数えないで、 事象定義ごとに 9 行だけを必要とします。 規則ファイルの最後にユーザー定義の事象を追加する場合、 ファイルの末尾の不要な空白行を削除することが重要です。 削除しなければ、ノードがハングします。 |
以下は node_up の事象定義の例です。
##### Beginning of the Event Definition: node_up # TE_JOIN_NODE 0 /usr/sbin/cluster/events/node_up.rp 2 0 # 6) Resource variable - only used for event management events # 7) Instance vector - only used for event management events # 8) Predicate - only used for event management events # 9) Rearm predicate - only used for event management events ###### End of the Event Definition: node_up
この例は、 rules.hacmprd ファイルにある事象定義の 1 つです。 この例では、 node_up 事象が発生すると、 回復プログラム /usr/sbin/cluster/events/node_up.rp が呼び出されます。 値は、状態、回復タイプ、および回復レベルについて指定されます。 ここでは、リソース変数、インスタンス変数、述部、 およびリアーム述部用に 4 つの空白行があります。
非標準 HACMP ES 事象に対応するために、 他の事象を定義することができます。 たとえば、/tmp ファイルが 90 パーセント以上いっぱいになった事象を定義するには、 rules.hacmprd ファイルを修正する必要があります。
IBM AIX 並列システム・サポート・プログラム (PSSP) では、 多くの事象が事前定義されています。 これらの事象は、(ユーザー定義事象内で使用されるときに) 次のように活用できます。
HACMP ES は PSSP 事象検出を使用して、ユーザー定義事象を取り扱います。 PSSP 事象管理サブシステムは、 さまざまなハードウェアおよびソフトウェア・リソースをモニターして、 包括的な事象検出を提供します。
リソース状態は、リソース変数によって表されます。 リソース条件は、述部と呼ばれる式によって表されます。
事象管理は、リソース・モニターからリソース変数を受け取ります。 リソース・モニターは、特定のリソースの状態を観察し、 その状態をいくつかのリソース変数に変換します。 これらの変数は周期的に事象管理に渡されます。 事象管理は、 rules.hacmprd で HACMP ES クラスター管理プログラムが指定した述部を各リソース変数に適用します。 述部が真として評価されると、事象が生成されて、 クラスター管理プログラムに送信されます。 クラスター管理プログラムは票決プロトコルを開始し、 回復プログラム内の「ノード・セット」で指定されたノード・セットで、 (事象優先順位にしたがって) 回復プログラム・ファイル (xxx.rp) が実行されます。
回復プログラム・ファイル (xxx.rp) は、 1 つまたは複数のプログラム行でできています。 各行は、次の書式で宣言されています。
relationship command_to_run expected_status NULL
行の各値の間には少なくとも 1 つのスペースがなければなりません。 「Relationship」は、 どの種類のノードでどのプログラムを実行するかを決定する値です。 次の 3 つの関係タイプがサポートされています。
「Command_to_run」は引用区切りストリングで、 実行可能プログラムに対する全パスが指定される場合もあれば、 指定されない場合もあります。 HACMP で送達される事象スクリプトでは、相対パス定義を使用できます。 他のスクリプトまたはプログラムでは、 HACMP 事象スクリプトと同じディレクトリーにある場合でも、 全パスの指定をしなければなりません。
「Expected_states」は、指定コマンドまたはプログラムの戻りコードです。 このコードは整数値または「x」です。 「x」を使用すると、クラスター管理プログラムは戻りコードを無視します。 他のすべてのコードでは、予期された戻りコードと等しくなければなりません。 等しくならない場合、 クラスター管理プログラムは事象障害を検出します。 この事象を処理すると、 (手作業による介入で) 回復が行われるまで、 処理が「停止」します。 手作業による介入がなければ、 ノードは他のノードとの同期を図れません。 クラスター管理プログラムが全ノードを制御するには、 全ノード間の同期が必須です。
「NULL」は、将来の利用のために予約されたフィールドです。 「NULL」という語は、バリア行を除いて、個々の行の末尾に表示されます。 2 つのバリア・コマンドの間、または最初のコマンドの前で複数の回復コマンドを指定すると、 ノード自身およびノード間で回復コマンドが並列処理されます。
バリア・コマンドは、全クラスター・ノード間の全コマンドを同期させるために使用します。 ノードが回復プログラムのバリア・ステートメントをヒットすると、 クラスター管理プログラムはそのノードでバリア・プロトコルを開始します。 バリア・プロトコルは 2 フェーズ・プロトコルなので、 すべてのノードが回復プログラム内のバリアに遭遇し、 プロトコルの承認を「票決した」ときに、 両方のフェーズが完了したことがすべてのノードに通知されます。
次のようにプロセスを要約することができます。
DB2 UDB EEE には、 フェールオーバー回復およびユーザー定義事象の以下のサンプル・スクリプトが組み込まれています。 スクリプト・ファイルは、 $INSTNAME/sqllib/samples/hacmp/es ディレクトリーにあります。 このスクリプトは、 「現状のまま」でも動作し、 また回復アクションをカスタマイズすることもできます。
回復スクリプトは、回復操作を実行する各ノードにインストールする必要があります。 スクリプト・ファイルは、 SP コントロール・ワークステーションまたは他の指定 SP ノードから集中方式でインストールすることができます。
db2_inst_ha $INSTNAME/sqllib/samples/hacmp/es <nodelist> <DATABASENAME> ここで、 $INSTNAME/sqllib/samples/hacmp/es は、スクリプトおよび事象がある ディレクトリーを表します。 <nodelist> は、ノードの pcp または pexec スタイルを表します。 たとえば、1-16 または 1、2、3、4 です。 <DATABASENAME> は、通常およびフェールオーバーのパラメーター・ ファイルに使用するデータベースの名前です。
reg.parms.SAMPLE および failover.parms.SAMPLE は各ノードにコピーされ、 reg.parms.DATABASENAME に名前変更されます。 db2_inst_ha は /usr/bin の各ノードにファイルをコピーし、 次の HACMP 事象ファイルを更新します。
/usr/sbin/cluster/events/rules.hacmprd /usr/sbin/cluster/events/network_up_complete /usr/sbin/cluster/events/network_down_complete
ha_db2stop
注: | コマンドが戻るのを待機することが必要です。 ctrl-C 割り込みを使用して終了するか、処理を強制終了すると、 フェールオーバー回復を早まって再度使用可能にしてしまい、 一部のデータ区画が停止しない可能性があります。 |
HACMP ES は、次の方法で DB2 回復スクリプトを呼び出します。
HACMP は node_up 順序列を実行し、 このノードで所有されている (カスケードを使用) か割り当てられている (回転を使用) リソース・グループで指定されたボリューム・グループ、 論理ボリューム、ファイル・システム、および IP アドレスを獲得する。
node_up_local_complete が実行されると、 rc.db2pe を含むアプリケーション・サーバー定義が開始され、 この物理ノード上のアプリケーション・サーバー定義で指定されたデータベース区画が始動する。
注: | rc.db2pe は、始動モードで実行されると、 パラメーター (parms) ファイルと一致するデータベース・ディレクトリー中の各 DATABASE に合わせて、 reg.parms.DATABASE で指定された DB2 パラメーターを調整します。 |
各ノードは始動時にこの順序に従います。 複数の HACMP クラスターを持っていて、並列始動すると、一度に複数のノードが始動します。
HACMP は、指定引き受けノード上のリソース・グループで指定されたボリューム・グループ、 論理グループ、ファイル・システム、および IP アドレスを獲得する。
node_down_remote_complete が実行されると、HACMP は、 このデータベース区画用のリソース・グループで指定されたアプリケーション・サーバー始動スクリプトとして rc.db2pe を実行する。
注: | rc.db2pe は、相互引き受けモードで実行されると、 そこで実行される DB2 データベース区画を停止し、 パラメーター (parms) ファイルと一致するデータベース・ディレクトリー中の各 DATABASE に合わせて、 failover.parms.DATABASE で指定された DB2 パラメーターを調整した後、 物理引き受けノード上の両方のデータベース区画を始動します。 |
node_up_remote が古い引き受けノードで実行されると、 アプリケーション・サーバー定義により、rc.db2pe が停止モードで実行される。
注: | rc.db2pe は、再統合モード (相互引き受け) で実行されると、 そこで実行される両方の DB2 データベース区画を停止し、 パラメーター (parms) ファイルと一致するデータベース・ディレクトリー中の各 DATABASE に合わせて、 reg.parms.DATABASE で指定された DB2 パラメーターを調整した後、 この物理引き受けノードで保持されるデータベース区画だけを始動します。 |
古い引き受けノードは、再統合されるノードに所有されるリソース・グループで指定されたボリューム・グループ、 論理ボリューム、ファイル・システム、および IP アドレスを解放する。
HACMP は、再統合されるノードが現在所有するリソース・グループで指定されたボリューム・グループ、 論理ボリューム、ファイル・システム、および IP アドレスを再獲得する。
node_up_local_complete が実行されると、 rc.db2pe を含むアプリケーション・サーバー定義が開始され、 この再統合物理ノード上のアプリケーション・サーバー定義で指定されたデータベース区画が始動する。
注: | rc.db2pe は、始動モードで実行されると、 パラメーター (parms) ファイルと一致するデータベース・ディレクトリー中の各 DATABASE に合わせて、 reg.parms.DATABASE で指定された DB2 パラメーターを調整します。 |
node_down_local が停止ノードで実行されると、 アプリケーション・サーバー定義により、 rc.db2pe が停止モードで実行される。
注: | rc.db2pe は、停止モードで実行されると、 パラメーター (parms) ファイルと一致するデータベース・ディレクトリー中の各 DATABASE に合わせて、 failover.parms.DATABASE で指定された DB2 パラメーターを調整した後、 DB2 データベース区画 (これは引き受け用) を停止します。 |
HACMP は、ノードが現在所有するリソース・グループで指定されたボリューム・グループ、 論理ボリューム、ファイル・システム、および IP アドレスを解放する。
すべてのノードで db2_proc_restart スクリプトが実行される。 障害の発生したノードでは、 正しい DB2 データベース区画が再始動されます。
すべてのノードで db2_paging_action スクリプトが実行される。 ノードでページング・スペースが全容量の 70 パーセントを超える場合は、 wall コマンドが発行される。 ノードでページング・スペースが全容量の 90 パーセントを超える場合は、 この物理ノード上の DB2 データベース区画が停止され、再始動されます。
すべてのノードで、rc.db2pe スクリプトが NFS モードで実行される。 NFS 処理の実行が停止すると、実行が再開されます。 自動マウント処理の実行が停止すると、同様の方法で再開されます。
net_down スクリプトが呼び出される。 この呼び出しにより、SP スイッチ・ネットワークとしてのネットワークが検査され、 ダウンしているかどうかが検証されます。 ダウンしていれば、ユーザー定義の時間間隔だけ待機されます。 省略時の時間間隔は、100 秒です。
network_up_complete 事象で指示されたとおりに SP スイッチ・ネットワークが復旧すると、 回復は実行されない。
時間制限に達すると、HACMP はフェールオーバーで停止する。
注: | すべての事象は、SP 問題管理および SP 透視図 GUI を使用してモニターできます。 |
他にも、以下のようなスクリプト・ユーティリティーを使用できます。
ha_cmd <noderange> <START|STOP|TAKE|FORCE> ここで、 <noderange> は SP ノード範囲の pcp または pexec スタイルです。 たとえば、「ha_cmd 3-6 START」とすると、HACMP はノード 3、4、5、6 で始動します。 「ha_cmd 5 TAKE」は、ノード 5 の HACMP をシャットダウンして 引き受けを行います。
ha_mon <node> ここで、 <node> は、モニターされる SP ノードを表します。 ha_mon は、指定するノード上の /tmp/hacmp.out ファイルに「-f を追加」します。
db2_turnoff_recov <nodelist>
db2_turnon_recov <nodelist>