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

第 10 章 汎用データサービス

この章では、最初に汎用データサービス (GDS) の概要について説明した後に、SunPlex Agent Builder または標準的な Sun Cluster 管理コマンドを使って GDS ベースのサービスを作成する方法について説明します。

GDS の概要

汎用データサービス (GDS) とは、ネットワーク対応のシンプルなアプリケーションを Sun Cluster Resource Group Management フレームワークにプラグインすることによって、これらのアプリケーションを可用性の高いものにしたり、スケーラブルなものにするための機構です。 この機構では、アプリケーションを可用性の高いものにしたり、スケーラブルなものにするために通常必要になるエージェントのコーディングは必要ありません。

GDS は、あらかじめコンパイルされた単一のデータサービスです。 このアプローチでは、コールバックメソッド (rt_callbacks(1HA)) の実装やリソースタイプ登録ファイル (rt_reg(4)) など、コンパイル済みのデータサービスやそのコンポーネントを変更することはできません。

コンパイル済みリソースタイプ

汎用データサービスのリソースタイプ SUNW.gds は、 SUNWscgds パッケージに含まれています。 このパッケージは、クラスタのインストール時に scinstall(1M) ユーティリティーでインストールされます。 SUNWscgds パッケージには次のファイルが格納されています。


# pkgchk -v SUNWscgds 

/opt/SUNWscgds 
/opt/SUNWscgds/bin 
/opt/SUNWscgds/bin/gds_monitor_check 
/opt/SUNWscgds/bin/gds_monitor_start 
/opt/SUNWscgds/bin/gds_monitor_stop 
/opt/SUNWscgds/bin/gds_probe 
/opt/SUNWscgds/bin/gds_svc_start 
/opt/SUNWscgds/bin/gds_svc_stop 
/opt/SUNWscgds/bin/gds_update 
/opt/SUNWscgds/bin/gds_validate 
/opt/SUNWscgds/etc 
/opt/SUNWscgds/etc/SUNW.gds

GDS を使用する利点

GDS には、SunPlex Agent Builder が生成するソースコードモデル (scdscreate (1HA) のマニュアルページを参照) や標準的な Sun Cluster 管理コマンドを使用するのに比べ、次の利点があります。

GDS を使用するサービスの作成方法

GDS を使用するサービスの作成方法は 2 通りあります。

GDS と SunPlex Agent Builder

SunPlex Agent Builder を使用し、生成されるソースコードのタイプとして GDS を選択します。 特定のアプリケーションのリソースを設定する起動スクリプト群を生成するためにユーザーの入力が必要です。

GDS と標準的な Sun Cluster 管理コマンド

この方法では SUNWscgds にあるコンパイル済みデータサービスコードを使用しますが、システム管理者は、標準的な Sun Cluster 管理コマンド (scrgadm(1M)scswitch(1M)) を使って、リソースの作成と構成を行う必要があります。

GDS ベースのサービスを作成する方法の選択

Sun Cluster 管理コマンドを使って GDS ベースの高可用性サービスを作成する方法標準的な Sun Cluster 管理コマンドを使って GDS ベースのスケーラブルサービスを作成する方法の手順からわかるように、適切な scrgadmscswitch コマンドを実行するためには、かなりの分量の入力を行う必要があります。

GDS と SunPlex Agent Builder を使用する方法では、この処理が簡単になります。この方法では、生成される起動スクリプトがユーザーに代わって scrgadmscswitch コマンドを出力するからです。

GDS 機構を使用しない場合

GDS には多くの利点がありますが、GDS 機構の使用が適さない場合もあります。 GDS 機構の使用が適さないのは次のような場合です。

GDS の必須プロパティ

次のプロパティを指定する必要があります。

Start_command 拡張プロパティ

Start_command 拡張プロパティに指定される起動コマンドは、アプリケーションの起動を行います。 このコマンドは、引数を備えた完全な UNIX コマンドでなければなりません。コマンドは、アプリケーションを起動するシェルに直接渡されます。

Port_list プロパティ

Port_list プロパティは、アプリケーションが待機するポート群を指定したものです。 Port_list プロパティは、SunPlex Agent Builder によって生成される start スクリプトか、scrgadm コマンド (標準的な Sun Cluster 管理コマンドを使用する場合) に指定されていなければなりません。

GDS のオプションプロパティ

GDS のオプションプロパティには次のものがあります。

