BigAdmin System Administration Portal
GlassFish Version 2 におけるクラスタ化
Print-friendly VersionPrint-friendly Version

記事一覧

GlassFish JavaEE Application Server Version 2 は、クラスタ化機能を向上させた多数の新機能を備えています。新しいクラスタ化機能は、インメモリーセッション状態レプリケーションにより、配備アーキテクチャーに対する高可用性とスケーラビリティーを強化します。インメモリー状態レプリケーションにより、クラスタ化されたサーバーインスタンスはセッション状態をリングトポロジでレプリケートし、レプリケートされた情報をメモリーに保存します。

この記事では、アプリケーションを GlassFish クラスタに配備する際に参考になるよう、GlassFish Version 2 のクラスタ化機能を説明します。

Sun Java System Application Server 9.1 は、オープンソースである GlassFish Version 2 アプリケーションサーバーの Sun がサポートしているディストリビューションです。この記事では、GlassFish Version 2 の表記でこの両方を表します。

目次
基本的な概念

アプリケーションサーバーにおけるクラスタは、スケーラビリティと可用性を向上させます。これらは関連のある概念です。

高可用性のサービスを提供するには、ソフトウェアシステムが次の機能を備えている必要があります。

  • システムは、サービスが提供するエンティティの複数のインスタンスを作成および実行できる必要があります。アプリケーションサーバーの場合、サービスが提供するエンティティはクラスタで動作するように設定された Java EE アプリケーションサーバーのインスタンスであり、サービスは配備された Java EE アプリケーションです。
     
  • システムは、増大するサービス負荷に対応するために、アプリケーションサーバーのインスタンスをクラスタに追加して、より大規模な配備に拡大できる必要があります。
     
  • クラスタ内のアプリケーションサーバーのインスタンスでひとつでも問題が発見された場合、サービスを中断しないように、別のサーバーインスタンスにフェイルオーバーできる必要があります。サーバーインスタンスや物理マシンに発生する問題はサービス全体の品質を低下させる可能性が高いが、高可用性環境ではサービスの完全な中断は容認されません。
     
  • プロセスがユーザーのセッションの状態を変更した場合、セッションの状態がプロセスを再開した後も保持される必要があります。最も簡単な機構では、プロセスが中止された場合、再開されたときにセッションの状態が復元されるように信頼性の高いセッション状態の複製を維持します。原則は、信頼性の高い RAID ストレージシステムの場合と同じです。

まとめると、これらの要求に対して必要なのは、効率を犠牲にして高可用性を実現するためのシステムです。

スケーラビリティーと高可用性の目標をサポートするために、GlassFish アプリケーションサーバーは次のサーバー側エンティティを提供します。

  • サーバーインスタンス - サーバーインスタンスは、Java EE アプリケーションをホストする Java EE サーバープロセス (GlassFish アプリケーションサーバー) です。Java EE 仕様で要求されるように、各サーバーインスタンスは実行が予想されるさまざまなサブシステムに応じて設定されます。
     
  • ノードエージェント - ノードエージェントは、サーバーインスタンスを実行するすべての物理ホスト上で動作するエージェントプロセスです。ノードエージェントはあとで説明するように、ドメイン管理サーバー (Domain Administration Server、DAS) によって指示されたときに、サーバーインスタンスのライフサイクルを管理します。
     
  • クラスタ - クラスタは、クラスタを構成するサーバーインスタンスの設定を決定する論理エンティティです。通常、クラスタの設定は、クラスタ内のすべてのサーバーインスタンスが同種の設定であることを意味します。管理者はクラスタを単一のエンティティと見なし、GlassFish 管理コンソールまたはコマンド行インタフェース (command-line interface、CLI) を使用して、クラスタ内のサーバーインスタンスを管理します。

あとで説明するように、ノードエージェント、サーバーインスタンス、およびクラスタは、GlassFish のインストール時に作成できます。クラスタとインスタンスは次のように「管理ドメイン」としてまとめられ、ドメイン管理サーバー (Domain Administration Server、DAS) によって特性が決定されます。

ドメイン管理アーキテクチャー

GlassFish クラスタ化アーキテクチャーの中心となるのは、管理ドメインの概念です。管理ドメインは、管理者または管理者グループのアクセス権を表します。次の図では、単一ドメインのコンテキストでのドメイン管理アーキテクチャーの概要を示しています。

