この章では、データサービス開発ライブラリ (Data Service Development Library、DSDL) を形成するアプリケーションプログラミングインタフェースの概要を説明します。DSDL は libdsdev.so ライブラリとして実装されており、Sun Cluster パッケージに含まれています。
この章の内容は次のとおりです。
DSDL API は、RMAPI の最上位の階層を形成します。そのため、DSDL API は RMAPI の代わりになるものではなく、RMAPI の機能をカプセル化および拡張するためのものです。DSDL は、特定の Sun Cluster 統合問題に対する事前定義されたソリューションを提供することによって、データサービスの開発を簡素化します。その結果、アプリケーションに本来求められている高可用性とスケーラビリティーの問題に、より多くの開発時間を割くことが可能になります。また、アプリケーションの起動、シャットダウン、および監視機能を Sun Cluster に統合する際に、多くの時間を費やすこともありません。
すべてのコールバックメソッドは構成プロパティーにアクセスする必要があります。
DSDL は、次の手段により、プロパティーへのアクセスをサポートします。
環境の初期化
プロパティー値を簡単に取得できる関数セットの提供
scds_initialize() 関数 (各コールバックメソッドの開始時に呼び出す必要がある) は、次の処理を行います。
RGM がコールバックメソッドに渡すコマンド行引数 (argc とargv[]) を検査および処理します。そのため、コマンド行解析関数を作成する必要はありません。
ほかの DSDL 関数が使用できるように内部データ構造を設定します。たとえば、DSDL で提供されている関数によって RGM から取得されたプロパティー値はこのデータ構造に格納されます。同様に、コマンド行から入力された値 (RGM から取得された値よりも優先される) もこのデータ構造に格納されます。
関数はロギング環境を初期化して、障害モニターの検証設定の妥当性を検査します。
Validate メソッドの場合、scds_initialize() はコマンド行で渡されたプロパティー値を解析します。そのため、Validate 用の解析関数を作成する必要はありません。
DSDL は、リソース、リソースタイプ、リソースグループのプロパティー、および、よく使用される拡張プロパティーを取得するための関数セットを提供します。
これらの関数は、次のような規則を使用して、プロパティーへのアクセスを標準化しています。
各関数は、scds_initialize() から戻されるハンドル引数だけを取ります。
各関数が特定のプロパティーに対応します。関数の戻り値のタイプは取得するプロパティー値のタイプに一致します。
値は scds_initialize() によってあらかじめ算出されているため、関数はエラーを戻しません。新しい値がコマンド行で渡された場合を除き、関数は RGM から値 を取得します。
Start メソッドは、クラスタノード上でデータサービスを起動するために必要なアクションを実行します。通常、このようなアクションには、リソースプロパティーの取得、アプリケーション固有の実行可能ファイルおよび構成ファイルの格納先の特定、および適切なコマンド行引数を用いたアプリケーションの起動が含まれます。
scds_initialize() 関数はリソース構成を取得します。Start メソッドはプロパティー用の DSDL 関数を使用して、アプリケーションを起動するのに必要な構成ディレクトリや構成ファイルを識別するための特定のプロパティー (Confdir_list など) の値を取得します。
Start メソッドは、scds_pmf_start() を呼び出して、プロセス監視機能 (Process Monitor Facility、PMF) の制御下でアプリケーションを起動します。PMF を使用すると、プロセスに適用する監視レベルを指定したり、異常終了したプロセスを再起動したりできます。DSDL で実装する Start メソッドの例については、「xfnts_start メソッド」を参照してください。
Stop メソッドは呼び出し回数に依存しないように実装されていなければなりません。つまり Stop メソッドは、アプリケーションが動作していないときにノード上で呼び出された場合でも、正常終了する必要があります。Stop メソッドが失敗した場合、停止するリソースが STOP_FAILED 状態に設定され、クラスタのハードウェア再起動を招いてしまう可能性があります。
リソースが STOP_FAILED 状態になるのを防止するために、Stop メソッドはあらゆる手段を構じてリソースを停止する必要があります。scds_pmf_stop() 関数は、段階的にリソースを停止しようとします。この関数はまず、SIGTERM シグナルを使用してリソースを停止しようとします。これに失敗した場合は、SIGKILL シグナルを使用します。詳細は、scds_pmf_stop(3HA)のマニュアルページを参照してください。
DSDL は事前に定義されたモデルを備えているため、障害モニターを実装する際の複雑さを大幅に軽減します。リソースがノード上で起動すると、Monitor_start メソッドは PMF の制御下で障害モニターを起動します。リソースがノード上で動作している間、障害モニターは無限ループを実行します。
次に、DSDL 障害モニターのロジックの概要を示します。
scds_fm_sleep() 関数は Thorough_probe_interval プロパティーを使用して、検証を行う期間を決定します。この期間中に PMF がアプリケーションプロセスの失敗を検出した場合、リソースは再起動されます。
検証機能自身は、障害の重要度を示す値を戻し、この値の範囲は、0 (障害なし) から 100 (致命的な障害) までです。
検証機能が戻した値は、scds_action() 関数に送信されます。この関数は、Retry_interval プロパティーの期間中に、障害の履歴を累積します。
scds_action() 関数は、次に示すように、障害が発生した場合の処置を決定します。
累積した障害が 100 より少ない場合は、何もしません。
累積した障害が 100 に到達した場合 (完全な障害)、データサービスを再起動します。Retry_interval を超えた場合、障害の履歴をリセットします。
Retry_interval で指定された期間中に、再起動の回数が Retry_count プロパティーを上回った場合、データサービスをフェイルオーバーします。
DSDL は、リソースおよびリソースグループのネットワークアドレス情報を戻す関数を提供します。たとえば、scds_get_netaddr_list() は、リソースが使用するネットワークアドレスリソースを取得して、障害モニターがアプリケーションを検証できるようにします。
また、DSDL は TCP ベースの監視を行う関数セットも提供します。通常、このような関数はサービスへの単純なソケット接続を確立し、サービスのデータを読み書きしたあとで、サービスから切断します。検証の結果を DSDL の scds_fm_action() 関数に送信し、次に実行すべき処理を決定できます。
TCP ベースの障害監視の例については、「xfnts_validate メソッド」を参照してください。
DSDL は、データサービスをデバッグするときに役立つ組み込み機能を提供します。
DSDL の scds_syslog_debug() ユーティリティーは、実装したリソースタイプにデバッグ文を追加するための基本的なフレームワークを提供します。デバッグレベル (1 から 9 までの数字) は、各クラスタノード上のリソースタイプの実装ごとに動的に設定できます。ファイル /var/cluster/rgm/rt/ rtname/loglevel は、1 から 9 までの整数だけが含まれているファイルであり、すべてのリソースタイプコールバックメソッドはこのファイルを読み取ります。DSDL の scds_initialize() 関数はこのファイルを読み取って、内部デバッグレベルを指定されたレベルに設定します。デフォルトのデバッグレベルは 0 であり、この場合、データサービスはデバッグメッセージを記録しません。
scds_syslog_debug() 関数は、LOG_DEBUG の優先順位において、scha_cluster_getlogfacility() 関数から戻された機能を使用します。このようなデバッグメッセージは /etc/syslog.conf ファイルで構成できます。
scds_syslog() 関数を使用すると、いくつかのデバッグメッセージをリソースタイプの通常の動作 (おそらくは LOG_INFO 優先順位) における情報メッセージとして使用することができます。第 8 章サンプル DSDL リソースタイプの実装のサンプル DSDL アプリケーションでは、scds_syslog_debug() および scds_syslog() 関数が使用されています。
HAStoragePlus リソースタイプを使用すると、ローカルファイルシステムを SunCluster 環境内で高可用性にすることができます。
ローカルファイルシステムには、UNIX File System (UFS)、Quick File System (QFS)、Veritas File System (VxFS)、Solaris ZFS (Zettabyte File System) などがあります。
このためには、ローカルファイルシステムのパーティションをグローバルディスクグループ内に配置しなければなりません。また、アフィニティースイッチオーバーを有効にし、Sun Cluster 環境をフェイルオーバー用に構成する必要もあります。この設定によって、クラスタ管理者は、多重ホストディスクに直接接続された任意のホストから、多重ホストディスク上の任意のファイルシステムにアクセスできるようになります。I/O に負荷が集中する、一部のデータサービスに対しては、高可用性ローカルファイルシステムを使用します。HAStoragePlus リソースタイプの構成については、『Sun Cluster データサービスの計画と管理 (Solaris OS 版)』の「高可用性ローカルファイルシステムの有効化」を参照してください。