このマニュアルでは、Oracle、SunTM One Web Server、DNS などのソフトウェアアプリケーション用のリソースタイプを作成するためのガイドラインを説明します。したがって、このマニュアルはリソースタイプの開発者を対象としています。
この章では、データサービスを開発するために理解しておく必要がある概念について説明します。この章の内容は、次のとおりです。
このマニュアルでは、「リソースタイプ」と「データサービス」という用語を同じ意味で使用しています。また、このマニュアルではほとんど使用されることはありませんが、「エージェント」という用語も「リソースタイプ」や「データサービス」と同じ意味で使用されます。
Sun Cluster システムを使用すると、アプリケーションを高度な可用性とスケーラビリティを備えたリソースとして実行および管理できます。RGM (Resource Group Manager) というクラスタ機能は、高可用性とスケーラビリティを実現するための機構を提供します。この機能を利用するためのプログラミングインタフェースを形成する要素は、次のとおりです。
ユーザーが作成するコールバックメソッド。RGM は、このコールバックメソッドを利用してクラスタ上のアプリケーションを制御します。
Resource Management API (RMAPI)。コールバックメソッドの作成に使用する低レベルの API コマンドおよび API 関数です。これらの API は、libscha.so ライブラリに実装されます。
データサービス開発ライブラリ (Data Service Development Library: DSDL)。低レベル API およびプロセス管理機能をより高レベルでカプセル化し、コールバックメソッドの作成を支援するいくつかの機能を追加するライブラリ関数です。これらの関数は、libdsdev.so ライブラリに実装されます。
Sun Cluster パッケージには、データサービスの作成プロセスを自動化する SunPlex Agent Builder TM というツールが含まれます (第 9 章「SunPlex Agent Builder」 を参照)。 Agent Builder はデータサービスのコードを C 言語または Korn シェル (ksh) のどちらでも生成できます。前者の場合は DSDL 関数、後者の場合は低レベルの API コマンドを使ってコールバックメソッドを作成します。
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.1 Data Service Planning and Administration Guide』を参照してください。
リソースは、そのリソースタイプからプロパティと値を継承します。さらに、開発者は、リソースタイプ登録ファイルでリソースプロパティを宣言できます。リソースプロパティのリストについては、表 A–2 を参照してください。
クラスタ管理者は、リソースタイプ登録 (RTR) ファイルにプロパティを指定することによって、特定のプロパティの値を変更できます。たとえば、プロパティ定義に値の許容範囲を指定しておきます。これにより、プロパティが調節可能なときに、作成時、常時、不可などを指定できます。このような許容範囲内であれば、クラスタ管理者は管理コマンドでプロパティを変更できます。
クラスタ管理者は、同じタイプのリソースを多数作成して、各リソースに独自の名前とプロパティ値のセットを持たせることができます。これによって、実際のアプリケーションの複数のインスタンスをクラスタ上で実行できます。このとき、各インスタンスにはクラスタ内で一意の名前が必要です。
各リソースはリソースグループに構成する必要があります。RGM は、同じグループのすべてのリソースを同じノード上でオンラインかオフラインにします。このとき、グループ内の個々のリソースに対してコールバックメソッドを呼び出します。
リソースグループがオンラインになっているノードを主ノードと呼びます。リソースグループは、その主ノードによってマスター (制御) されます。各リソースグループは、クラスタ管理者が設定した独自の Nodelist プロパティを持っており、これによってリソースグループの潜在的な主ノードを識別します。
リソースグループはプロパティセットも持っています。このようなプロパティには、クラスタ管理者が設定できる構成プロパティや、RGM が設定してリソースグループのアクティブな状態を反映する動的プロパティがあります。
RGM は、2 種類のリソースグループ、フェイルオーバー (failover) とスケーラブル (scalable) を定義します。 フェイルオーバーリソースグループは、同時に 1 つのノード上だけでオンラインになることができます。一方、スケーラブルリソースグループは、同時に複数のノード上でオンラインになることができます。RGM は、各種類のリソースグループを作成するためのプロパティセットを提供します。このようなプロパティの詳細については、データサービスをクラスタに転送する方法と コールバックメソッドの実装を参照してください。
リソースグループのプロパティのリストについては、表 A–3 を参照してください。
Resource Group Manager (RGM) は rgmd デーモンとして実装され、クラスタの各メンバー (ノード) 上で動作します。rgmd プロセスはすべて互いに通信し、単一のクラスタ規模の機能として動作します。
ノードが起動またはクラッシュしたとき、管理対象のすべてのリソースグループを適切なマスター上で自動的にオンラインにし、その可用性を維持します。
特定のリソースが異常終了した場合、そのモニタープログラムはリソースグループを同じマスター上で再起動するか、新しいマスターに切り替えるかを要求できます。
クラスタ管理者は管理コマンドを発行して、次のいずれかのアクションを要求できます。
リソースグループをマスターする権利の変更
リソースグループ内の特定のリソースの有効化または無効化
リソース、リソースグループ、リソースタイプの作成、削除、変更
RGM は、構成を変更するとき、そのアクションをクラスタのすべてのメンバー (ノード) 間で調整します。このような動作を「再構成」と呼びます。RGM は、個々のリソースの状態を変更をするため、各リソース上でリソースタイプに固有のコールバックメソッドを呼び出します。
Sun Cluster フレームワークは、コールバックメソッドを使用して、データサービスと RGM 間の通信を実現します。また、コールバックメソッド(引数と戻り値を含む) の セットと、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 は、リソースグループがノードに移動される前に、ノードの信頼性を査定します。
コールバックメソッドの詳細については第 4 章「Resource Management API リファレンス」と rt_callbacks(1HA) のマニュアルページを参照してください。コールバックメソッドの使用例については、第 5 章「サンプルデータサービス」および第 8 章「サンプル DSDL リソースタイプの実装」を参照してください。
リソース管理アーキテクチャは、データサービス用のコードを作成するため、低レベルのベース API、ベース API 上のものより高いレベルのライブラリを提供します。さらに、いくつかの基本的な入力情報をもとにデータサービスを自動的に生成するツール、SunPlex Agent Builder を提供します。
データサービスは、RMAPI (Resource Management API) の低レベルルーチンを使って、システム内のリソース、リソースタイプ、リソースグループの情報にアクセスします。ローカルの再起動やフェイルオーバーの要求、リソースの状態の設定も行います。これらの関数にアクセスするには、libscha.so ライブラリを使用します。RMAPI は、これらのコールバックメソッドを、シェルコマンドまたは C 関数の形で提供できます。RMAPI ルーチンの詳細については、scha_calls(3HA) のマニュアルページと第 4 章「Resource Management API リファレンス」を参照してください。データサービスコールバックメソッドにおける RMAPI の使用例については、第 5 章「サンプルデータサービス」を参照してください。
データサービス開発ライブラリ (Data Service Development Library: DSDL) は、RMAPI 上に構築されており、RGM のメソッドコールバックモデルを基盤にして上位レベルの統合フレームワークを提供します。DSDL は、次のようなさまざまなデータサービス開発向けの機能を提供します。
libscha.so—低レベルのリソース管理 API
PMF—プロセスとその子孫の監視、停止したプロセスの再起動などを実行するプロセス管理機能 (pmfadm(1M) および rpc.pmfd(1M) のマニュアルページを参照)
hatimerun—タイムアウトを適用してプログラムを実行するための機能 (hatimerun(1M) のマニュアルページを参照)
DSDL は、大多数のアプリケーションに対して、データサービスの構築に必要なほとんどまたはすべての機能を提供します。DSDL は、低レベルの API の代わりになるものではなく、低レベルの API をカプセル化および拡張するためのものであることに注意してください。実際、多くの DSDL 関数は libscha.so 関数を呼び出します。libscha.so 関数を直接呼び出すこともできますが、DSDL を使用することにより、データサービスの大部分を作成できます。DSDL 関数は libdsdev.so ライブラリとして実装されています。
DSDL の詳細については、第 6 章「データサービス開発ライブラリ (DSDL)」と scha_calls(3HA) のマニュアルページを参照してください。
Agent Builder は、データサービスの作成を自動化するツールです。ユーザーがターゲットアプリケーションの基本情報を入力すると、ソースコードと実行コード (C または Korn シェル)、カスタマイズされた RTR ファイル、Solaris パッケージを利用して、ユーザーの代わりにデータサービスを作成します。
大多数のアプリケーションでは、Agent Builder を使用することにより、わずかなコードを手作業で変更するだけで完全なデータサービスを生成できます。追加プロパティの妥当性検査を必要とするような、より要件の厳しいアプリケーションには、Agent Builder では対応できないこともあります。しかし、このような場合でもコードの大部分を生成できるので、手作業によるコーディングは残りの部分だけで済みます。Agent Builder を使用すれば、少なくとも独自の Solaris パッケージを生成することができます。
Sun Cluster はクラスタを管理するために、グラフィカルユーザーインタフェースとコマンドセットの両方を提供します。
SunPlex Manager は、次の作業を実行できる Web ベースのツールです。
クラスタのインストール
クラスタの管理
リソースおよびリソースグループの作成と構成
Sun Cluster ソフトウェアを使ったデータサービスの構成
SunPlex Manager のインストール方法、SunPlex Manager によるクラスタソフトウェアのインストール方法については、『Sun Cluster 3.1 10/03 ソフトウェアのインストール』を参照してください。管理作業については、SunPlex Manager のオンラインヘルプを参照してください。
RGM オブジェクトの管理用 Sun Cluster コマンドは、scrgadm(1M)、scswitch(1M)、および scstat(1M) -g の 3 つです。
scrgadm コマンドでは、RGM が使用するリソースタイプ、リソースグループ、リソースオブジェクトの表示、作成、構成が可能です。このコマンドはクラスタの管理インタフェースの一部であり、この章の残りで説明しているアプリケーションインタフェースとは異なったプログラミングコンテキストで使用されます。しかし、このコマンドを使って、API が動作するクラスタ構成を構築することもできます。管理インタフェースを理解すると、アプリケーションインタフェースも理解しやすくなります。scrgadm コマンドで実行できる管理作業の詳細については、scrgadm(1M) のマニュアルページを参照してください。
scswitch コマンドでは、指定のノード上のリソースグループのオンラインとオフラインの切り替えや、リソースまたはそのモニターの有効と無効の切り替えが可能です。scswitch コマンドで実行できる管理作業の詳細については、scswitch(1M) のマニュアルページを参照してください。
scstat -g コマンドでは、すべてのリソースグループおよびリソースの現在の動的な状態を表示できます。