コールバックメソッドは、リソースタイプを実装するための API が提供する重要な要素です。コールバックメソッドを使用すると、RGM は、クラスタのメンバーシップが変更されたとき (ノードが起動またはクラッシュしたとき) にクラスタ内のリソースを制御できます。
クライアントプログラムがクラスタシステム上の HA サービスを制御するため、コールバックメソッドはルートのアクセス権を持つ RGM によって実行されます。したがって、このようなコールバックメソッドをインストールおよび管理するときは、ファイルの所有権とアクセス権を制限します。特に、このようなコールバックメソッドには、特権付き所有者 (bin や root など) を割り当てます。
さらに、このようなコールバックメソッドは、書き込み可能にしてはなりません。この節では、コールバックメソッドの引数と終了コードについて説明し、次のカテゴリのコールバックメソッドについて説明します。
制御および初期化メソッド
管理サポートメソッド
ネットワーク関連メソッド
モニター制御メソッド
この節では、メソッドが呼び出されるタイミングやよそうされるリソースへの影響など、コールバックメソッドについて簡単に説明します。詳細については rt_callbacks (1HA) のマニュアルページを参照してください。
RGM はコールバックメソッドを呼び出すとき、次のような引数を使用します。
method -R resource-name -T type-name -G group-name |
method は、Start や Stop などのコールバックメソッドとして登録されているプログラムのパス名です。リソースタイプのコールバックメソッドは、それらの登録ファイルで宣言します。
コールバックメソッドの引数はすべて、フラグ付きの値として渡されます。-R はリソースインスタンスの名前を示し、-T はリソースのタイプを示し、-G はリソースが構成されているグループを示します。このような引数をアクセス関数で使用すると、リソースについての情報を取得できます。
Validate メソッドを呼び出すときは、追加の引数 (リソースのプロパティ値と呼び出されるリソースグループ) を使用します。
詳細については、scha_calls(3HA) のマニュアルページを参照してください。
終了コードは、すべてのコールバックメソッドで共通で、メソッドの呼び出しによるリソースの状態への影響を示すように定義されています。これらの終了コードについては、scha_calls (3HA) のマニュアルページを参照してください。終了コードには、以下のものがあります。
0 (ゼロ) – メソッドは成功しました。
ゼロ以外の任意の値 – メソッドは失敗しました。
RGM は、コールバックメソッドの実行の異常終了 (タイムアウトやコアダンプ) も処理します。
メソッドは、各ノード上で syslog を使用して障害情報を出力するように実装する必要があります。stdout や stderr に書き込まれる出力は、ローカルノードのコンソール上には表示されますが、それをユーザーが確認するかどうかは保証できないためです。
制御および初期化コールバックメソッドは、主に、リソースを起動および停止します。その他にも、リソース上で初期化と終了コードを実行します。
この必須メソッドは、リソースを含むリソースグループがクラスタノード上でオンラインになったとき、そのクラスタノード上で呼び出されます。このメソッドは、そのノード上でリソースを起動します。
Start メソッドは、ローカルノード上でリソースが起動し、使用可能な状態になるまで終了してはなりません。したがって、Start メソッドは終了する前にリソースをポーリングし、リソースが起動しているかどうかを判断する必要があります。さらに、このメソッドには、十分な長さのタイムアウト値を設定する必要があります。たとえば、あるリソース (データベースデーモンなど) が起動するのに時間がかかる場合、そのメソッドには十分な長さのタイムアウト値を設定する必要があります。
RGM が Start メソッドの失敗に応答する方法は、Failover_mode プロパティの設定によって異なります。
リソースの Start メソッドのタイムアウト値を設定するには、リソースタイプ登録ファイルの START_TIMEOUT プロパティを使用します。
この必須メソッドは、リソースを含むリソースグループがクラスタノード上でオフラインになったとき、そのクラスタノード上で呼び出されます。このメソッドは、リソースを (アクティブであれば) 停止します。
Stop メソッドは、ローカルノード上でリソースがすべての活動を完全に停止し、すべてのファイル記述子を終了するまで終了してはなりません。そうしないと、RGM が (実際にはアクティブであるのに) リソースが停止したと判断するため、データが破壊されることがあります。データの破壊を防ぐために最も安全な方法は、ローカルノード上でリソースに関連するすべてのプロセスを停止することです。
Stop メソッドは終了する前にリソースをポーリングし、リソースが停止しているかどうかを判断する必要があります。さらに、このメソッドには、十分な長さのタイムアウト値を設定する必要があります。たとえば、あるリソース (データベースデーモンなど) が停止するのに時間がかかる場合、そのメソッドには十分長めのタイムアウト値を設定する必要があります。
RGM が Stop メソッドの失敗に応答する方法は、Failover_mode プロパティの設定によって異なります (「リソースのプロパティ」 を参照)。
リソースの Stop メソッドのタイムアウト値を設定するには、リソースタイプ登録ファイルの STOP_TIMEOUT プロパティを使用します。
このオプションメソッドは、リソースを管理下に置くとき (リソースが属しているリソースグループを管理していない状態から管理している状態に切り替えるとき、またはすでに管理されているリソースグループでリソースを作成するとき)、1 回だけ呼び出され、リソースの初期化を実行します。このメソッドは、Init_nodes リソースプロパティが示すノード上で呼び出されます。
このオプションメソッドは、リソースを管理下から外すとき (リソースが属しているリソースグループを管理していない状態に切り替えるとき、またはすでに管理されているリソースグループからリソースを削除するとき) に呼び出され、リソースをクリーンアップします。このメソッドは、Init_nodes リソースプロパティが示すノード上で呼び出されます。
このオプションメソッドは、Init と同様に、リソースの所属リソースグループが RGM の管理下に置かれたあと、クラスタを結合するノード上のリソースを初期化します。このメソッドは、Init_nodes リソースプロパティが示すノード上で呼び出されます。Boot メソッドは、起動または再起動の結果とし、ノードがクラスタに結合または再結合したときに呼び出されます。
Init、Fini、Boot メソッドが失敗すると、syslog() 関数がエラーメッセージを生成しますが、それ以外は RGM のリソース管理に影響しません。
リソース上での管理アクションには、リソースプロパティの設定と変更があります。Validate と Update コールバックメソッドを使用してリソースタイプを実装すると、このような管理アクションを行うことができます。
この任意メソッドは、リソースが作成されるとき、および、リソースまたはリソースグループ (リソースを含む) のプロパティが管理アクションによって更新されるときに呼び出されます。このメソッドは、リソースタイプの Init_nodes プロパティが示す複数のクラスタノード上で呼び出されます。Validate は、作成または更新が行われる前に呼び出されます。任意のノード上でメソッドから失敗の終了コードが戻ると、作成または更新は取り消されます。
Validate メソッドが呼び出されるのは、管理アクションによってリソースまたはリソースグループのプロパティが変更されたときのみです。RGM がプロパティを設定したときや、モニターがリソースプロパティ Status と Status_msg を設定したときではありません。
このオプションメソッドを呼び出して、プロパティが変更されたことを実行中のリソースに通知することができます。Update は、管理アクションがリソースまたはリソースグループのプロパティの設定に成功したあとに呼び出されます。このメソッドは、リソースがオンラインであるノード上で呼び出されます。このメソッドは、API アクセス関数を使用し、アクティブなリソースに影響する可能性があるプロパティ値を読み取り、その値に従って実行中のリソースを調節します。
Update メソッドが失敗すると、syslog() 関数がエラーメッセージを生成しますが、それ以外は RGM のリソース管理に影響しません。
ネットワークアドレスリソースを使用するサービスでは、ネットワークアドレス構成から始まる順番で、起動手順または停止手順を実行する必要があります。任意コールバックメソッドの Prenet_start と Postnet_stop を使用してリソースタイプを実装すると、関連するネットワークアドレスが「起動」に構成される前、または、「停止」に構成されたあとに、特別な起動アクションまたはシャットダウンアクションを行うことができます。
このオプションメソッドを呼び出して、同じリソースグループ内のネットワークアドレスが構成される前に特殊な起動アクションを実行することができます。
このオプションメソッドを呼び出して、同じリソースグループ内のネットワークアドレスの構成後に特殊な終了アクションを実行することができます。
リソースタイプは、オプションとして、リソースの性能を監視したり、その状態を報告したり、リソースの障害に対処するようなプログラムを含むようにも実装できます。Monitor_start、Monitor_stop、Monitor_check メソッドは、リソースタイプへのリソースモニターの実装をサポートします。