Network_resources_used プロパティ

このプロパティのデフォルト値は Null です。 アプリケーションが 1 つ以上の特定のアドレスにバインドする必要がある場合は、このプロパティを指定する必要があります。 このプロパティを省略するか、このプロパティが Null の場合、アプリケーションはすべてのアドレスに対して待機するものとみなされます。

GDS リソースを作成する場合は、 LogicalHostnameSharedAddress リソースがあらかじめ構成されていなければなりません。 LogicalHostname または SharedAddress リソースの構成方法については、『Sun Cluster データサービスの計画と管理 (Solaris OS 版)』を参照してください。

値を指定する場合は、1 つまたは複数のリソース名を指定します。個々のリソース名には、1 つ以上の LogicalHostname か 1 つ以上の SharedAddress を指定できます。 詳細は、r_properties(5) のマニュアルページを参照してください。

Stop_command プロパティ

stop コマンドは、アプリケーションを停止し、アプリケーションが完全に停止した後で終了します。 このコマンドは、アプリケーションを停止するシェルに直接渡される完全な UNIX コマンドでなければなりません。

Stop_command が指定されていると、GDS 停止メソッドは、停止タイムアウトの 80% を指定して停止コマンドを起動します。 さらに、GDS 停止メソッドは、停止コマンドの起動結果がどうであれ、停止タイムアウトの 15% を指定して SIGKILL を送信します。 タイムアウトの残り 5% は、処理のオーバーヘッドのために使用されます。

stop コマンドが省略されていると、GDS は、 Stop_signal に指定されたシグナルを使ってアプリケーションを停止します。

Probe_command プロパティ

probe コマンドは、特定のアプリケーションの状態を周期的にチェックします。 このコマンドは、引数を備えた完全な UNIX コマンドでなければなりません。コマンドは、アプリケーションの状態をチェックするシェルに直接渡されます。 アプリケーションの状態が正常であれば、probe コマンドは終了ステータスとして 0 を返します。

検証コマンドの終了ステータスは、アプリケーションの障害の重大度を判断するために使用されます。 終了ステータス (probe ステータス) は、0 (正常) から 100 (全面的な障害) までの整数でなければなりません。 probe ステータスは 201 という特別な値をもつことがあります。この場合には、Failover_enabled が false に設定されている場合を除き、アプリケーションのフェイルオーバーが直ちに行なわれます。 GDS プローブアルゴリズム (scds_fm_action(3HA) のマニュアルページを参照) は、この検証状態を使って、アプリケーションをローカルに再起動するか別のノードにフェイルオーバーするかを決定します。終了ステータス 201 なら、アプリケーションは直ちにフェイルオーバーされます。

probe コマンドが省略されていると、GDS は、Newtork_resources_used プロパティか、 scds_get_netaddr_list(3HA) の出力から得られる IP アドレス群を使ってアプリケーションに接続する独自の簡単な検証を行います。 この検証では、接続に成功すると、接続を直ちに切り離します。 接続と切り離しが両方とも正常なら、アプリケーションは正常に動作しているものとみなされます。


注 –

GDS 提供の検証は、全機能を備えたアプリケーション固有の検証を代替するものではありません。


Start_timeout プロパティ

このプロパティでは、start コマンドの起動タイムアウトを指定します (詳細は、Start_command 拡張プロパティを参照)。 Start_timeout のデフォルトは 300 秒です。

Stop_timeout プロパティ

このプロパティでは、stop コマンドの停止タイムアウトを指定します (詳細は、Stop_command プロパティを参照)。 Stop_timeout のデフォルトは 300 秒です。

Probe_timeout プロパティ

このプロパティでは、probe コマンドのプローブタイムアウトを指定します (詳細は、Probe_command プロパティを参照)。 Probe_timeout のデフォルトは 30 秒です。

Child_mon_level プロパティ

このプロパティでは、PMF を通してどのプロセスを監視するかを制御します。 このプロパティは、フォークされた子プロセスをどのようなレベルで監視するかを表します。 これは、pmfadm(1M) コマンドの -C 引数と同等です。

このプロパティを省略するか、このプロパティにデフォルト値の -1 を指定することは、pmfadm コマンドで -C オプションを省略するのと同じ効果があります。


注 –

このオプションは、標準的な Sun Cluster 管理コマンドを使用するときだけ指定できます。 SunPlex Agent Builder を使用するときには指定できません。