辞書のクラス図
図 1 ドメイン管理アーキテクチャー
 

管理ドメインは 2 つの特性を持つエンティティです。

  • 開発者が使用する場合は、アプリケーションとサービスを実行するための、完全な機能の Java EE プロセスを提供します。

  • 実際のエンタープライズ配備で使用される場合は、ほかのプロセスの設定および管理専用のプロセスを提供します。この場合、管理ドメインは「ドメイン管理サーバー」(Domain Administration Server、DAS) の形式となり、管理目的のみに使用できます。

ファイルシステムでは、管理ドメインは一連の設定ファイルで構成されます。実行時には、各サーバーインスタンス、クラスタ、アプリケーション、およびリソースを管理するプロセスになります。

一般的に、高可用性のインストールには独立したサーバーインスタンスではなく、クラスタが必要です。GlassFish アプリケーションサーバーは同種のクラスタを提供し、各クラスタが単一のエンティティであるかのように管理および変更を可能にします。

図に示すように、各ドメインにはドメイン管理サーバー (Domain Administration Server、DAS) があり、ドメイン内の Java EE Server インスタンスを管理するために使用されます。図の中央にある管理ノードは、DAS をサポートします。アプリケーション、リソース、および設定情報は、DAS のすぐ近くに保存されます。DAS によって管理されている設定情報は、「集中リポジトリ」の設定と呼ばれます。

各ドメインプロセスは、物理ホスト上で実行する必要があります。実行時に、ドメインは自身を DAS として示します。同様に、すべてのサーバーインスタンスは物理ホスト上で実行する必要があり、Java 仮想マシン (Java Virtual Machine、JVM) を必要とします。GlassFish アプリケーションサーバーは、サーバーインスタンスを実行する各マシン上にインストールする必要があります。

管理ドメイン
 
「管理ドメイン」と「ネットワークドメイン」の概念を混同しないでください。両者に関係はありません。Java EE では、「ドメイン」は管理ドメイン (管理者が制御するマシンとサーバーインスタンス) に適用される用語です。
 

図の右側には 2 つのノード (ノード 1 とノード 2) があり、2 つの GlassFish サーバーインスタンスをそれぞれホストしています。

各ノードエージェントは、既定のドメインのそれぞれのマシン上で設定されるインスタンスのライフサイクルを管理します。一般的に、それぞれのライフサイクルは管理者の要求に従って、 DAS によって管理されます。 DAS は、各インスタンスの実際のライフサイクル管理を対応するノードエージェントに委任します。ノードエージェントは、自身では Java EE アプリケーションを実行しない軽量なプロセスです。

ノードエージェントは、インスタンスのライフサイクルの管理に加え、担当するサーバーインスタンスの監視 (ウォッチドッグ) も行います。サーバーインスタンスに問題が発見された場合、ノードエージェントは管理者や DAS の介在を必要とせずに、インスタンスのバックアップを取るようにします。

図 1 の左側には、複数の管理クライアントが示されています。 DAS の管理インフラストラクチャーは、Java Management Extensions (JMX) テクノロジに基づきます。DAS のインフラストラクチャーは、 JAX 仕様のインストゥルメンテーションレベルに従い、Managed Beans (MBeans) 形式の管理情報を採用します。これは、管理対象のリソースを表す Java オブジェクトです。

