このマニュアルでは、Oracle、iPlanetTM Web Server、DNS などのソフトウェアアプリケーション用のリソースタイプを作成するためのガイドラインを説明します。したがって、このマニュアルはリソースタイプの開発者を対象としており、手順、操作を行うのはリソースタイプの開発者を想定しています。
この章では、データサービスを開発するために理解しておく必要がある概念について説明します。この章の内容は、次のとおりです。
このマニュアルでは、「リソースタイプ」と「データサービス」という用語を同じ意味で使用しています。また、このマニュアルではほとんど使用されることはありませんが、「エージェント」という用語も「リソースタイプ」や「データサービス」と同じ意味で使用されます。
Sun Cluster システムを使用すると、アプリケーションを高度な可用性とスケーラビリティを備えたリソースとして実行および管理できます。RGM (Resource Group Manager) というクラスタ機能は、高可用性とスケーラビリティを実現するための機構を提供します。この機能を利用するためのプログラミングインタフェースを形成する要素は、次のとおりです。
コールバックメソッド - RGM がクラスタ上のアプリケーションを制御するために作成します。
RMAPI (Resource Management (リソース管理) API) - コールバックメソッドを作成するときに使用できる低レベルの API コマンドと関数のセットです。RMAPI は libscha.so ライブラリとして実装されています。
プロセス管理機能 - クラスタ上のプロセスを監視および再起動します。
DSDL (Data Service Development Library (データサービス開発ライブラリ)) - 低レベルの API とプロセス管理機能をより高いレベルでカプセル化して、コールバックメソッドの作成を容易にする機能を追加するライブラリ関数のセットです。DSDL 関数は libdsdev.so ライブラリとして実装されています。
図 1-1 に、これら要素の相互関係を示します。
Sun Cluster パッケージには、データサービスを作成するプロセスを自動化する SunPlex Agent BuilderTM というツールが含まれます (第 8 章「SunPlex Agent Builder」を参照)。Agent Builder はデータサービスのコードを C 言語または Korn シェル (ksh) のどちらでも生成できます。前者の場合は DSDL 関数を使用して、後者の場合は低レベルの API コマンドを使用して、コールバックメソッドを作成します。
RGM は各クラスタ上でデーモンとして動作して、事前構成したポリシーに従って、選択したノード上のリソースを自動的に起動および停止します。リソースの高可用性を実現するために、RGM は、ノードが異常終了または再起動すると、影響を受けるノード上でリソースを停止し、別のノード上でリソースを起動します。RGM はまた、リソースに固有なモニター (監視機能) を起動および停止することによって、障害のあるリソースを検出し、別のノードに再配置したり、さまざまな視点からリソース性能を監視したりできます。
RGM はフェイルオーバーリソースとスケーラブルリソースの両方をサポートします。フェイルオーバーリソースとは、同時に 1 つのノード上だけでオンラインになることができるリソースのことです。スケーラブルリソースとは、同時に複数のノード上でオンラインになることができるリソースのことです。
ここでは、基本的な用語をいくつか紹介し、RGM とそれに関連するインタフェースについて詳細に説明します。
RGM は、「リソースタイプ」、「リソース」、「リソースグループ」という 3 種類の相互に関連するオブジェクトを処理します。これらのオブジェクトを紹介するために、次のような例を使用します。
開発者は、既存の Oracle DBMS アプリケーションを高可用性にするためのリソースタイプ ha-oracle を実装します。次に、エンドユーザーは、マーケティング、エンジニアリング、および財務ごとに異なるデータベースを定義し、それぞれのリソースタイプを ha-oracle にします。次に、クラスタ管理者は、上記リソースを異なるリソースグループに分類することによって、異なるノード上で実行したり、個別にフェイルオーバーできるようにします。
開発者は、もう 1 つのリソースタイプ ha-calendar を作成し、Oracle データベースを必要とする高可用性のカレンダサーバーを実装します。クラスタ管理者は、財務カレンダリソースと財務データベースリソースを同じリソースグループに分類することによって、両方のリソースを同じノード上で実行したり、一緒にフェイルオーバーできるようにします。
リソースタイプは、クラスタ上で実行されるソフトウェアアプリケーション、アプリケーションをクラスタリソースとして管理するために RGM がコールバックメソッドとして使用する制御プログラム、およびクラスタの静的な構成の一部を形成するプロパティセットからなります。RGM はリソースタイププロパティを使用して、特定のタイプのリソースを管理します。
ソフトウェアアプリケーションに加えて、リソースタイプは、他のシステムリソース (ネットワークアドレスなど) も表すことができます。
リソースタイプの開発者は、リソースタイププロパティを指定し、その値をリソースタイプ登録 (RTR) ファイルに設定します。RTR ファイルの形式は明確に定義されています。詳細は、「リソースとリソースタイププロパティの設定」 と rt_reg(4) のマニュアルページを参照してください。また、リソースタイプ登録ファイルの例については、「リソースタイプ登録ファイルの定義」を参照してください。
表 A-1 に、リソースタイププロパティのリストを示します。
クラスタ管理者は、リソースタイプの実装と実際のアプリケーションをクラスタにインストールして、登録します。そして、登録手順で、リソースタイプ登録ファイルの情報をクラスタ構成に入力します。 データサービスの登録手順については、『Sun Cluster 3.0 12/01 データサービスのインストールと構成』を参照してください。
リソースは、そのリソースタイプからプロパティと値を継承します。さらに、開発者は、リソースタイプ登録ファイルでリソースプロパティを宣言できます。リソースプロパティのリストについては、表 A-2 を参照してください。
クラスタ管理者は、リソースタイプ登録 (RTR) ファイルにプロパティを指定することによって、特定のプロパティの値を変更できます。たとえば、プロパティ定義に値の許容範囲を指定しておきます。これにより、プロパティが調節可能なときに、作成時、常時、不可などを指定できます。このような許容範囲内であれば、クラスタ管理者は管理コマンドでプロパティを変更できます。
クラスタ管理者は、同じタイプのリソースをたくさん作成して、各リソースに独自の名前とプロパティ値セットを持たせることができます。これによって、実際のアプリケーションの複数のインスタンスをクラスタ上で実行できます。このとき、各インスタンスにはクラスタ内で一意の名前が必要です。
各リソースはリソースグループに構成する必要があります。RGM は、同じグループのすべてのリソースを同じノード上でオンラインかオフライン (どちらか一方だけ) にします。RGM は、リソースグループをオンラインまたはオフラインにするときに、グループ内の個々のリソースに対してコールバックメソッドを呼び出します。
リソースグループが現在オンラインであるノードのことを主ノードと呼びます。リソースグループは、自分の主ノードによってマスター (制御) されます。各リソースグループは、クラスタ管理者が設定した独自の Nodelist プロパティを持っており、この Nodelist プロパティがリソースグループのすべての潜在的な主ノード (つまり、マスター) を識別します。
リソースグループはまた、プロパティセットも持っています。このようなプロパティには、クラスタ管理者が設定できる構成プロパティや、RGM が設定してリソースグループのアクティブな状態を反映する動的プロパティが含まれます。
RGM は 2 種類のリソースグループ、フェイルオーバー (failover) とスケーラブル (scalable) を定義します。フェイルオーバーリソースグループは、同時に 1 つのノード上だけでオンラインになることができます。一方、スケーラブルリソースグループは、同時に複数のノード上でオンラインになることができます。RGM は、各種類のリソースグループを作成するためのプロパティセットを提供します。このようなプロパティについての詳細は、「フェイルオーバーリソースの実装」 と 「スケーラブルリソースの実装」 を参照してください。
リソースグループのプロパティのリストについては、表 A-3 を参照してください。
RGM (Resource Group Manager) は rgmd デーモンとして実装され、クラスタの各メンバー (ノード) 上で動作します。rgmd プロセスはすべてお互いに通信し、単一のクラスタ規模の機能として動作します。
ノードが起動またはクラッシュしたとき、RGM は管理されているすべてのリソースグループの可用性を維持するために、適切なマスター上で自動的にオンラインにします。
特定のリソースが異常終了した場合、そのモニタープログラムはリソースグループを同じマスター上で再起動するか、新しいマスターに切り替えるかを要求できます。
クラスタ管理者は管理コマンドを発行して、次のアクションの 1 つを要求できます。
リソースグループをマスターする権利を変更する。
リソースグループ内の特定のリソースを有効または無効にする。
リソース、リソースグループ、またはリソースタイプを作成、削除、変更する。
RGM は、構成を変更するとき、そのアクションをクラスタのすべてのメンバー (ノード) 間で調整します。このような活動のことを「再構成」と呼びます。状態の変更を個々のリソースにもたらすために、RGM はリソースタイプに固有なコールバックメソッドをそのリソース上で呼び出します。コールバックメソッドについては、「コールバックメソッド」 を参照してください。
Sun Cluster フレームワークは、コールバックメソッドを使用して、データサービスと RGM 間の通信を実現します。Sun Cluster フレームワークは、コールバックメソッド (引数と戻り値を含む) のセットと、RGM が各メソッドを呼び出す環境を定義します。
データサービスを作成するには、個々のコールバックメソッドのセットをコーディングして、各メソッドを RGM から呼び出し可能な制御プログラムとして実装します。つまり、データサービスは、単一の実行可能コードではなく、多数の実行可能なスクリプト (ksh) またはバイナリ (C 言語) から構成されており、それぞれを RGM から直接呼び出すことができます。
コールバックメソッドを RGM に登録するには、リソースタイプ登録 (RTR) ファイルを使用します。RTR ファイルには、データサービスとして実装した各メソッドのプログラムを指定します。システム管理者がデータサービスをクラスタに登録すると、RGM は RTR ファイルにあるさまざまな情報の中からコールバックプログラムの識別情報を読み取ります。
リソースタイプの必須コールバックメソッドは、起動メソッド (START または PRENET_START) と停止メソッド (STOP または POSTNET_STOP) だけです。
制御および初期化メソッド
START と STOP は、オンラインまたはオフラインにするグループ内のリソースを起動または停止します。
INIT、FINI、BOOT は、リソース上で初期化と終了コードを実行します。
管理サポートメソッド
VALIDATE は、管理アクションによって設定されるプロパティを確認します。
UPDATE は、オンラインリソースのプロパティ設定を更新します。
ネットワーク関連メソッド
PRENET_START と POSTNET_STOP は、同じリソースグループ内のネットワークアドレスが「起動」に構成される前、または「停止」に構成された後に、特別な起動アクションまたは停止アクションを行います。
モニター制御メソッド
MONITOR_START と MONITOR_STOP は、リソースのモニターを起動または停止します。
MONITOR_CHECK は、リソースグループがノードに移動される前に、ノードの信頼性を査定します。
コールバックメソッドについての詳細は、 第 3 章「RMAPI のリファレンス」 と rt_callbacks(1HA) のマニュアルページを参照してください。また、コールバックメソッドの使用例については、第 4 章「サンプルデータサービス」 および 第 7 章「サンプル DSDL リソースタイプの実装」を参照してください。
データサービス用のコードを作成するために、リソース管理アーキテクチャは、低レベルの ベース API、ベース API 上に構築されているより高いレベルのライブラリ、および、いくつかの基本的な入力情報をもとにデータサービスを自動的に生成するツール、SunPlex Agent Builder を提供します。
データサービスは、RMAPI (Resource Management (リソース管理) API) の 低レベルルーチンを使って、システム内のリソースやリソースタイプ、リソースグループの情報にアクセスしたり、ローカルの再起動やフェイルオーバーを要求したり、リソースの状態を設定したりします。これらの関数にアクセスするには、libscha.so ライブラリを使用します。RMAPI はこれらのコールバックメソッドを、シェルコマンドまたは C 関数のどちらの形でも提供できます。RMAPI ルーチンの詳細については、scha_calls(3HA) と第 3 章「RMAPI のリファレンス」を参照してください。サンプルのデータサービス用のコールバックメソッドにおける RMAPI の使用例については、第 4 章「サンプルデータサービス」を参照してください。
DSDL (Data Service Development Library (データサービス開発ライブラリ)) は、RMAPI の上に構築されており、RGM のメソッドコールバックモデルを保持しながら、上位レベルの統合フレームワークを提供します。 DSDL は、次のようなさまざまなデータサービス開発向けの機能を提供します。
libscha.so-低レベルのリソース管理 API
PMF-プロセスとその子孫を監視したり、プロセスが停止したときに再起動したりできるプロセス管理機能 (pmfadm(1M) と rpc.pmfd(1M) のマニュアルページを参照)
hatimerun-タイムアウトを適用してプログラムを実行するための機能 (hatimerun(1M) のマニュアルページを参照)
ほとんどのアプリケーションにおいて、DSDL は、データサービスを構築するのに必要なほとんどまたはすべての機能を提供します。ただし、DSDL は低レベルの API に置き換るものではなく、低レベルの API をカプセル化および拡張するためのものであることに注意してください。事実、多くの DSDL 関数は libscha.so 関数を呼び出します。これと同じように、開発者は、DSDL を使用しながら libscha.so 関数を直接呼び出すことによって、データサービスの大半を作成することができます。libdsdev.so リブラリには、DSDL 関数が含まれています。
DSDL の詳細については、第 5 章「DSDL (データサービス開発ライブラリ)」と scds_calls(3HA) のマニュアルページを参照してください。
Agent Builder は、データサービスの作成を自動化するツールです。このツールでは、ターゲットアプリケーションと作成するデータサービスについての基本的な情報を入力します。Agent Builder は、ソースコードと実行可能コード (C 言語または Korn シェル)、カスタマイズされた RTR ファイル、および Solaris パッケージを一体化して、データサービスを生成します。
ほとんどのアプリケーションでは、Agent Builder を使用すると、わずかなコードを手作業で変更するだけで完全なデータサービスを生成できます。追加プロパティの妥当性検査を必要とするような、より要件の厳しいアプリケーションの場合、Agent Builder では対応できないこともあります。しかし、このような場合でも、Agent Builder によりコードの大部分を生成できるので、手作業によるコーディングは残りの部分だけで済みます。少なくとも Agent Builder を使用することにより、独自の Solaris パッケージを生成することができます。
Sun Cluster はクラスタを管理するために、グラフィカルユーザーインタフェースとコマンドセットの両方を提供します。
SunPlex Manager は Web ベースのツールであり、次のような作業を行えます。
クラスタのインストール
クラスタの管理
リソースおよびリソースグループの作成と構成
Sun Cluster ソフトウェアによるデータサービスの構成
SunPlex Manager をインストールする方法や SunPlex Manager を使用してクラスタソフトウェアをインストールする方法については、『Sun Cluster 3.0 12/01 ソフトウェアのインストール』を参照してください。管理作業については、SunPlex Manager のオンラインヘルプを参照してください。
RGM オブジェクトを管理するには、scrgadm(1M)、scswitch(1M)、および scstat(1M) -g の 3 種類の Sun Cluster 3.0 コマンドを使用できます。
scrgadm(1M) コマンドを使用すると、RGM が使用するリソースタイプ、リソースグループ、およびリソースオブジェクトを表示、作成、構成、および削除できます。scrgadm(1M) コマンドはクラスタの管理インタフェースの一部であり、この章の残りで説明しているアプリケーションインタフェースとは異なるプログラミングコンテキストで使用されます。scrgadm(1M) は、API が動作するクラスタ構成を構築するためのツールです。管理インタフェースを理解すると、アプリケーションインタフェースも理解しやすくなります。scrgadm(1M) コマンドで実行できる管理作業の詳細については、scrgadm(1M) のマニュアルページを参照してください。
scswitch(1M) コマンドは、指定したノード上にあるリソースグループのオンラインとオフラインを切り替えたり、リソースまたはその監視を有効または無効にしたりします。scswitch(1M) コマンドで実行できる管理作業の詳細については、scswitch(1M) のマニュアルページを参照してください。
scstat(1M) -g コマンドは、すべてのリソースグループとリソースについて、現在の動的な状態を表示します。