Failover_enabled プロパティ

ブール値のこの拡張プロパティでは、リソースのフェイルオーバー動作を制御します。 この拡張プロパティに true を設定すると、アプリケーションは、再起動回数が retry_interval 秒間に retry_count を超えるとフェイルオーバーされます。

この拡張プロパティに false を設定すると、再起動回数が retry_interval 秒間に retry_count を超えてもアプリケーションの再起動やフェイルオーバーは行なわれません。

この拡張プロパティを使用すれば、アプリケーションリソースがリソースグループのフェイルオーバーを引き起こすことを防止できます。 デフォルトは true です。

Stop_signal プロパティ

GDS は、整数値のこの拡張プロパティを使って、PMF によるアプリケーションの停止に使用するシグナルを判別します。 指定できる整数値については、signal(3HEAD) のマニュアルページを参照してください。 デフォルトは 15 (SIGTERM) です。

SunPlex Agent Builder を使って GDS ベースのサービスを作成

SunPlex Agent Builder を使ってGDS ベースのサービスを作成できます。 SunPlex Agent Builder の詳細については、第 9 章「SunPlex Agent Builder」を参照してください。

Agent Builder を使って GDS ベースのサービスを作成

Agent Builder を使って GDS ベースのサービスを作成する方法
  1. SunPlex Agent Builder を起動します。


    # /usr/cluster/bin/scdsbuilder
    
  2. 「SunPlex Agent Builder」パネルが表示されます。

    「SunPlex Agent Builder」ダイアログ - Agent Builder メイン画面
  3. 「ベンダー名」にベンダー名を入力します。

  4. 「アプリケーション名」にアプリケーション名を入力します。


    注 –

    「ベンダー名」と「アプリケーション名」の合計は 9 文字以内でなければなりません。 この組み合わせは、起動スクリプトのパッケージ名として使用されます。


  5. 作業ディレクトリに移動します。

    「ブラウズ」のプルダウンを使用すれば、パスを入力する代わりにディレクトリを選択することができます。

  6. データサービスがスケーラブルなのかフェイルオーバーなのかを選択します。

    GDS を作成するときには「ネットワーク認識」がデフォルトですので、これを選択する必要はありません。

  7. 「GDS」を選択します。

  8. 「作成」ボタンをクリックして起動スクリプトを作成します。

  9. サービスの作成結果が「SunPlex Agent Builder」パネルに表示されます。 「作成」ボタンが無効になります。「進む」ボタンを押します。

    情報入力後の Create 画面
起動スクリプトを構成する方法

起動スクリプトを作成したなら、SunPlex Agent Builder を使って新しいサービスを構成する必要があります。

  1. 「進む」ボタンをクリックすると、構成パネルが表示されます。

  2. 起動コマンドの場所を入力するか、「ブラウズ」ボタンを使って起動コマンドの場所を選択します。

  3. (省略可能) 停止コマンドを入力するか、「ブラウズ」ボタンを使って停止コマンドの場所を選択します。

  4. (省略可能) 検証コマンドを入力するか、「ブラウズ」ボタンを使って検証コマンドの場所を選択します。

  5. (省略可能) 起動、停止、検証コマンドのタイムアウト値を指定します。

  6. 「構成」をクリックして起動スクリプトの構成を開始します。


    注 –

    このパッケージ名は、ベンダー名とアプリケーション名が結合したものです。


    起動スクリプトのパッケージが作成され、次の場所に格納されます。


    <working-dir>/<vendor_name><application>/pkg
    
    たとえば、 /export/wdir/NETapp/pkg のようになります。

  7. 完成したパッケージをクラスタのすべてのノードにインストールします。


    # cd /export/wdir/NETapp/pkg 
    # pkgadd -d . NETapp
    

  8. pkgadd の実行で次のファイルがインストールされます。


    /opt/NETapp 
    /opt/NETapp/README.app 
    /opt/NETapp/man 
    /opt/NETapp/man/man1m 
    /opt/NETapp/man/man1m/removeapp.1m 
    /opt/NETapp/man/man1m/startapp.1m 
    /opt/NETapp/man/man1m/stopapp.1m 
    /opt/NETapp/man/man1m/app_config.1m 
    /opt/NETapp/util 
    /opt/NETapp/util/removeapp 
    /opt/NETapp/util/startapp 
    /opt/NETapp/util/stopapp 
    /opt/NETapp/util/app_config


    注 –

    マニュアルページとスクリプト名は、上で入力したアプリケーション名の前にスクリプト名を付けたものです。たとえば、startapp のようになります。


    マニュアルページを表示するには、マニュアルページへのパスを指定する必要があります。 たとえば、startapp のマニュアルページを表示する場合は、次のように入力します。


    # man -M /opt/NETapp/man startapp
    
  9. クラスタのいずれかのノードでリソースを構成し、アプリケーションを起動します。


    # /opt/NETapp/util/startapp -h <logichostname> -p <port and protocol list>
    

    起動スクリプトの引数は、 リソースのタイプがフェイルオーバーかスケーラブルかで異なります。 カスタマイズしたマニュアルページを検査するか、起動スクリプトを引数なしで実行して引数リストを入手してください。


    # /opt/NETapp/util/startapp
     The resource name of LogicalHostname or SharedAddress must be
     specified. 
     For failover services: 
     Usage: startapp -h <logical host name> 
              -p <port and protocol list> 
              [-n <ipmpgroup/adapter list>] 
     For scalable services: 
     Usage: startapp  
              -h <shared address name> 
              -p <port and protocol list> 
              [-l <load balancing policy>]  
              [-n <ipmpgroup/adapter list>] 
              [-w <load balancing weights>]