MBeans は JMX 標準に準拠するため、これらはリモートの標準 JMX クライアント (Java SE 5.0 以上で配布される JConsole など) で参照できます。図 1 に示す組み込みクライアントは、JMX API を使用してドメインを管理します。これらのクライアントでは、ドメインを管理するために管理者特権が必要です。次のような管理クライアントがあります。

  • 管理コンソール - 管理コンソールは、集中リポジトリを管理するためのブラウザベースのインタフェースです。集中リポジトリは、 DAS レベルの設定を提供します。
     
  • コマンド行インタフェース - asadmin コマンドは、管理コンソールと同じ機能を持っています。また、ドメインの作成やノードエージェントの作成など、一部の機能は asadmin からのみ実行できます。ドメインとノードエージェントを必要条件とする DAS がなければ、管理コンソールは実行できません。asadmin コマンドは、アーキテクチャーをブートストラップする手段を提供します。
     
  • IDE – 図は、NetBeans IDE の一部である JSP (JavaServer Page) エディタのスナップショットを示しています。NetBeans IDE などのツールは、 DAS を使用することで、開発時にアプリケーションの接続と管理を実行できます。NetBeans IDE は、クラスタモードの配備もサポートします。ほとんどの開発者は、「開発者プロファイル」として知られている単一のドメインとマシン内で作業します。開発者プロファイルでは、 DAS 自体がすべてのアプリケーションのホストとして動作します。
     
  • Sun Provisioning Server – Sun Provisioning Server は、基本設定されたマシンで DAS をインストールおよびプロビジョニングするために使用されます。たとえば、大規模なデータセンターに新しいマシンを導入する場合を考えます。この場合、オペレーティングシステムをインストールしてマシンを初期化したあと、必要なソフトウェア製品をインストールします。続いて、ノードエージェントを作成し、特定の条件に従って DAS を作成します。最後に、ノードエージェントを起動して、マシンを既存のドメインに組み込みます。Sun Provisioning Server を使用すると、新しいマシンで手動の操作を実行することなく、これらのすべての処理を完了することができます。
クラスタ化アーキテクチャー

図 2 は、実行時を中心とした観点から GlassFish のクラスタ化アーキテクチャーを示しています。この図では、アーキテクチャーの高可用性の面を強調しています。図 2 には DAS が示されていません。また、アプリケーションサーバーインスタンスのあるノードは、クラスタ化されたインスタンスとしてグループ化して示されています。

クラスタ化アーキテクチャーの概要
図 2 クラスタ化アーキテクチャーの概要
 

図 2 の上部には、 HTTPJMSRMI-IIOP などのさまざまトランスポートがあり、負荷分散層を通してクラスタ化されたインスタンスと通信していることが示されています。エンタープライズ情報システムなどのカスタムリソースは、Java コネクタアーキテクチャーのリソースアダプタを通して、ロードバランサに接続します。すべてのトランスポートは、シングルポイント障害の発生時に利用可能な冗長ユニットによって実装されたスケーラビリティーおよび耐障害の両方の戦略に対し、クラスタ間で負荷分散が可能です。

図の一番下は、高可用性アプリケーション状態アプリケーションリポジトリです。これは、セッション状態ストレージの抽象化オブジェクトです。リポジトリには、HTTP セッション状態、ステートフル EJB セッション状態、およびシングルサインオン情報を含む、セッション状態が格納されます。この状態情報は、メモリーレプリケーションまたはデータベースを使っていずれかを保存できます。

高可用性データベースの代用

サン・マイクロシステムズは、高可用性データベース (HADB) テクノロジに基づくアプリケーションサーバーに関して、強固な高可用性ソリューションを提供してきました。HADB は、セッション状態情報の維持に関して、100% に近い割合の可用性を提供します。ただし、実装と保守のコストは比較的高く、自由に利用できますが、オープンソース版では提供されていません。

オープンソースの GlassFish アプリケーションサーバーを伴う軽量なオープンソース版の代替機能を求める要求により、GlassFish Version 2 でメモリーレプリケーション機能が提供されました。メモリーレプリケーションは、クラスタ内のインスタンスを利用して、互いの状態情報をデータベースではなくメモリーに保存します。ただし、HADB ソリューションも利用可能で、多くのインストールで優先される場合があります。

クラスタでのメモリーレプリケーション

状態情報をメモリーに保持する GlassFish 互換の耐障害システムには、いくつかの機能が必要です。このシステムには、HTTP セッション状態、シングルサインオン状態、および EJB セッション状態に対して、高可用性を提供する必要があります。また、既存の HADB ベースのアーキテクチャーと互換性を維持する必要があります。

メモリーレプリケーション機能は、GlassFish のクラスタ化機能を利用して、インストールおよび管理オーバーヘッドが少ない HADB 戦略の多くの利点を提供します。

GlassFish アプリケーションサーバーでは、クラスタインスタンスはリングトポロジで管理されます。リングの各メンバーは、メモリー状態データをリングの次のメンバー (複製パートナー) に送信し、前のメンバーからの状態データを受信します。状態データは各メンバーで更新され、リング内でレプリケートされます。単純な形式のトポロジを図 3 に示します。

