| |
| Sun Java System Application Server Enterprise Edition 7 2004Q2 入門ガイド | |
第 2 章
クラスタリングのシナリオこの章では次の項目について説明します。
HTTP クラスタリングのシナリオ次の図に、単純なクラスタリングのシナリオを示します。この例では、ロードバランサプラグインを持つ Web Server、HADB を使用して HTTP セッションデータを格納するように設定された 2 つの Sun Java System Application Server インスタンス、およびアプリケーションデータを格納するリモートデータベース管理システム (RDBMS) で構成されています。実際の配備とは異なる場合があることに注意してください。たとえば、ロードバランサプラグインの代わりにサードパーティのロードバランサを使用することもできます。
図 2-1 クラスタリングのシナリオの例
HTTP 要求が処理される手順は、次のとおりです。
- 要求を受信したクライアントは、HTTP 要求を Web サーバーが処理する URL に送信します。この Web サーバーは、ロードバランサプラグインが着信 HTTP 要求を処理できるように設定されています。
- 続いて、ロードバランサプラグインが、クラスタ内のいずれかの Sun Java System Application Server インスタンスに、この要求を転送します。プラグインは、ターゲットインスタンスを特定するためにスティッキーなラウンドロビンのロードバランサを使用します。
- ターゲットインスタンスは、ロードバランサプラグインから転送された要求を受信し、HTTP セッションデータを HADB、J2EE アプリケーションデータを RDBMS に格納して、HTTP セッションを開始します。アプリケーションによるクライアントの処理の進捗状況に従って、HTTP セッションデータが更新されて HADB に格納され、RDBMS のアプリケーションデータが更新されます。
- インスタンスに、システムクラッシュなどの問題が発生すると、ロードバランサは、インスタンスが要求への応答を中止したことを検出します。それ以降に要求が届くと、ロードバランサは、その要求をクラスタ内の正常なインスタンスに転送します。
- 新しいターゲットインスタンスは引き継いだ HTTP セッション情報を HADB から受信し、クライアントの要求に対する応答を続けます。このため、クライアントはセッションデータを失うことなく HTTP セッションを完了できます。
Sun Java System Application Server の配備のシナリオの詳細については、『Sun ONE Application Server System Deployment Guide』を参照してください。
RMI/IIOP クラスタリングのシナリオSun Java System Application Server は、RMI/IIOP パス上でロードバランスおよびフェイルオーバーのメカニズムを使用して、可用性の高い J2EE アプリケーションを実現します。
高可用性を設定するには、RMI-IIOP 要求の処理に使用される、IIOP リスナーを組み込んだ IIOP クラスタ内に、Application Server インスタンスを構成する必要があります。IIOP クラスタに組み込まれた IIOP リスナーは、IIOP エンドポイントと呼ばれます。
以降の項では、RMI/IIOP パス上で、J2EE アプリケーションに対してロードバランス (クライアント側の設定) と高可用性 (サーバー側の変更) を有効にするために必要な変更について説明します。
サーバー側の設定
IIOP 要求のフェイルオーバーを有効にするには、Sun Java System Application Server 内に IIOP クラスタを構築するように IIOP エンドポイントを設定する必要があります。IIOP エンドポイントは、管理コンソールかコマンド行インタフェースのいずれかを使用して定義します。
RMI/IIOP 要求のフェイルオーバー先の、クラスタ内の非 SSL エンドポイントをすべて定義します。availability-service 要素の iiop-cluster プロパティで、IIOP エンドポイントを定義します。フェイルオーバーを有効にするため、availability-enabled="true" を必ず設定します。
次の例では、server.xml ファイルの IIOP クラスタ設定プロパティを示しています。
<availability-service availability-enabled="true">
<iiop-cluster>
<iiop-server-instance name=server1>
<iiop-endpoint id=s1_ep1 host=trident port=3700 />
<iiop-endpoint id=s1_ep2 host=trident port=3800 />
<iiop-endpoint id=s1_ep3 host=trident port=3900 />
</iiop-server-instance>
<iiop-server-instance name=server2>
<iiop-endpoint id=s2_ep1 host=jupiter port=4700 </>
<iiop-endpoint id=s2_ep2 host=jupiter port=4800 />
<iiop-endpoint id=s2_ep3 host=jupiter port=4900 />
</iiop-server-instance>
</iiop-cluster>
</availability-service>
クライアント側の設定
RMI/IIOP 要求のロードバランスを有効にするには、クライアントアプリケーションを設定する必要があります。次の 2 つのタイプの RMI/IIOP クライアントについて、ロードバランスがサポートされています。
スタンドアロンのクライアント
スタンドアロンのクライアントでロードバランス機能を有効にするには、JNDI 環境プロパティまたはシステムプロパティで、次のプロパティを定義する必要があります。
エンドポイントが指定されている場合、このプロパティが、ロードバランスポリシーを指定するために使用されます。このプロパティの定義に使用される値は、JNDI 初期コンテキストに基づきます。
RMI/IIOP クライアントが、リモートオブジェクトで、InitialContext 検索を呼び出すと、Application Server インスタンス (IIOP クラスタの一部) がランダムに選ばれて、Bean を作成します。この InitialContext を使用した以降のすべての操作は、同じ Application Server インスタンスに割り当てられるか、スタックされます。
RMI/IIOP クライアントにロードバランス機能を実装するには、次の手順を行います。
- 次の JVM プロパティを指定して、ORB を設定します。
com.sun.CORBA.connection.ORBSocketFactoryClass=com.sun.enterprise.iiop.EEIIOPSocketFactory
org.omg.PortableInterceptor.ORBInitializerClass.com.sun.enterprise.iiop.EEORBInitializer- appserv-rt.jar と appserv-rt-ee.jar へのクラスパスを設定します。これらの jar ファイルは install_dir/lib ディレクトリにあります。
- InitialContext のインスタンス化の前に、S1ASCtxFactory クラスの次のプロパティを使用します。
Properties env = new Properties();
env.put("java.naming.factory.initial", "com.sun.appserv.naming.S1ASCtxFactory");
env.put("com.sun.appserv.iiop.endpoints"."trident:3600, exodus:3700");
env.put("com.sun.iiop.loadbalancingpolicy", "ic-based");
//create an initial naming context
Context initial = new InitialContext(env);このクライアントコードにより、新しい InitialContext(env) が呼び出され、JNDI 初期コンテキストオブジェクトがインスタンス化されます。ただし、env は、JNDI SPI プロパティのリストです。
ACC クライアント
ACC クライアントでロードバランス機能とフェイルオーバー機能を有効にするには、sun-acc.xml で次のプロパティを定義する必要があります。
sun-acc.xml ファイルで、ロードバランスプロパティを定義して、高可用性 ACC クライアントを有効にします。これらのプロパティは、sun-acc.xml ファイルで、プロパティ要素として定義されます。
次に例を示します。