SunPlex Agent Builder の出力

SunPlex Agent Builder は 3 つの起動スクリプトと、パッケージ作成時の入力内容に基づいた構成ファイルを生成します。 構成ファイルには、リソースグループとリソースタイプの名前が指定されます。

生成される起動スクリプトは次のとおりです。

これらの起動スクリプトのインタフェースや動作は、SunPlex Agent Builder によって非 GDS ベースのエージェント用に作成されるユーティリティスクリプトのものと同じです。 これらのスクリプトは、Solaris パッケージに含まれており、複数のクラスタで再利用できます。

構成ファイルをカスタマイズすれば、リソースグループの名前など、一般には scrgadm コマンドへの入力として指定されるパラメータを独自に設定できます。 スクリプトをカスタマイズしないと、SunPlex Agent Builder が scrgadm のパラメータに対し妥当なデフォルトを 設定します。

標準的な Sun Cluster 管理コマンドを使って GDS ベースのサービスを作成

この節では、これらのパラメータが実際に GDS に入力されるまでの手順を示します。 GDS の使用や管理は、scrgadmscswitch など、すでにある Sun Cluster 管理コマンドを通して行われます。

起動スクリプトに適切な機能が含まれている場合は、この節で述べる低位レベルの管理コマンドを入力する必要はありません。 ただし、GDS ベースのリソースをより細かく制御したい場合は、このような低位レベルのコマンドを入力することもできます。 起動スクリプトでは、これらのコマンドが実際に実行されます。

Sun Cluster 管理コマンドを使って GDS ベースの高可用性サービスを作成する方法
  1. リソースタイプ SUNW.gds を登録します。


    # scrgadm -a -t SUNW.gds
    
  2. LogicalHostname リソースとフェイルオーバーサービス自体を含むリソースグループを作成します。


    # scrgadm -a -g haapp_rg
    
  3. LogicalHostname リソースのリソースを作成します。


    # scrgadm -a -L -g haapp_rs -l hhead
    
  4. フェイルオーバーサービス自体のリソースを作成します。


    # scrgadm -a -j haapp_rs -g haapp_rg -t SUNW.gds \
             -y Scalable=false -y Start_timeout=120 \
             -y Stop_timeout=120 -x Probe_timeout=120 \
             -y Port_list="2222/tcp" \
             -x Start_command="/export/ha/appctl/start" \
             -x Stop_command="/export/ha/appctl/stop" \    
             -x Probe_command="/export/app/bin/probe" \
             -x Child_mon_level=0 -y Network_resources_used=hhead \
             -x Failover_enabled=true -x Stop_signal=9
    
  5. リソースグループ haapp_rg をオンラインにします。


    # scswitch -Z -g haapp_rg
    