辞書のクラス図
図 3 クラスタ化トポロジー
 

トポロジのリングの構成は、インスタンスに設定した名前のアルファベット順で決定されます。したがって、図 3 のようにインスタンスに名前を付けた場合、インスタンス 1 はインスタンス 2 にレプリケートし、インスタンス 2 は インスタンス 3 にレプリケートするようにリングが構成されます。

一般的なクラスタトポロジを図 4 に示します。この図では、インスタンスが 2 台の物理マシンでホストされています。インスタンス 1 とインスタンス 3、および インスタンス 2 とインスタンス 4 をそれぞれ 1 台のマシンに配置することで、可用性が最大となります。いずれかのマシンで重大な問題が発見された場合、すべてのデータは、元の形式または問題が発見されたマシンにあるインスタンスの複製物としてもう一方のマシンに保護されます。

一般的なクラスタトポロジ
図 4 一般的なクラスタトポロジ
 
一般的なフェイルオーバーシナリオ

GlassFish アプリケーションサーバーは、問題発見時の適切な動作に対して、負荷分散層で特別な情報を必要としないように設計されています。たとえば、セッションをインスタンス 1 に経路指定している場合、インスタンス 1 に問題が発見されたときにセッションをインスタンス 2 に経路指定すべきという情報はロードバランサでは必要はありません。ロードバランサは、フェイルオーバー要求をクラスタ内の任意のインスタンスに発行できます。これは、位置透過性として説明される状況です。障害に対する応答がクラスタ内で発生します。ロードバランサが、動作しているインスタンスにセッションを再度経路指定すると、そのインスタンスは保存されたセッション情報を必要に応じてほかのインスタンスから取得します。

ロードバランサからのフェイルオーバー要求は、次のどちらかに分類されます。

  • ケース 1: セッションからレプリケーションデータをすでに保存しているインスタンスにフェイルオーバー要求が到着している場合。この場合、インスタンスはセッションの所有権を取得し、処理を続行します。
     
  • ケース 2: フェイルオーバー要求が、必要な複製データを保有していないインスタンスに到着している場合。この場合、インスタンスは SASE (Self-Addressed-Stamped-Envelope) 形式の要求をブロードキャスト通信して、データを要求します。複製データを保持しているインスタンスは、データを要求元に転送し、データを正常に受信したことを示す応答メッセージを受け取ったあと、データのコピーを削除します。データ交換は、JXTA (Juxtapose) テクノロジを使用して行われます。

図 5 に、クラスタをさらに詳しく示します。左側に負荷分散層があります。多くの場合、Web サーバー上に置かれます。各サーバーインスタンスでは、HTTP セッション情報がローカルキャッシュに保存され、キャッシュは次のインスタンスの複製キャッシュにコピーされます。

ロードバランサを備える一般的なクラスタトポロジ
図 5 ロードバランサを備える一般的なクラスタトポロジ
ここをクリックすると大きな画像が表示されます。
 

図 6 は、ケース 1 のフェイルオーバーを示しています。この場合、経路を再指定されたサーバーインスタンスは、すぐにセッション状態データにアクセスできます。この図では、インスタンス 1 で問題が発見され、サービスに対するロードバランサの要求はインスタンス 2 に経路指定されています。インスタンス 2 には、必要なセッション状態情報の複製があります。

ケース 1 のフェイルオーバー
図 6 ケース 1 のフェイルオーバー
ここをクリックすると大きな画像が表示されます。
 

図 7 は、ケース 2 のフェイルオーバーを示しています。この場合、負荷分散層はセッション状態データにすぐにアクセスできないサーバーインスタンスにセッションを再経路指定しています。この図では、インスタンス 4 が必要なセッション状態データがないことを認識し、クラスタ内のほかのインスタンスに SASE をブロードキャスト通信して、データを要求しています。要求は黄色い矢印で示されています。

ケース 2 のフェイルオーバー
図 7 ケース 2 のフェイルオーバー
ここをクリックすると大きな画像が表示されます。
 

インスタンスの 1 つ (図 7 ではインスタンス 2) が、保持している複製に要求されたデータが含まれていることを認識し、SASE 要求に応答します。インスタンス 2 はセッションデータをインスタンス 4 に転送し、以降はインスタンス 4 がこのセッションを提供します。

