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

アプリケーションの制御

コールバックメソッドを使用すると、RGM は基になるリソース (アプリケーション) を制御できるようになります。たとえば、ノードまたはゾーンがクラスタに結合する とき、またはクラスタから分離するときに、コールバックメソッドを使用することによ り、RGMは影響下にあるリソースを制御できるようになります。

リソースの起動と停止

リソースタイプを実装するには、少なくとも、Start メソッドと Stop メソッドが必要です。RGM は、リソースタイプのメソッドプログラムを、適切なノードまたはゾーン上で適切な回数だけ呼び出して、リソースグループをオフラインまたはオンラインにします。たとえば、クラスタノードまたはゾーンのクラッシュ後、RGM は、そのノードまたはゾーンがマスターしているリソースグループを新しいノードまたはゾーンに移動します。この場合、Start メソッドを実装することによって、(ほかにも提供されるものはありますが) 生き残ったホストノードまたはゾーン上で各リソースを再起動するための手段を、RGM に提供する必要があります。

Start メソッドは、ローカルノードまたはゾーン上でリソースが起動し、使用可能な状態になるまで終了してはいけません。初期化に時間がかかるリソースタイプでは、その Start メソッドに、十分な長さのタイムアウト値を設定する必要があります。十分なタイムアウトを確保するには、RTR ファイルで Start_timeout プロパティーのデフォルトと最小の値を設定します。

Stop メソッドは、RGM がリソースをオフラインにする状況に合わせて実装する必要があります。たとえば、リソースがノード 1 上のゾーン A 内でオフラインにされ、ノード 2 上のゾーン B 内でオンラインにされるとします。リソースグループをオフラインにしている間、RGM は、そのリソースグループ内のリソース上で Stop メソッドを呼び出して、ノード 1 上のゾーン A 内のすべての活動を停止しようとします。ノード 1 上のゾーン A 内ですべてのリソースの Stop メソッドが完了したら、RGM は、ノード 2 上のゾーン B 内でそのリソースグループを再度オンラインにします。

Stop メソッドは、ローカルノードまたはゾーン上でリソースがすべての活動を完全に停止し完全にシャットダウンするまで終了してはいけません。最も安全な Stop メソッドの実装方法は、ローカルノードまたはゾーン上でリソースに関連するすべてのプロセスを終了することです。シャットダウンに時間がかかるリソースタイプでは、十分な長さのタイムアウト値をその Stop メソッドに設定する必要があります。Stop_timeout プロパティーは RTR ファイルで設定します。

Stop メソッドが失敗またはタイムアウトすると、リソースグループはエラー状態になり、クラスタ管理者の介入が必要となります。この状態を回避するには、Stop および Monitor_stop メソッドがすべてのエラー状態から回復するようにする必要があります。理想的には、これらのメソッドは 0 (成功) のエラー状態で終了し、ローカルノードまたはゾーン上でリソースとそのモニターのすべての活動を正常に停止する必要があります。

Start および Stop メソッドを使用するかどうかの決定

この節では、Start メソッドと Stop メソッドを使用するか、または、Prenet_start メソッドと Postnet_stop メソッドを使用するかを決定するときのいくつかの注意事項について説明します。使用する適切なメソッドを決定するには、クライアントおよびデータサービスのクライアントサーバー型ネットワークプロトコルについて十分に理解している必要があります。

ネットワークアドレスリソースを使用するサービスでは、起動または停止の手順を特定の順序で実行しなければならない場合があります。この順序は、論理ホスト名アドレスの構成を基準とする必要があります。オプションのコールバックメソッド Prenet_startPostnet_stop を使用してリソースタイプを実装すると、同じリソースグループ内のネットワークアドレスが「起動」に構成される前、または「停止」に構成されたあとに、特別な起動処理または停止処理を行います。

RGM は、データサービスの Prenet_start メソッドを呼び出す前に、ネットワークアドレスを取り付ける (plumb、ただし起動には構成しない) メソッドを呼び出します。RGM は、データサービスの Postnet_stop メソッドを呼び出したあとに、ネットワークアドレスを取り外す (unplumb) メソッドを呼び出します。

    RGM がリソースグループをオンラインにするときは、次のような順番になります。

  1. ネットワークアドレスを取り付けます。

  2. データサービスの Prenet_start メソッドを呼び出します (存在する場合)。

  3. ネットワークアドレスを起動状態に構成します。

  4. データサービスの Start メソッドを呼び出します (存在する場合)。

    RGM がリソースグループをオフラインにするときは、逆の順番になります。

  1. データサービスの Stop メソッドを呼び出します (存在する場合)。

  2. ネットワークアドレスを停止状態に構成します。

  3. データサービスの Postnet_stop メソッドを呼び出します (存在する場合)。

  4. ネットワークアドレスを取り外します。