標準的な Sun Cluster 管理コマンドを使って GDS ベースのスケーラブルサービスを作成する方法
  1. リソースタイプ SUNW.gds を登録します。


    # scrgadm -a -t SUNW.gds
    
  2. SharedAddress リソースのリソースグループを作成します。


    # scrgadm -a -g sa_rg
    

  3. SharedAddress リソースを sa_rg に作成します。


    # scrgadm -a -S -g sa_rg -l hhead
    
  4. スケーラブルサービスのリソースグループを作成します。


    # scrgadm -a -g app_rg -y Maximum_primaries=2 \
          -y Desired_primaries=2 -y RG_dependencies=sa_rg
    
  5. スケーラブルサービス自体のリソースグループを作成します。


    # scrgadm -a -j app_rs -g app_rg -t SUNW.gds \
           -y Scalable=true -y Start_timeout=120 \ 
           -y Stop_timeout=120 -x Probe_timeout=120 \
           -y Port_list="2222/tcp" \
           -x Start_command="/export/app/bin/start" \
           -x Stop_command="/export/app/bin/stop" \
           -x Probe_command="/export/app/bin/probe" \
           -x Child_mon_level=0 -y Network_resource_used=hhead \
           -x Failover_enabled=true -x Stop_signal=9 
    
  6. ネットワークリソースを含むリソースグループをオンラインにします。


     # scswitch -Z -g sa_rg
    
  7. リソースグループ app_rg をオンラインにします。


    # scswitch -Z -g app_rg
    

SunPlex Agent Builder のコマンド行インタフェース

SunPlex Agent Builder には、GUI インタフェースと同等の機能をもつコマンド行インタフェースがあります。 このインタフェースは、scsdcreate(1HA)scdsconfig(1HA) からなります。 この節では、GUI ベースの手順 によるものと同じ機能をコマンド行インタフェースを使って行います。

コマンド行バージョンの Agent Builder を使用して GDS ベースのサービスを作成する方法
  1. サービスを作成します。

    フェイルオーバーサービスの場合:


    # scdscreate -g -V NET -T app -d /export/wdir
    

    スケーラブルサービスの場合:


    # scdscreate -g -s -V NET -T app -d /export/wdir
    

    注 –

    –d パラメータは任意です。 このパラメータを指定しない場合は、作業ディレクトリとして現在のディレクトリが使用されます。


  2. サービスを構成します。


    # scdsconfig -s "/export/app/bin/start' -t "/export/app/bin/stop" \
    -m "/export/app/bin/probe" -d /export/wdir
    


    注 –

    start コマンドだけが必須で、 他のパラメータはすべて任意です。


  3. 完成したパッケージをクラスタのすべてのノードにインストールします。


    # cd /export/wdir/NETapp/pkg 
    # pkgadd -d . NETapp
    

  4. pkgadd の実行で次のファイルがインストールされます。


    /opt/NETapp 
    /opt/NETapp/README.app 
    /opt/NETapp/man 
    /opt/NETapp/man/man1m 
    /opt/NETapp/man/man1m/removeapp.1m 
    /opt/NETapp/man/man1m/startapp.1m 
    /opt/NETapp/man/man1m/stopapp.1m 
    /opt/NETapp/man/man1m/app_config.1m 
    /opt/NETapp/util 
    /opt/NETapp/util/removeapp 
    /opt/NETapp/util/startapp 
    /opt/NETapp/util/stopapp 
    /opt/NETapp/util/app_config


    注 –

    マニュアルページとスクリプト名は、上で入力したアプリケーション名の前にスクリプト名を付けたものです。たとえば、startapp のようになります。


    マニュアルページを表示するには、マニュアルページへのパスを指定する必要があります。 たとえば、startapp のマニュアルページを表示する場合は、次のように入力します。


    # man -M /opt/NETapp/man startapp
    
  5. クラスタのいずれかのノードでリソースを構成し、アプリケーションを起動します。


    # /opt/NETapp/util/startapp -h <logichostname> -p <port and protocol list>
    

    起動スクリプトの引数は、 リソースのタイプがフェイルオーバーかスケーラブルかで異なります。 カスタマイズしたマニュアルページを検査するか、起動スクリプトを引数なしで実行して引数リストを入手してください。


    # /opt/NETapp/util/startapp 
     The resource name of LogicalHostname or SharedAddress must be
     specified.
     For failover services: 
     Usage: startapp -h <logical host name> 
              -p <port and protocol list> 
              [-n <ipmpgroup/adapter list>] 
     For scalable services: 
     Usage: startapp  
              -h <shared address name> 
              -p <port and protocol list> 
              [-l <load balancing policy>]  
              [-n <ipmpgroup/adapter list>] 
              [-w <load balancing weights>]