インスタンスが複製データを使用してセッションを提供する場合は (ケース 1 とケース 2 のどちらも)、複製データがまずテストされ、最新バージョンであることが確認されます。

クラスタの形状の動的な変更

クラスタ内のインスタンスに問題が発見された場合や、管理者がインスタンスを故意にオフラインにしている場合、クラスタのトポロジは必然的に変化します。

前の例では、インスタンス 1 で問題が発見されたため、セッションキャッシュのレプリケーションを維持するために、クラスタのトポロジを変更する必要があります。図 8 では、インスタンス 2 とインスタンス 4 はインスタンス 1 の消失を認識します。インスタンス 1 で問題が発見されているため、このインスタンスと通信しようとすると I/O の例外が発生して失敗します。インスタンスが意図的に停止されている場合、JXTA テクノロジはインスタンス 1 へのパイプが閉じられていることを示すメッセージを送信します。

問題が発見されたインスタンスのクラスタによる検出
図 8 問題が発見されたインスタンスのクラスタによる検出
ここをクリックすると大きな画像が表示されます。
 

図 9 に示すように、インスタンス 1 の消失に応答して、インスタンス 4 は新しいレプリケーションパートナーを選択します。インスタンス 4 は、古い接続を消去して、インスタンス 2 との接続を確立します。クラスタは、4 つのサーバーインスタンスから 3 つのサーバーインスタンスに縮小されます。

障害が発生したインスタンスの検出
図 9 クラスタの動的な状態の変更
ここをクリックすると大きな画像が表示されます。
 

縮小されたクラスタで処理するセッションアクティビティーの全体的な量はこれまでと変わらないため、各インスタンスでは作業量が増加することに注意してください。リソース計画では、インメモリーレプリケーションはヒープメモリーを使用することに注意してください。高可用性を備えるには、クラスタを縮小する必要がある場合に、各インスタンスに対して十分なメモリーの空き領域があることを確認してください。

インスタンスがクラスタに参加 (または再参加) する場合は、本質的に逆の処理が発生します。クラスタ内の新しいインスタンスが負荷分散層からの要求を受信すると、インスタンスはレプリケーションパートナーを要求するブロードキャスト通信をし、いずれか 1 つを選択します。トポロジは新しいインスタンスを含むように、自動的に調整されます。

グループ管理サービス

グループ管理サービス (Group Management Service、GMS) は、クラスタおよびそのメンバーインスタンスに関する動的なメンバーシップ情報を提供します。GMS の設計は、Java テクノロジに基づくクラスタ化フレームワークの Project Shoal に大きく依存しています。GMS の中心は、JXTA テクノロジにも基づいています。

GMS は、メンバーの参加、メンバーの正常な停止、またはメンバーの障害などのイベントを調整しながら、GlassFish のクラスタ形状の変更イベントを管理します。GMS を通じて、メモリーレプリケーションはこれらのイベントに対して必要なアクションを実行し、サービスの継続的な可用性を提供します。

GMS は、GlassFish Application Server でクラスタの健全性を監視するために使用され、メモリーレプリケーションモジュールをサポートします。

まとめると、GMS は次のサポートを提供します。

  • クラスタメンバーシップの変更の通知とクラスタの状態
     
  • クラスタ全体またはメンバー間のメッセージング
     
  • 回復メンバーの選択、障害フェンシング、および複数の障害発生時の回復の連鎖など、回復指向のコンピュータ処理
     
  • 分散キャッシュ、クラスタメンバーシップに関するメッセージの交換に適した軽量な実装
     
  • グループの通信プロバイダに接続するためのサービスプロバイダインタフェース (service-provider interface、SPI)。デフォルトプロバイダは JXTA 技術に基づく
     
  • タイマーの移行 - GMS は、問題が発見されたインスタンスのタイマーを必要に応じて取得し、インスタンスを選択
メモリーレプリケーションの設定

