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

Start メソッド

リソースタイプ実装の Start コールバックメソッドは、特定のクラスタノードまたはゾーンのリソースを開始するときに RGM によって呼び出されます。リソースグループ名とリソース名、およびリソースタイプ名はコマンド行から渡されます。Start メソッドは、クラスタノードまたはゾーンでデータサービスリソースを開始するために必要なアクションを行います。通常、このようなアクションには、リソースプロパティーの取得、アプリケーション固有の実行可能ファイルと構成ファイルの一方または両方の格納先の特定、および適切なコマンド行引数を用いたアプリケーションの起動が含まれます。

DSDL では、リソース構成ファイルが scds_initialize() ユーティリティーによってすでに取得されています。アプリケーションの起動アクションは、svc_start() 関数に指定できます。さらに、アプリケーションが実際に起動されたかどうかを確認するために、svc_wait() 関数を呼び出すことができます。Start メソッドのコード (詳細は省略) は、次のようになります。

int
main(int argc, char *argv[])
{
   scds_handle_t handle;

   if (scds_initialize(&handle, argc, argv)!= SCHA_ERR_NOERR) {
   return (1);   /* 初期化エラー */
   }
   if (svc_validate(handle) != 0) {
   return (1);   /* 無効な設定 */
   }
   if (svc_start(handle) != 0) {
   return (1);   /* 起動に失敗 */
   }
   return (svc_wait(handle));
}

この起動メソッドの実装では、svc_validate() を呼び出してリソース構成を検証します。検証が失敗する場合は、リソース構成とアプリケーション構成が一致していないか、現在このクラスタノードまたはゾーンのシステムに関して何らかの問題があることを示しています。たとえば、リソースに必要なクラスタファイルシステムが、現在このクラスタノードまたはゾーンで使用できない可能性などが考えられます。その場合には、このクラスタノードまたはゾーンでこのリソースを起動しても意味がないので、RGM を使って別のノードまたはゾーンのリソースを起動すべきです。

ただし、上記の文では svc_validate() が十分に限定的であり、アプリケーションにより絶対に必要なリソースがあるかどうかをそのクラスタノードまたはゾーンだけで検査することに注意してください。そうでないと、このリソースはすべてのクラスタノードまたはゾーンで起動に失敗し、START_FAILED の状態になる可能性があります。この状態の詳細は、『Sun Cluster データサービスの計画と管理 (Solaris OS 版)』を参照してください。

svc_start() 関数は、このノードまたはゾーンでリソースの起動に成功した場合は戻りコード 0 を、問題を検出した場合は 0 以外の戻りコードをそれぞれ返す必要があります。この関数から 0 以外の値が返されると、RGM は、このリソースを別のクラスタノードまたはゾーンで起動しようと試みます。

DSDL を最大限に活用するには、svc_start() 関数で scds_pmf_start() ユーティリティーを呼び出して、アプリケーションを PMF (プロセス管理機能) のもとで起動できます。このユーティリティーは、PMF の障害コールバックアクション機能を使って、プロセス障害を検出します。詳細については、pmfadm(1M) マニュアルページの -a アクション引数の説明を参照してください。