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

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

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

この章の内容は、次のとおりです。

GDS の概要

GDS とは、簡単なネットワーク対応や非ネットワーク対応のアプリケーションを高可用性にしたり、スケーラブルにしたりするためのメカニズムです。そのためには、これらのアプリケーションを Sun Cluster Resource Group Management (RGM) フレームワークに組み込む必要があります。この機構では、アプリケーションを高可用性にしたり、スケーラブルにしたりするために通常必要になるエージェントのコーディングは必要ありません。

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

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

汎用データサービスのリソースタイプ SUNW.gds は、 SUNWscgds パッケージに含まれています。このパッケージは、クラスタのインストール時に scinstall ユーティリティによってインストールされます (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 機構の使用が適さない場合もあります。次のような場合は、GDS を使用すべきではありません。

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 でロギングすべきメッセージのレベル (つまり、タイプ) の指定には、Log_level プロパティを使用します (詳細は Log_level プロパティ」を参照)。プロパティの値には NONEINFO 、または ERR を指定できます。

GDS ログファイル

次の 2 つの GDS ログファイルが、/var/cluster/logs/DS/resource_group_name/ resource_name ディレクトリに置かれます。

start_stop_log.txt には、次のようなメッセージが書き込まれます。

10/20/2004 12:38:05 phys-node-1 START-INFO> Start succeeded. [/home/brianx/sc/start_cmd]
10/20/2004 12:42:11 phys-node-1 STOP-INFO> Successfully stopped the application

probe_log.txt には、次のようなメッセージが書き込まれます。

10/20/2004 12:38:15 phys-node-1 PROBE-INFO> The GDS monitor (gds_probe) has been started
10/20/2004 12:39:15 phys-node-1 PROBE-INFO> The probe result is 0
10/20/2004 12:40:15 phys-node-1 PROBE-INFO> The probe result is 0
10/20/2004 12:41:15 phys-node-1 PROBE-INFO> The probe result is 0

必須の GDS プロパティ

アプリケーションが非ネットワーク対応の場合は、Start_command 拡張プロパティと Port_list プロパティを両方とも指定する必要があります。アプリケーションがネットワーク対応の場合は、Port_list プロパティだけが必須です。

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 コマンドでなければなりません。コマンドは、アプリケーションを検証するシェルに直接渡されます。アプリケーションの状態が正常であれば、検証コマンドは終了ステータスとして 0 を返します。

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

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


注 –

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


Start_timeout プロパティ

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

Stop_timeout プロパティ

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

Probe_timeout プロパティ

このプロパティでは、検証コマンドのタイムアウト値を指定します。詳細は、Probe_command プロパティ」を参照してください。Probe_timeout のデフォルトは 30 秒です。

Child_mon_level プロパティ


注 –

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


このプロパティを使用すれば、Process Monitor Facility (PMF) を通して監視するプロセスを制御できます。このプロパティは、フォークされた子プロセスをどのようなレベルで監視するかを表します。このプロパティは、pmfadm コマンドの -C 引数と同等の働きをします。詳細は、pmfadm(1M) のマニュアルページを参照してください。

このプロパティを省略するか、このプロパティにデフォルト値の -1 を指定することは、pmfadm コマンドで --C オプションを省略するのと同じ効果があります。つまり、すべての子プロセスとその子孫プロセスが監視されます。

Failover_enabled プロパティ

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

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

このプロパティにより、アプリケーションリソースによるリソースグループのフェイルオーバーを防ぐことができます。このプロパティのデフォルトの値は true です。

Stop_signal プロパティ

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

Log_level プロパティ

このプロパティでは、GDS でロギングする診断メッセージのレベル (タイプ) を指定します。このプロパティには、 NONEINFO、または ERR を指定できます。NONE を指定すると、診断メッセージはロギングされません。INFO を指定すると、情報メッセージだけがロギングされます。ERR を指定すると、エラーメッセージだけがロギングされます。デフォルトでは、診断メッセージはロギングされません (NONE)。

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

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

スクリプトの作成と構成

SunPlex Agent Builder を起動し、スクリプトを作成する方法
  1. スーパーユーザーになるか、同等の役割になります。

  2. SunPlex Agent Builder を起動します。


    # /usr/cluster/bin/scdsbuilder
    
  3. 「SunPlex Agent Builder Create」画面が表示されます。

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

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


    注 –

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


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

    このパスを入力する代わりに、「ブラウズ」プルダウンメニューを使ってディレクトリを選択することもできます。

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

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

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

  9. (省略可能) 「RT バージョン」フィールドにデフォルト値が表示されるので、これを変更します。


    注 –

    「RT バージョン」フィールドで次の文字を使用することはできません。空白文字、タブ、スラッシュ (/)、逆スラッシュ (\)、アステリスク (*)、疑問符 (?)、コンマ (,)、セミコロン (;)、左角かっこ ([)、右角かっこ (])。


  10. 「Create」をクリックしてください。

    Agent Builder がスクリプトを作成します。サービスの作成結果が「Output Log」ウィンドウに表示されます。

    情報を入力した後の作成画面を示すダイアログボックス

    「Create」がグレイ表示されます。これで、スクリプトの構成を始めることができます。

  11. 「進む」をクリックする。

    「構成」画面が表示されます。

スクリプトを構成する方法

スクリプトの作成が終わったら、新しいサービスを構成する必要があります。

  1. 起動コマンドの場所を指定するか、「ブラウズ」をクリックして起動コマンドの場所を選択します。

    プロパティ変数を指定できます。プロパティ変数については、「プロパティ変数」を参照してください。

  2. (省略可能) 停止コマンドを指定するか、「ブラウズ」をクリックして停止コマンドを選択します。

    プロパティ変数を指定できます。プロパティ変数については、「プロパティ変数」を参照してください。

  3. (省略可能) 検証コマンドを指定するか、「ブラウズ」をクリックして検証コマンドを選択します。

    プロパティ変数を指定できます。プロパティ変数については、「プロパティ変数」を参照してください。

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

  5. 「構成」をクリックします。

    Agent Builder が起動し、スクリプトを構成します。


    注 –

    Agent Builder は、ベンダー名とアプリケーション名を連結してパッケージ名を作成します。


    スクリプトのパッケージが作成され、次のディレクトリに置かれます。


    working-dir/vendor_nameapplication/pkg
    

    たとえば、/export/wdir/NETapp/pkg のようになります。

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


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

  7. 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(1M) のマニュアルページを表示する場合は、次のように指定します。


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


    # /opt/NETapp/util/startapp -h logicalhostname -p port_and_protocol_list
    

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


    # /opt/NETapp/util/startapp
     The resource name of LogicalHostname or SharedAddress must be
     specified. For failover services:
     Usage: startapp -h logicalhostname
              -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 の使用や管理には、既存の Sun Cluster 管理コマンド (scrgadmscswitch など) を使用します。

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

Sun Cluster 管理コマンドを使って GDS ベースの高可用性サービスを作成する方法
  1. スーパーユーザーになるか、同等の役割になります。

  2. リソースタイプ SUNW.gds を登録します。


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


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


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


    # 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
    
  6. リソースグループ haapp_rg をオンラインにします。


    # scswitch -Z -g haapp_rg
    
Sun Cluster 管理コマンドを使って GDS ベースのスケーラブルサービスを作成する方法
  1. スーパーユーザーになるか、同等の役割になります。

  2. リソースタイプ SUNW.gds を登録します。


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


    # scrgadm -a -g sa_rg
    

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


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


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


    # 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 
    
  7. ネットワークリソースを含むリソースグループをオンラインにします。


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


    # scswitch -Z -g app_rg
    

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

SunPlex Agent Builder のコマンド行インタフェースでも、グラフィカルユーザーインタフェースで使用できるのと同じ機能を使用できます。コマンド行インタフェースは scdscreatescdsconfig コマンドからなります。詳細は、scdscreate(1HA)scdsconfig(1HA) のマニュアルページを参照してください。

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

この節では、「SunPlex Agent Builder を使って GDS ベースのサービスを作成」 と同じ手順を、コマンド行インタフェースを使ってどのように行うかについて説明します。

  1. スーパーユーザーになるか、同等の役割になります。

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

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


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

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


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

    注 –

    -d パラメータは任意です。このパラメータを省略すると、現在のディレクトリが作業ディレクトリになります。


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


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

    プロパティ変数を指定できます。プロパティ変数については、「プロパティ変数」を参照してください。


    注 –

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


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


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

  5. 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(1M) のマニュアルページを表示する場合は、次のように指定します。


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


    # /opt/NETapp/util/startapp -h logicalhostname -p port_and_protocol_list
    

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


    # /opt/NETapp/util/startapp
     The resource name of LogicalHostname or SharedAddress must be
     specified.
     For failover services:
     Usage: startapp -h logicalhostname
              -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]