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