クラスタのメモリーレプリケーションを設定するには、次の 3 つの手順を実行する必要があります。

  1. 管理ドメインを作成します。ドメインとともにクラスタをホストするマシンのノードエージェントが作成されたあと、クラスタの管理プロファイルが作成されます。プロファイルはレプリケーションのデフォルトを設定し、GMS を有効にします。また、persistence-type プロパティーを replicated に設定します。
     
  2. この記事のあとで説明するように、クラスタとそのインスタンスを作成します。
     
  3. true に設定されたavailability-enabled プロパティーを使って Web アプリケーションを配備します。

これらの手順は、 GUICLI のどちらでも実行できます。

さらにチューニングが必要な場合もあります。たとえば、クラスタの管理プロファイルのデフォルトヒープサイズは 512M バイトです。エンタープライズ規模の配備では、この値を 1G バイト以上に設定するとよいでしょう。この処理は、ドメイン管理サーバーで JVM オプションに次のタグを設定することで簡単に設定できます。

<jvm-options>-Xmx1024m</jvm-options>
<jvm-options>-Xms1024m</jvm-options>
 

また、Web アプリケーションの web.xml ファイルに <distributable /> タグを必ず追加する必要もあります。このタグは、アプリケーションがクラスタに対応していることを示します。

<distributable /> タグを挿入する場合は、アプリケーションをクラスタに配備する前にクラスタ環境でテストする必要があります。一部のアプリケーションは、単一のインスタンスに配備したときは正常に動作しても、クラスタに配備したときに動作しない場合があります。たとえば、アプリケーションをクラスタに配備する前に、アプリケーションの HTTP セッションの一部となるオブジェクト (ステートフルセッション Bean など) はネットワーク内で状態を保持できるように直列化可能にしてください。直列化可能でないオブジェクトは、単一のサーバーインスタンスに配備されたときは動作しても、クラスタ環境では正常に動作しません。セッションデータに含まれる内容を調査して、分散環境で正しく動作することを確認してください。

メモリーレプリケーションの実装

GlassFish Version 2 アプリケーションサーバーのメモリーレプリケーション機能は、JXTA テクノロジのトランスポート機能およびメッセージング機能に基づいています。

JXTA テクノロジは、ピア・ツー・ピアテクノロジとして広く知られています。これは、ネットワークに接続されたデバイスが、ネットワークトポロジに影響を受けずにメッセージを交換したり協調できるようにする、一連の XML ベースのプロトコルとして定義されます。GlassFish Version 2 Application Server の開発では、メモリーレプリケーションの高容量および高スループットの要件を処理できるように JXTA テクノロジが調整されました。スケーラビリティとパフォーマンスを向上させるために、メモリーレプリケーション機能の開発者は Grizzly Project との連携も利用できました。これは、Java New I/O API (NIO) を利用してスケーラブルで強固なサーバーを構築する役に立ちます。

JXTA テクノロジのグループメンバーシップの抽象化オブジェクトは、GlassFish Application Server のクラスタおよびインスタンスモデルにうまく対応します。JXTA グループが GlassFish クラスタに対応し、JXTA ピアが GlassFish サーバーインスタンスに対応します。GMS はこれらのグループメンバーシップの抽象化オブジェクトを利用し、メモリーレプリケーションなどの消費コンポーネントを提供します。これは、クラスタの実行時イベントの通知イベントモデルです。

GlassFish Version 2 Application Server の開発では、クラスタ化トポロジは単一のサブネットに制限されています。将来的な計画では、クラスタ化トポロジの地理的な分散を含むように JXTA を利用します。

最後に、JXTA テクノロジのわかりやすい API により、GlassFish クラスタ化の設定条件は非常に単純になりました。

アプリケーションサーバーのインストール

GlassFish Application Server をインストールするには、次の手順に従います。

  1. 次のコマンドを入力します。
     
    java -jar filename.jar
    
     
    たとえば、次のように入力します。
     
    java -jar glassfish-installer-v2-b58g.jar
    

     
  2. ライセンス条項に同意します。ライセンスに同意すると、ファイルが GlassFish インストールディレクトリに展開されます。デフォルトでは、このディレクトリは glassfish です。

続いて、GlassFish Application Server を設定する必要があります。

クラスタ化の設定

インストールディレクトリには、2 つの ant ビルドスクリプトが含まれ、これらを使用してデフォルトドメインを作成できます。2 つのスクリプトは、setup.xmlsetup-cluster.xml です。

