Sun Cluster データサービス開発ガイド (Solaris OS 版)

制御および初期化コールバックメソッド

主要な制御および初期化コールバックメソッドは、リソースを起動および停止します。その他のメソッドは、リソース上で初期化と終了コードを実行します。

Start

リソースを含むリソースグループがクラスタノードまたはゾーン上でオンラインになったとき、RGM はそのクラスタノードまたはゾーン上でこのメソッドを実行します。このメソッドは、そのノードまたはゾーン上でリソースを起動します。

ローカルノードまたはゾーン上でリソースが起動され、利用可能になるまで、Start メソッドは終了してはなりません。したがって、Start メソッドは終了する前にリソースをポーリングし、リソースが起動しているかどうかを判断する必要があります。さらに、このメソッドには、十分な長さのタイムアウト値を設定する必要があります。たとえば、データベースデーモンなど特定のリソースが起動するのに時間がかかる場合、そのメソッドには十分な長さのタイムアウト値が必要です。

RGM が Start メソッドの失敗に応答する方法は、Failover_mode プロパティーの設定によって異なります。

リソースタイプ登録 (RTR) ファイルの Start_timeout プロパティーが、リソースの Start メソッドのタイムアウト値を設定します。

Stop

リソースを含むリソースグループがクラスタノードまたはゾーン上でオフラインになったとき、RGM はクラスタノードまたはゾーン上でこの必須メソッドを実行します。このメソッドは、リソースを (アクティブであれば) 停止します。

ローカルノードまたはゾーン上でリソースがすべての活動を完全に停止し、すべてのファイル記述子を閉じるまで、Stop メソッドは終了してはなりません。そうしないと、RGM が (実際にはアクティブであるのに) リソースが停止したと判断するため、データが破壊されることがあります。データの破壊を防ぐために最も安全な方法は、リソースに関連するローカルノードまたはゾーン上ですべてのプロセスを停止することです。

Stop メソッドは終了する前にリソースをポーリングし、リソースが停止しているかどうかを判断する必要があります。さらに、このメソッドには、十分な長さのタイムアウト値を設定する必要があります。たとえば、特定のリソース (データベースデーモンなど) が停止するのに時間がかかる場合、そのメソッドには十分な長さのタイムアウト値が必要です。

RGM が Stop メソッドの失敗に応答する方法は、Failover_mode プロパティーの設定によって異なります。「リソースのプロパティー」を参照してください。

RTR ファイルの Stop_timeout プロパティーが、リソースの Stop メソッドのタイムアウト値を設定します。

Init

リソースを管理下に置くとき、RGM はこのオプションメソッドを実行して、リソースの初期化を 1 回だけ実行します。リソースグループが管理されていない状態から管理されている状態に切り替えられるとき、またはすでに管理されているリソースグループでリソースが作成されるとき、RGM はこのメソッドを実行します。このメソッドは、Init_nodes リソースプロパティーにより特定されるノードまたはゾーン上で呼び出されます。

Fini

リソースが RGM によって管理されなくなったとき、RGM は Fini メソッドを実行して、そのリソースの使用後のクリーンアップを行います。通常、Fini メソッドは Init メソッドによって実行された初期化をすべて取り消します。

RGM は、次の状況が発生すると、リソースが管理されなくなった各ノードまたはゾーン上で Fini を実行します。

  • リソースのあるリソースグループが管理されない状態に切り替わる。この場合、RGM はノードリスト内のすべてのノードおよびゾーン上で Fini メソッドを実行します。

  • 管理されているリソースグループからリソースが削除される。この場合、RGM はノードリスト内のすべてのノードおよびゾーン上で Fini メソッドを実行します。

  • ノードまたはゾーンが、リソースのあるリソースグループのノードリストから削除される。この場合、RGM は削除されたノードおよびゾーン上だけで Fini メソッドを実行します。

「ノードリスト」とは、リソースグループの Nodelist またはリソースタイプの Installed_nodes リストのことです。「ノードリスト」がリソースグループの Nodelist を指すのかリソースタイプの Installed_nodes リストを指すのかは、リソースタイプの Init_nodes プロパティーの設定によって決まります。Init_nodes プロパティーは RG_nodelist または RT_installed_nodes に設定できます。ほとんどのリソースタイプでは、Init_nodes がデフォルトの RG_nodelist に設定されています。この場合は、Init メソッドも Fini メソッドも、リソースグループの Nodelist で指定されたノードまたはゾーン上で実行されます。

Init メソッドが実行する初期化のタイプによって、実装する Fini メソッドが実行する必要のあるクリーンアップのタイプが次のように定義されます。

  • ノード固有の構成のクリーンアップ。

  • クラスタ全体にわたる構成のクリーンアップ。

実装する Fini メソッドは、ノード固有の構成だけをクリーンアップするのか、それともノード固有の構成とクラスタ全体にわたる構成の両方をクリーンアップするのかを判断する必要があります。

リソースが特定のノードまたはゾーン上でのみ、管理されなくなった場合、Fini メソッドはノード固有のローカル構成をクリーンアップできます。しかし、ほかのノード上ではリソースは引き続き管理されているため、Fini メソッドはクラスタ全体にわたるグローバル構成をクリーンアップしてはなりません。リソースがクラスタ全体にわたって管理されなくなった場合には、Fini メソッドはノード固有の構成とグローバル構成の両方についてクリーンアップを実行できます。実装する Fini メソッドのコードは、Fini メソッドを実行するローカルのノードまたはゾーンがリソースグループのノードリストに含まれているかどうかを調べることによって、これら 2 つの場合を区別できます。

ローカルのノードまたはゾーンがリソースグループのノードリストに出現している場合は、リソースが削除されようとしているか、管理されない状態に移行しようとしています。リソースはどのノードまたはゾーン上でもアクティブでなくなっています。この場合、実装する Fini メソッドでは、ローカルノード上のノード固有の構成だけでなく、クラスタ全体にわたる構成についてもクリーンアップする必要があります。

ローカルのノードまたはゾーンがリソースグループのノードリストに出現していない場合は、Fini メソッドでそのローカルのノードまたはゾーン上のノード固有の構成をクリーンアップできます。しかし、Fini メソッドでクラスタ全体にわたる構成をクリーンアップしてはなりません。この場合、ほかのノードまたはゾーン上でリソースが引き続きアクティブになっています。

Fini メソッドは順序に依存しない様にコードを作成する必要もあります。つまり、Fini メソッドが以前の実行でリソースをクリーンアップした場合でも、以降の Fini 呼び出しは正常に終了します。

Boot

RGM は Init とよく似たこのオプションメソッドを実行し、リソースの所属リソースグループが RGM の管理下に置かれたあと、クラスタを結合するノードまたはゾーン上のリソースを初期化します。Init_nodes リソースプロパティーにより特定されるノードまたはゾーン上で、RGM はこのメソッドを実行します。起動または再起動の結果としてノードまたはゾーンがクラスタに結合または再結合したときに、Boot メソッドは呼び出されます。

Global_zone リソースタイププロパティーが TRUE に等しい場合、リソースを含むリソースグループが非大域ゾーンで動作するように構成されているときでも、メソッドは大域ゾーンで実行されます。


注 –

InitFini、または Boot メソッドが失敗した場合は、エラーメッセージがシステムログに書き込まれます。ただし、それ以外は RGM によるリソース管理に影響しません。