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