setup.xml スクリプトは開発者プロファイルを作成し、setup-cluster.xml スクリプトはクラスタプロファイルを作成します。開発者プロファイルは、次のように Sun Java System Application Server 管理コンソールを使用して、クラスタプロファイルに変換できます。

クラスタプロファイルを使用してデフォルトドメインを作成するには、次の手順に従います。

  • GlassFish インストールディレクトリで、次のコマンドを入力します。
     
    lib/ant/bin/ant -f setup-cluster.xml 
    
     
    設定スクリプトはアーカイブを展開し、domains サブディレクトリを作成します。また、クラスタ化に対応するドメイン domain1 を作成します。

GlassFish の設定はこれで完了です。

ドメインの確認

CLI (asadmin コマンド) または GUI (Sun Java System Application Server 管理コンソール) を使用して、ドメインを確認および管理できます。

 
コマンド行インタフェースでのドメインの確認
 

設定の手順で、インストールディレクトリに domains サブディレクトリが作成されています。GlassFish のすべてのドメインは、このディレクトリに保存されます。

asadmin コマンドを使用して、 CLI からこれらのドメインと相互に対話できます。このコマンドは、インストールディレクトリ下の bin サブディレクトリにあります。asadmin コマンドは、バッチまたは対話型モードで使用できます。

たとえば、次のコマンドを使用して、すべてのドメインとそれらの状態を表示できます。

bin/asadmin list-domains 
 

まだ domain1 を起動していない場合は、上のコマンドで次の出力が表示されます。

domain1 not running
 

domain1 を起動するには、次のコマンドを入力します。

bin/asadmin start-domain domain1
 

ドメインが 1 つしかない場合は、引数の domain1 を省略できます。このコマンドは domain1 を起動し、ログファイルの場所、サーバーのバージョン、ドメイン名、利用可能な Web コンテキスト、配備されているアプリケーション、使用中のポートなどの情報を表示します。

 
Sun Java System Application 管理コンソールでのドメインの確認
 

asadmin コマンドの代わりに、Sun Java System Application Server 管理コンソールを使用して Application Server を管理することもできます。次の節では、コンソールを起動する方法を説明しています。

管理コンソールは、.war または .ear ファイルからのアプリケーションの配備や、JBI (Java Business Integration) サービスアセンブリの配備を簡単にします。コンソールからは、リソースの使用状況の監視、ログファイルの検索、サーバーの起動と停止、オンラインヘルプへのアクセス、およびその他のさまざまな管理機能やサーバー管理機能を実行できます。

既存ドメインのクラスタサポート

既存のドメインにクラスタ化のサポートを追加できます。開発者プロファイルを持つドメインは、設定を変更しなければクラスタ化をサポートしません。GlassFish インストールディレクトリで次のコマンドを実行して、開発者プロファイルドメインを作成できます。

lib/ant/bin/ant -f setup.xml
 

