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

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 ファイルで設定します。

RGM メソッドコールバックがタイムアウトすると、メソッドのプロセスツリーが、SIGTERM シグナルではなく、SIGABRT シグナルによって消去されます。結果として、プロセスグループのすべてのメンバーが、/var/cluster/core ディレクトリにコアダンプファイルを生成します。このコアダンプファイルは、メソッドがタイムアウトを超過した理由を判定できるように生成されます。


注 –

新しいプロセスグループを作成するデータサービスメソッドを書かないでください。データサービスメソッドで新しいプロセスグループを作成する必要がある場合は、SIGTERM および SIGABRT シグナルのシグナルハンドラを書きます。また、シグナルハンドラは、プロセスを終了する前に、単数または複数の子プロセスグループに SIGTERM または SIGABRT シグナルを転送する必要があります。これらのシグナルのシグナルハンドラを書くと、使用するメソッドによって生成されるすべてのプロセスが、正しく終了される可能性が高まります。


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