StartStopPrenet_startPostnet_stop のうち、どのメソッドを使用するかを決定する際には、まずサーバー側を考慮します。データサービスアプリケーションリソースとネットワークアドレスリソースの両方を持つリソースグループをオンラインにするとき、RGM は、データサービスリソースの Start メソッドを呼び出す前に、ネットワークアドレスを起動状態に構成するメソッドを呼び出します。したがって、データサービスを起動するときにネットワークアドレスが「起動」に構成されている必要がある場合は、Start メソッドを使用してデータサービスを起動します。

同様に、データサービスアプリケーションリソースとネットワークアドレスリソースの両方を持つリソースグループをオフラインにするとき、RGM は、データサービスリソースの Stop メソッドを呼び出したあとに、ネットワークアドレスを停止状態に構成するメソッドを呼び出します。したがって、データサービスを停止するときにネットワークアドレスが「起動」に構成されている必要がある場合は、Stop メソッドを使用してデータサービスを停止します。

たとえば、データサービスを起動または停止するために、データサービスの管理ユーティリティーまたはライブラリを実行しなければならない場合があります。また、クライアントサーバー型ネットワークインタフェースを使用して管理を実行するような管理ユーティリティーまたはライブラリを持っているデータサービスもあります。つまり、管理ユーティリティーがサーバーデーモンを呼び出すので、管理ユーティリティーまたはライブラリを使用するためには、ネットワークアドレスが「起動」に構成されている必要があります。このような場合は、Start メソッドと Stop メソッドを使用します。

データサービスが起動および停止するときにネットワークアドレスが「停止」に構成されている必要がある場合は、Prenet_start メソッドと Postnet_stop メソッドを使用して データサービスを起動および停止します。クラスタ再構成 (SCHA_GIVEOVER 引数を指定した scha_control() または clnode evacuate コマンドによるスイッチオーバー) のあとネットワークアドレスとデータサービスのどちらが最初にオンラインになるかによってクライアントソフトウェアの応答が異なるかどうかを考えます。たとえば、クライアントの実装が最小限の再試行を行うだけで、データサービスのポートが利用できないと判断すると、すぐにあきらめる場合もあります。

データサービスを起動するときにネットワークアドレスが「起動」に構成されている必要がない場合、ネットワークインタフェースが「起動」に構成される前に、データサービスを起動します。このようにデータサービスを起動することで、ネットワークアドレスが「起動」に構成されるとすぐに、データサービスはクライアントの要求に応答できます。その結果、クライアントが再試行を停止する可能性も減ります。このような場合は、Start ではなく、Prenet_start メソッドを使用してデータサービスを起動します。

Postnet_stop メソッドを使用した場合、ネットワークアドレスが「停止」に構成されている時点では、データサービスリソースは「起動」のままです。Postnet_stop メソッドを実行するのは、ネットワークアドレスが「停止」に構成されたあとだけです。結果として、データサービスの TCP または UDP のサービスポート (つまり、その RPC プログラム番号) は、常に、ネットワーク上のクライアントから利用できます。ただし、ネットワークアドレスも応答しない場合を除きます。


注 –

クラスタに RPC サービスをインストールする場合、サービスはプログラム番号 100141、100142、および 100248 を使用できません。これらの番号は、Sun Cluster デーモン rgmd_receptionist fed、および pmfd 用に予約されています。インストールした RPC サービスがこれらのプログラム番号のいずれかを使用する場合は、RPC サービスのプログラム番号を変更します。


StartStop メソッドを使用するか、Prenet_startPostnet_stop メソッドを使用するか、または両方を使用するかを決定するには、サーバーとクライアント両方の要件と動作を考慮に入れる必要があります。

InitFiniBoot オプションメソッドの使用

3 つのオプションメソッドである InitFiniBoot を使用すると、RGM がリソースで初期化コードと終了コードを実行できるようになります。

Init メソッドの使用

次の条件のいずれかの結果としてリソースが管理下に置かれる場合、RGM は Init メソッドを実行して、1 回だけリソースの初期化を実行します。

Fini メソッドの使用

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

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 メソッドのコードは、Fini メソッドを実行するローカルのノードまたはゾーンがリソースグループのノードリストに含まれているかどうかを調べることによって、これら 2 つの場合を区別できます。

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

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

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

Boot メソッドの使用

RGM は、クラスタに結合した (つまり、ブートまたはリブートしたばかりの) ノードまたはゾーンで、Boot メソッドを実行します。

Boot メソッドは、通常、Init と同じ初期化を実行します。Boot は呼び出し回数に依存しないようにコーディングする必要があります。つまり、Boot メソッドが以前の実行でリソースを初期化した場合でも、以降の Boot 呼び出しは正常に終了します。