開発者プロファイルドメインからクラスタ化を有効にするには、次の手順に従います。

  1. GlassFish インストールディレクトリで次のコマンドを入力し、クラスタ化を再設定するドメインを起動します。
     
    bin/asadmin start-domain domain_name
    
     

    たとえば、次のように入力します。

    bin/asadmin start-domain domain1
    
     

    このコマンドは、ドメインで GlassFish アプリケーションサーバーを起動し、コマンドシェルウィンドウに情報を表示します。表示される情報の最後の行は、ドメインの機能を表しています。この場合は、次のように表示されます。

    Domain does not support application server clusters and other standalone instances.
    
     
  2. Web ブラウザで次の URL にアクセスし、管理コンソールを起動します。
     
    http://hostname:port
    
     

    デフォルトポートは 4848 です。たとえば、次のように入力します。

    http://kindness.sun.com:4848
    
     

    Application Server がインストールされたマシンで管理コンソールが実行されている場合は、ホスト名に localhost を指定します。Windows では、スタートメニューから Application Server 管理コンソールを起動します。

    デフォルトのログインは次のようになります。

    ユーザー名: admin
    パスワード: adminadmin

  3. ウィンドウ左側の「共通操作」ツリーで、「アプリケーションサーバー」を選択します。ウィンドウの右側で「一般」を選択します。
     
  4. 次の図に示すように、「クラスタサポートを追加」ボタンをクリックします。
     
    クラスタサポートの追加
    図 10 クラスタサポートの追加
    ここをクリックすると大きな画像が表示されます。
     
  5. 確認ページが表示され、クラスタサポートの変更の影響について警告されます。次の点に注意します。
     
    • ドメインの設定は、クラスタをサポートするように変更されます。これには、システムプロパティーやテンプレート設定の変更が含まれます。
       
    • クラスタ化が有効なサーバーは、クラスタおよびスタンドアロンサーバーインスタンスの両方をサポートします。
       
    • クラスタではリソースの要求が頻繁に増えるため、管理サーバーの JVM 設定 (ヒープサイズ など) の変更が必要な場合があります。
       
    • クラスタ化が有効なドメインのサーバーに現在配備されているアプリケーションは、すべて動作し続けます。
       
    • クラスタ化のサポートに関する変更は、ドメインサーバーと asadmin CLI を再起動したあとに有効になります。
       
    • クラスタサポートを元に戻したい場合は、事前にドメインの domain.xml ファイルのバックアップを行ってください。
       
  6. 「了解」をクリックして、ドメインのクラスタ化サポートを有効にします。ドメインのサーバーインスタンスを再起動するよう指示するページが表示されます。
     
  7. 「インスタンスの停止」ボタンをクリックします。
     
  8. コマンドシェルで asadmin コマンドを実行中の場合は、asadmin> プロンプトで quit を入力して、コマンドを終了します。
     
  9. 次のコマンドを入力して、CLI からドメインを再起動します。
     
    asadmin start-domain domain_name
    
     

    たとえば、次のように入力します。

    asadmin start-domain domain1
    
     

    正常にこのドメインのクラスタ化を有効にできた場合は、コマンドシェルの出力の最後に次の行が表示されます。
     

    Domain supports application server clusters and other standalone instances
    
     
HTTP ロードバランサプラグイン

ロードバランサは、複数のアプリケーションサーバーインスタンスの間でワークロードを分散し、システム全体のスループットを向上させます。セッション要求をサーバーインスタンスに経路指定する際に、負荷分散層は特別な情報を必要としませんが、利用可能なノードのリストを維持する必要があります。ノードが予想される要求に対して応答を返せない場合、ロードバランサは別のノードを選択します。

ロードバランサは、ソフトウェアまたはハードウェアで実装できます。デバイスの実装については、ハードウェアベンダーから提供される情報を参照してください。

GlassFish Version 2 Application Server では、HTTP ロードバランサプラグインを利用できます。プラグインは、Sun Java System Application Server 9.1 のほか、Apache Web Server と Microsoft IIS でも動作します。ロードバランサは、あるサーバーインスタンスからほかのインスタンスへのフェイルオーバーの要求も有効にして、高可用性インストールに貢献します。

ロードバランサプラグインの設定方法については、Sun Java System Application Server 9.1 管理コンソールのオンラインヘルプを参照してください。詳細は、『Sun Java System Application Server 9.1 High Availability Administration Guide』の第 5 章「Configuring HTTP Load Balancing」を参照してください。

まとめ

GlassFish Version 2 Application Server は、管理ドメイン、ドメイン管理サーバー、サーバーインスタンス、および物理マシンで構成される、柔軟なクラスタ化アーキテクチャーを提供します。アーキテクチャーは高可用性と水平方向のスケーラビリティーを向上させるために、使いやすさと高度な管理コントロールを兼ね備えています。

  • 高可用性 - 状態を共有可能な複数のサーバーインスタンスにより、特に負荷分散方式と組み合わせた場合に、シングルポイント障害が最小化されます。サーバーセッションデータのインメモリーレプリケーションは、サーバーインスタンスに問題が発見されたときに、ユーザーの混乱を最小限に抑えます。
     
  • 水平方向のスケーラビリティー - ユーザーの負荷の増大に応じて、マシン、サーバーインスタンス、およびクラスタをさらに追加し、増大する負荷を簡単な設定で処理できます。GMS は、高可用性クラスタを維持する管理作業の負担を軽くします。
謝辞

この記事の準備にあたり、Larry White、Abhijit Kumar、および Dinesh Patil の協力に感謝します。

参照情報
BigAdmin
  
 
BigAdmin Upgrade Hub