この章では、最初に汎用データサービス (GDS) の概要について説明した後に、SunPlex Agent Builder または標準的な Sun Cluster 管理コマンドを使って 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 には、SunPlex Agent Builder が生成するソースコードモデル (scdscreate (1HA) のマニュアルページを参照) や標準的な Sun Cluster 管理コマンドを使用するのに比べ、次の利点があります。
GDS は使い易いデータサービスです。
GDS とそのメソッドはコンパイル済みであるため、変更できません。
SunPlex Agent Builder を使って、アプリケーションを起動するスクリプトを生成できます。これらのスクリプトは、複数のクラスタ間で再利用できる Solaris パッケージに含まれています。
SunPlex Agent Builder を使用
標準的な Sun Cluster 管理コマンドを使用
SunPlex Agent Builder を使用し、生成されるソースコードのタイプとして GDS を選択します。 特定のアプリケーションのリソースを設定する起動スクリプト群を生成するためにユーザーの入力が必要です。
この方法では SUNWscgds にあるコンパイル済みデータサービスコードを使用しますが、システム管理者は、標準的な Sun Cluster 管理コマンド (scrgadm(1M) と scswitch(1M)) を使って、リソースの作成と構成を行う必要があります。
Sun Cluster 管理コマンドを使って GDS ベースの高可用性サービスを作成する方法や 標準的な Sun Cluster 管理コマンドを使って GDS ベースのスケーラブルサービスを作成する方法の手順からわかるように、適切な scrgadm や scswitch コマンドを実行するためには、かなりの分量の入力を行う必要があります。
GDS と SunPlex Agent Builder を使用する方法では、この処理が簡単になります。この方法では、生成される起動スクリプトがユーザーに代わって scrgadm と scswitch コマンドを出力するからです。
GDS には多くの利点がありますが、GDS 機構の使用が適さない場合もあります。 GDS 機構の使用が適さないのは次のような場合です。
コンパイル済みリソースタイプを使用する場合よりも高度な制御が必要な場合。 たとえば拡張プロパティを追加する場合や、デフォルト値を変更する場合など
特別な機能を追加するためにソースコードを変更する必要がある場合
複数のプロセスツリーを使用する場合
ネットワーク対応でないアプリケーションを使用する場合
Start_command (拡張プロパティ)
Port_list
Start_command 拡張プロパティに指定される起動コマンドは、アプリケーションの起動を行います。 このコマンドは、引数を備えた完全な UNIX コマンドでなければなりません。コマンドは、アプリケーションを起動するシェルに直接渡されます。
Port_list プロパティは、アプリケーションが待機するポート群を指定したものです。 Port_list プロパティは、SunPlex Agent Builder によって生成される start スクリプトか、scrgadm コマンド (標準的な Sun Cluster 管理コマンドを使用する場合) に指定されていなければなりません。
Network_resources_used
Stop_command (拡張プロパティ)
Probe_command (拡張プロパティ)
Start_timeout
Stop_timeout
Probe_timeout (拡張プロパティ)
Child_mon_level (標準的な管理コマンドだけで使用される拡張プロパティ)
Failover_enabled (拡張プロパティ)
Stop_signal (拡張プロパティ)
このプロパティのデフォルト値は Null です。 アプリケーションが 1 つ以上の特定のアドレスにバインドする必要がある場合は、このプロパティを指定する必要があります。 このプロパティを省略するか、このプロパティが Null の場合、アプリケーションはすべてのアドレスに対して待機するものとみなされます。
GDS リソースを作成する場合は、 LogicalHostname か SharedAddress リソースがあらかじめ構成されていなければなりません。 LogicalHostname または SharedAddress リソースの構成方法については、『Sun Cluster データサービスの計画と管理 (Solaris OS 版)』を参照してください。
値を指定する場合は、1 つまたは複数のリソース名を指定します。個々のリソース名には、1 つ以上の LogicalHostname か 1 つ以上の SharedAddress を指定できます。 詳細は、r_properties(5) のマニュアルページを参照してください。
stop コマンドは、アプリケーションを停止し、アプリケーションが完全に停止した後で終了します。 このコマンドは、アプリケーションを停止するシェルに直接渡される完全な UNIX コマンドでなければなりません。
Stop_command が指定されていると、GDS 停止メソッドは、停止タイムアウトの 80% を指定して停止コマンドを起動します。 さらに、GDS 停止メソッドは、停止コマンドの起動結果がどうであれ、停止タイムアウトの 15% を指定して SIGKILL を送信します。 タイムアウトの残り 5% は、処理のオーバーヘッドのために使用されます。
stop コマンドが省略されていると、GDS は、 Stop_signal に指定されたシグナルを使ってアプリケーションを停止します。
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 コマンドの起動タイムアウトを指定します (詳細は、Start_command 拡張プロパティを参照)。 Start_timeout のデフォルトは 300 秒です。
このプロパティでは、stop コマンドの停止タイムアウトを指定します (詳細は、Stop_command プロパティを参照)。 Stop_timeout のデフォルトは 300 秒です。
このプロパティでは、probe コマンドのプローブタイムアウトを指定します (詳細は、Probe_command プロパティを参照)。 Probe_timeout のデフォルトは 30 秒です。
このプロパティでは、PMF を通してどのプロセスを監視するかを制御します。 このプロパティは、フォークされた子プロセスをどのようなレベルで監視するかを表します。 これは、pmfadm(1M) コマンドの -C 引数と同等です。
このプロパティを省略するか、このプロパティにデフォルト値の -1 を指定することは、pmfadm コマンドで -C オプションを省略するのと同じ効果があります。
このオプションは、標準的な Sun Cluster 管理コマンドを使用するときだけ指定できます。 SunPlex Agent Builder を使用するときには指定できません。
ブール値のこの拡張プロパティでは、リソースのフェイルオーバー動作を制御します。 この拡張プロパティに true を設定すると、アプリケーションは、再起動回数が retry_interval 秒間に retry_count を超えるとフェイルオーバーされます。
この拡張プロパティに false を設定すると、再起動回数が retry_interval 秒間に retry_count を超えてもアプリケーションの再起動やフェイルオーバーは行なわれません。
この拡張プロパティを使用すれば、アプリケーションリソースがリソースグループのフェイルオーバーを引き起こすことを防止できます。 デフォルトは true です。
GDS は、整数値のこの拡張プロパティを使って、PMF によるアプリケーションの停止に使用するシグナルを判別します。 指定できる整数値については、signal(3HEAD) のマニュアルページを参照してください。 デフォルトは 15 (SIGTERM) です。
SunPlex Agent Builder を使ってGDS ベースのサービスを作成できます。 SunPlex Agent Builder の詳細については、第 9 章「SunPlex Agent Builder」を参照してください。
# /usr/cluster/bin/scdsbuilder |
「SunPlex Agent Builder」パネルが表示されます。
「ベンダー名」にベンダー名を入力します。
「アプリケーション名」にアプリケーション名を入力します。
「ベンダー名」と「アプリケーション名」の合計は 9 文字以内でなければなりません。 この組み合わせは、起動スクリプトのパッケージ名として使用されます。
作業ディレクトリに移動します。
「ブラウズ」のプルダウンを使用すれば、パスを入力する代わりにディレクトリを選択することができます。
データサービスがスケーラブルなのかフェイルオーバーなのかを選択します。
GDS を作成するときには「ネットワーク認識」がデフォルトですので、これを選択する必要はありません。
「GDS」を選択します。
「作成」ボタンをクリックして起動スクリプトを作成します。
サービスの作成結果が「SunPlex Agent Builder」パネルに表示されます。 「作成」ボタンが無効になります。「進む」ボタンを押します。
起動スクリプトを作成したなら、SunPlex Agent Builder を使って新しいサービスを構成する必要があります。
「進む」ボタンをクリックすると、構成パネルが表示されます。
起動コマンドの場所を入力するか、「ブラウズ」ボタンを使って起動コマンドの場所を選択します。
(省略可能) 停止コマンドを入力するか、「ブラウズ」ボタンを使って停止コマンドの場所を選択します。
(省略可能) 検証コマンドを入力するか、「ブラウズ」ボタンを使って検証コマンドの場所を選択します。
(省略可能) 起動、停止、検証コマンドのタイムアウト値を指定します。
「構成」をクリックして起動スクリプトの構成を開始します。
このパッケージ名は、ベンダー名とアプリケーション名が結合したものです。
起動スクリプトのパッケージが作成され、次の場所に格納されます。
<working-dir>/<vendor_name><application>/pkg |
完成したパッケージをクラスタのすべてのノードにインストールします。
# cd /export/wdir/NETapp/pkg # pkgadd -d . NETapp |
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 |
クラスタのいずれかのノードでリソースを構成し、アプリケーションを起動します。
# /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 は 3 つの起動スクリプトと、パッケージ作成時の入力内容に基づいた構成ファイルを生成します。 構成ファイルには、リソースグループとリソースタイプの名前が指定されます。
生成される起動スクリプトは次のとおりです。
起動スクリプト: リソースを構成し、RGM 制御のもとでアプリケーションを起動します。
停止スクリプト: アプリケーションを停止し、リソースやリソースグループを停止します。
削除スクリプト: 起動スクリプトによって作成されたリソースやリソースグループを削除します。
これらの起動スクリプトのインタフェースや動作は、SunPlex Agent Builder によって非 GDS ベースのエージェント用に作成されるユーティリティスクリプトのものと同じです。 これらのスクリプトは、Solaris パッケージに含まれており、複数のクラスタで再利用できます。
構成ファイルをカスタマイズすれば、リソースグループの名前など、一般には scrgadm コマンドへの入力として指定されるパラメータを独自に設定できます。 スクリプトをカスタマイズしないと、SunPlex Agent Builder が scrgadm のパラメータに対し妥当なデフォルトを 設定します。
この節では、これらのパラメータが実際に GDS に入力されるまでの手順を示します。 GDS の使用や管理は、scrgadm や scswitch など、すでにある Sun Cluster 管理コマンドを通して行われます。
起動スクリプトに適切な機能が含まれている場合は、この節で述べる低位レベルの管理コマンドを入力する必要はありません。 ただし、GDS ベースのリソースをより細かく制御したい場合は、このような低位レベルのコマンドを入力することもできます。 起動スクリプトでは、これらのコマンドが実際に実行されます。
# scrgadm -a -t SUNW.gds |
LogicalHostname リソースとフェイルオーバーサービス自体を含むリソースグループを作成します。
# scrgadm -a -g haapp_rg |
LogicalHostname リソースのリソースを作成します。
# scrgadm -a -L -g haapp_rs -l hhead |
フェイルオーバーサービス自体のリソースを作成します。
# 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 |
リソースグループ haapp_rg をオンラインにします。
# scswitch -Z -g haapp_rg |
リソースタイプ SUNW.gds を登録します。
# scrgadm -a -t SUNW.gds |
SharedAddress リソースのリソースグループを作成します。
# scrgadm -a -g sa_rg |
SharedAddress リソースを sa_rg に作成します。
# scrgadm -a -S -g sa_rg -l hhead |
スケーラブルサービスのリソースグループを作成します。
# scrgadm -a -g app_rg -y Maximum_primaries=2 \ -y Desired_primaries=2 -y RG_dependencies=sa_rg |
スケーラブルサービス自体のリソースグループを作成します。
# 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 |
ネットワークリソースを含むリソースグループをオンラインにします。
# scswitch -Z -g sa_rg |
リソースグループ app_rg をオンラインにします。
# scswitch -Z -g app_rg |
SunPlex Agent Builder には、GUI インタフェースと同等の機能をもつコマンド行インタフェースがあります。 このインタフェースは、scsdcreate(1HA) と scdsconfig(1HA) からなります。 この節では、GUI ベースの手順 によるものと同じ機能をコマンド行インタフェースを使って行います。
サービスを作成します。
フェイルオーバーサービスの場合:
# scdscreate -g -V NET -T app -d /export/wdir |
スケーラブルサービスの場合:
# scdscreate -g -s -V NET -T app -d /export/wdir |
–d パラメータは任意です。 このパラメータを指定しない場合は、作業ディレクトリとして現在のディレクトリが使用されます。
サービスを構成します。
# scdsconfig -s "/export/app/bin/start' -t "/export/app/bin/stop" \ -m "/export/app/bin/probe" -d /export/wdir |
start コマンドだけが必須で、 他のパラメータはすべて任意です。
完成したパッケージをクラスタのすべてのノードにインストールします。
# cd /export/wdir/NETapp/pkg # pkgadd -d . NETapp |
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 |
クラスタのいずれかのノードでリソースを構成し、アプリケーションを起動します。
# /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>] |