この章では、DSDL (Data Service Development Library (データサービス開発ライブラリ)) を構成する API (アプリケーションプログラミングインタフェース) の概要について説明します。DSDL は libdsdev.so ライブラリとして実装されており、Sun Cluster パッケージに含まれています。
DSDL API は、RMAPI の最上位の階層を形成します。したがって、これは は RMAPI に置き換るものではなく、RMAPI 機能をカプセル化および拡張するためのものです。DSDL は、特定の Sun Cluster 統合問題に対する事前定義されたソリューションを提供することによって、データサービスの開発を簡素化します。その結果、アプリケーションに本来求められている高可用性とスケーラビリティの実現に、より多くの開発時間を割くことが可能になります。また、アプリケーションの起動、シャットダウン、および監視機能を Sun Cluster に統合する際に、多くの時間を費やすこともありません。
すべてのコールバックメソッドは構成プロパティにアクセスする必要があります。DSDL は、以下により、プロパティへのアクセスを容易にします。
環境の初期化
プロパティ値を簡単に取得できる関数セットの提供
scds_initialize 関数 (各コールバックメソッドの開始時に呼び出す必要がある) は、次の処理を行います。
RGM がコールバックメソッドに渡すコマンド行引数 (argc と argv[]) を検査および処理します。そのため、コマンド行解析関数を作成する必要はありません。
他の DSDL 関数が使用できるように内部データ構造を設定します。たとえば、DSDL で提供されている関数によって RGM から取得されたプロパティ値はこのデータ構造に格納されます。同様に、コマンド行から入力された値 (RGM から取得された値よりも優先される) もこのデータ構造に格納されます。
VALIDATE メソッドの場合、scds_initialize はコマンド行で渡されたプロパティ値を解析します。そのため、VALIDATE 用の解析関数を作成する必要はありません。
また、scds_initialize 関数はロギング環境を初期化して、障害モニターの検証設定の妥当性を検査します。
DSDL は、リソース、リソースタイプ、リソースグループのプロパティ、および、よく使用される拡張プロパティを取得するための関数セットを提供します。これらの関数は、次のような規則に従って、プロパティへのアクセスを標準化しています。
各関数は、scds_initialize から戻されるハンドル引数だけを取ります。
各関数は特定のプロパティに対応します。つまり、関数の戻り値のタイプは取得するプロパティ値のタイプに一致します。
値は scds_initialize によってあらかじめ算出されているため、関数はエラーを戻しません。新しい値がコマンド行で渡された場合を除き、関数は RGM から値を取得します。
START メソッドは、クラスタノード上でデータサービスを起動するために必要なアクションを実行します。通常、このようなアクションには、リソースプロパティの取得、アプリケーション固有の実行可能ファイルおよび構成ファイルの格納先の特定、および適切なコマンド行引数を用いたアプリケーションの起動が含まれます。
scds_initialize 関数はリソース構成を取得します。START メソッドはプロパティ用の DSDL 関数を使用して、アプリケーションを起動するのに必要な構成ディレクトリや構成ファイルを識別するための特定のプロパティ (Confdir_list など) の値を取得します。
START メソッドは、scds_pmf_start を呼び出して、プロセス監視機能 (PMF) の制御下でアプリケーションを起動します。PMF を使用すると、プロセスに適用する監視レベルを指定したり、異常終了したプロセスを再起動したりできます。DSDL で実装する START メソッドの例については、「xfnts_start メソッド」を参照してください。
STOP メソッドは呼び出し回数に依存しないように実装されていなければなりません。つまり、アプリケーションが動作していないときにノード上で呼び出された場合でも、正常終了する必要があります。STOP メソッドが失敗した場合、停止するリソースが STOP_FAILED 状態に設定され、クラスタの再起動を招いてしまう可能性があります。
リソースが STOP_FAILED 状態になるのを防止するために、STOP メソッドはあらゆる手段を構じてリソースを停止する必要があります。scds_pmf_stop 関数は、段階的にリソースを停止しようとします。まず、SIGTERM シグナルを使用してリソースを停止しようとします。これに失敗した場合は、SIGKILL シグナルを使用します。詳細については、scds_pmf_stop のマニュアルページを参照してください。
DSDL は、事前に定義されたモデルを提供することによって、障害モニターを実装する際の煩雑さをほとんど取り除きます。リソースがノード上で起動すると、MONITOR_START メソッドは PMF の制御下で障害モニターを起動します。リソースがノード上で動作している間、障害モニターは無限ループを実行します。次に、DSDL 障害モニターのロジックの概要を示します。
scds_fm_sleep 関数は Thorough_probe_interval プロパティを使用して、検証を行う期間を決定します。この期間中に PMF がアプリケーションプロセスの失敗を決定した場合、リソースは再起動されます。
検証機能自身は、障害の重要度を示す値を戻します。この値の範囲は、0 (障害なし) から 100 (致命的な障害) までです。
検証機能が戻した値は、scds_action 関数に送信されます。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 ベースの障害監視の例については、「svc_probe 関数」を参照してください。
DSDL は、データサービスをデバッグするときに役立つ組み込み機能を提供します。
DSDL の scds_syslog_debug() ユーティリティーは、実装したリソースタイプにデバッグ文を追加するための基本的なフレームワークを提供します。デバッグレベル (1 から 9 までの数字) は、各クラスタノード上のリソースタイプごとに動的に設定できます。ファイル /var/cluster/rgm/rt/<rtname>/loglevell は、1 から 9 までの整数だけが含まれているファイルであり、すべてのリソースタイプコールバックメソッドはこのファイルを読み取ります。DSDL の scds_initialize() ルーチンはこのファイルを読み取って、内部デバッグレベルを指定されたレベルに設定します。デフォルトのデバッグレベルは 0 であり、この場合、データサービスはデバッグメッセージを記録しません。
scds_syslog_debug() 関数は、LOG_DEBUG の優先順位において、scha_cluster_getlogfacility(3HA) 関数から戻された機能を使用します。このようなデバッグメッセージは /etc/syslog.conf で構成できます。
scds_syslog ユーティリティーを使用すると、いくつかのデバッグメッセージをリソースタイプの通常の動作 (おそらくは LOG_INFO 優先順位) における情報メッセージとして使用することができます。第 7 章「サンプル DSDL リソースタイプの実装」のサンプル DSDL アプリケーションでは、scds_syslog_debug と scds_syslog 関数が多用されています。