Sun GlassFish Communications Server 1.5 高可用性 (HA) 管理ガイド

第 6 章 高可用性 (HA) セッション持続性とフェイルオーバーの設定

この章では、高可用性セッション持続性の有効化と設定を行う方法について説明します。

セッション持続性とフェイルオーバーの概要

Communications Server は、HTTP セッションデータおよびステートフルセッション Bean (SFSB) セッションデータのフェイルオーバーを通して、高可用性セッション持続性を提供します。フェイルオーバーとは、サーバーインスタンスまたはハードウェアに障害が発生しても、別のサーバーインスタンスが分散セッションを引き継ぐことを意味します。

要件

分散セッションは、次の条件が満たされた場合に、複数の Sun GlassFish Communications Server インスタンスで動作できます。

制限事項

セッションが処理を継続すると、ファイルを開くための参照やネットワーク接続はすべて失われます。アプリケーションは、この制限を念頭においてコード化する必要があります。

フェイルオーバーをサポートする分散セッションには、特定のオブジェクトしかバインドできません。サーブレット 2.4 仕様とは異なり、Sun GlassFish Communications Server は、フェイルオーバーがサポートされていないオブジェクト型が分散セッションにバインドされると IllegalArgumentException をスローしません。

フェイルオーバーをサポートする分散セッションには、次のオブジェクトをバインドできます。

フェイルオーバーをサポートする分散セッションには、次のオブジェクト型をバインドできません。

一般に、これらのオブジェクトに対して、フェイルオーバーは機能しません。ただし、オブジェクトが直列化可能な場合など、フェイルオーバーが機能する場合もあります。

高可用性セッション持続性の設定

この節では、高可用性セッション持続性を設定する方法について、次のトピックとともに説明します。

Procedure高可用性セッション持続性を設定する

始める前に

高可用性セッション持続性は、動的配備、動的再読み込み、および自動配備とは互換性がありません。これらの機能は、本稼働環境ではなく開発環境を対象としているため、HA セッション持続性を有効にする前に無効にする必要があります。これらの機能を無効にする方法については、『Sun GlassFish Communications Server 1.5 Application Deployment Guide』を参照してください。

  1. Communications Server クラスタを作成します。

    詳細については、「クラスタを作成する」を参照してください。

  2. クラスタの 負荷分散を設定します。

    詳細は、Microsoft サポートページの記事

  3. 目的のアプリケーションサーバーインスタンス、および Web または EJB コンテナの可用性を有効にします。

    次に、セッション持続性の設定を行います。次の方法のうち 1 つを選択します。

  4. クラスタ内の各サーバーインスタンスを再起動します。

  5. 可用性を必要とする特定の SFSB の可用性を有効にします。

    セッション状態にチェックポイントを設定する必要のあるメソッドを選択します。「個々の Bean の可用性の設定」を参照してください。

  6. 高可用性を必要とする各 Web モジュールを分散可能 (distributable) にします。

  7. 配備中に、個々のアプリケーション、Web モジュール、または EJB モジュールの可用性を有効にします。

    「個々のアプリケーションまたは EJB モジュールの可用性の設定」を参照してください。

    管理コンソールで、可用性を有効にするチェックボックスをチェックするか、または--availabilityenabled オプションを true にして asadmin deploy コマンドを実行します。

セッション可用性の有効化

セッション可用性は、次の 5 つの異なるスコープ (高いレベルから低いレベルへの順) で有効にすることができます。

  1. サーバーインスタンス。デフォルトでは有効になっています。サーバーインスタンスのセッション可用性を有効にすると、サーバーインスタンスで実行されているすべてのアプリケーションが高可用性セッション持続性を持つことができるようになります。手順については、次の節の 「サーバーインスタンスの可用性の有効化」を参照してください。

  2. コンテナ (Web または EJB)。デフォルトでは有効になっています。コンテナレベルでの可用性の有効化については、次の節を参照してください。

  3. アプリケーション。デフォルトでは無効になっています。

  4. スタンドアロンの Web または EJB モジュール。デフォルトでは無効になっています。

  5. 個々の SFSB。デフォルトでは無効になっています。

可用性を指定されたスコープで有効にするには、それより上のすべてのレベルでも有効にする必要があります。たとえば、アプリケーションレベルで可用性を有効にするには、サーバーインスタンスレベルおよびコンテナレベルでも有効にする必要があります。

ある特定のレベルの可用性は、デフォルトでは 1 つ上のレベルに設定されます。たとえば、可用性がコンテナレベルで有効になっている場合、デフォルトではアプリケーションレベルで有効になります。

可用性がサーバーインスタンスレベルで無効になっている場合、ほかのすべてのレベルで有効にしても反映されません。可用性がサーバーインスタンスレベルで有効になっている場合、明示的に無効化しないかぎり、すべてのレベルで有効になります。

サーバーインスタンスの可用性の有効化

サーバーインスタンスの可用性を有効にするには、asadmin set コマンドを使用して、設定の availability-service.availability-enabled プロパティーを true に設定します。

たとえば、設定の名前が config1 の場合は、次のように指定します。


asadmin set --user admin --passwordfile password.txt 
--host localhost 
--port 4849 
config1.availability-service.availability-enabled="true"

Procedure管理コンソールを使用してサーバーインスタンスの可用性を有効にする

  1. ツリーコンポーネントで、「設定」ノードを開きます。

  2. 編集する設定のノードを展開します。

  3. 「可用性サービス」ノードを選択します。

  4. 「可用性サービス」ページで、「可用性サービス」ボックスにチェックマークを付けて、インスタンスレベルの可用性を有効にします。

    無効にするには、このボックスのチェックマークを外します。

  5. 「保存」ボタンをクリックします。

  6. サーバーインスタンスを停止し、再起動します。

HTTP セッションフェイルオーバー

Java EE アプリケーションは一般に、大量のセッション状態データを保持しています。Web ショッピングカートは、セッション状態の古典的な例です。アプリケーションはまた、頻繁に必要になるデータをセッションオブジェクトにキャッシュすることもできます。実際、ユーザーとの対話が多いほぼすべてのアプリケーションには、セッション状態の保持が必要になります。

Web コンテナの可用性の設定


注 –

セッション状態データの格納にインメモリーレプリケーションを使用している場合、Web コンテナ可用性の有効化およびプロパティーの設定は asadmin set コマンドを使用して行う必要があります。


たとえば、set コマンドを使用して次のように指定します。ここで、config1 は設定の名前です。


asadmin set 
config1.availability-service.web-container-availability.availability-enabled="true"

asadmin set 
config1.availability-service.web-container-availability.persistence-frequency="time-based"

Procedure管理コンソールを使用して Web コンテナの可用性を有効にする

  1. ツリーコンポーネントで、目的の設定を選択します。

  2. 「可用性サービス」をクリックします。

  3. 「Web コンテナの可用性」タブを選択します。

    「可用性サービス」ボックスにチェックマークを付けて、可用性を有効にします。無効にするには、このボックスのチェックマークを外します。

  4. 次の節の 「Web コンテナの可用性の設定」の説明に従って、ほかの設定を変更します。

  5. サーバーインスタンスを再起動します。

Web コンテナの可用性の設定

「可用性サービス」の「Web コンテナの可用性」タブを使用すると、次の可用性設定を変更できます。

持続型: 可用性が有効化されている Web アプリケーションのセッションの持続性メカニズムを指定します。使用できる値は、memory (持続性なし)、file (ファイルシステム)、および replicated (ほかのサーバー上のメモリー) です。

Web コンテナの可用性が有効にされている場合、次の表に示されているように、デフォルトの持続型はプロファイルに応じて異なります。

プロファイル 

持続型 

開発者 

memory

クラスタ 

replicated

セッションの持続性が必要となる本稼動環境では、replicated を使用します。memory および file の持続型は、高可用性セッション持続性を提供しません。

Web コンテナの可用性を無効にする場合、デフォルトの持続型は memory です。

持続性の頻度: セッション状態を格納する頻度を指定します。持続型が replicated の場合にのみ適用できます。指定できる値は次のとおりです。

持続性の範囲: 格納するセッションオブジェクトの範囲と、セッション状態を格納する頻度を指定します。持続型が replicated の場合にのみ適用できます。使用できる値は次のとおりです。

シングルサインオン状態: シングルサインオン状態の持続性を有効にするには、このボックスにチェックマークを付けます。無効にするには、このボックスのチェックマークを外します。詳細については、「セッションフェイルオーバーでのシングルサインオンの使用」を参照してください。

個々の Web アプリケーションの可用性の設定

個々の Web アプリケーションの可用性の有効化と設定を行うには、アプリケーション配備記述子ファイル sun-web.xml を編集します。アプリケーションの配備記述子の設定は、Web コンテナの可用性の設定より優先されます。

session-manager 要素の persistence-type 属性によって、アプリケーションが使用するセッション持続性のタイプが決定されます。高可用性セッション持続性を有効にするには、この要素を replicated に設定する必要があります。

sun-web.xml ファイルの詳細については、『Sun GlassFish Communications Server 1.5 Application Deployment Guide』「The sun-web.xml File」を参照してください。

<sun-web-app> ... 
  <session-config> 
    <session-manager persistence-type="replicated"> 
      <manager-properties> 
        <property name="persistenceFrequency" value="web-method" /> 
      </manager-properties> 
      <store-properties> 
        <property name="persistenceScope" value="session" /> 
      </store-properties> 
    </session-manager> ... 
</session-config> ...

セッションフェイルオーバーでのシングルサインオンの使用

単一のアプリケーションサーバーインスタンスにおいて、ユーザーがあるアプリケーションによって一度認証されると、同じインスタンス上で動作しているほかのアプリケーションに対する個別の再認証は必要ありません。これをシングルサインオンといいます。詳細については、『Sun GlassFish Communications Server 1.5 Developer’s Guide』「User Authentication for Single Sign-on」を参照してください。

HTTP セッションがクラスタ内のほかのインスタンスにフェイルオーバーした場合でも、シングルサインオンが機能し続けるようにするには、インメモリーレプリケーションを使用して、シングルサインオン情報が持続される必要があります。シングルサインオン情報を持続させるには、最初にサーバーインスタンスと Web コンテナの可用性を有効にし、次にシングルサインオン状態のフェイルオーバーを有効にします。

「Web コンテナの可用性の設定」で説明するように、シングルサインオン状態のフェイルオーバーは、管理コンソールの「可用性サービス」の「Web コンテナの可用性」タブで有効にすることができます。asadmin set コマンドを使用して、設定の availability-service.web-container-availability.sso-failover-enabled プロパティーを true に設定することもできます。

たとえば、set コマンドを使用して次のように指定します。ここで、config1 は設定の名前です。

asadmin set --user admin --passwordfile password.txt 
--host localhost --port 4849 
config1.availability-service.web-container-availability.
sso-failover-enabled="true"

シングルサインオングループ

単一の名前とパスワードの組み合わせによってアクセス可能なアプリケーションは、シングルサインオングループを構成します。シングルサインオングループに属するアプリケーションに対応する HTTP セッションでは、1 つのセッションがタイムアウトになった場合でも、ほかのセッションは無効化されず、引き続き有効となります。これは、1 つのセッションがタイムアウトしてもほかのセッションの可用性に影響を与えるべきではないからです。

この動作の当然の結果として、あるセッションがタイムアウトして、セッションを実行していた同じブラウザウィンドウから対応するアプリケーションにアクセスを試みる場合、再度認証を行う必要はありません。ただし、新しいセッションが作成されます。

シングルサインオングループに属するショッピングカートアプリケーションの例を挙げます。このグループにはほかに 2 つのアプリケーションが含まれます。ほかの 2 つのアプリケーションのセッションタイムアウト値は、ショッピングカートアプリケーションのセッションタイムアウト値を上回るものと仮定します。ショッピングカートアプリケーションのセッションがタイムアウトして、セッションを実行していた同じブラウザウィンドウからショッピングカートアプリケーションの実行を試みる場合、再度認証を行う必要はありません。ただし、以前のショッピングカートは失われていて、新しいショッピングカートを作成する必要があります。ほかの 2 つのアプリケーションは、ショッピングカートアプリケーションを実行していたセッションのタイムアウト後も変わらず動作し続けます。

同様に、ほかの 2 つのアプリケーションのどちらかに対応するセッションがタイムアウトしたとします。セッションを実行していた同じブラウザウィンドウからアプリケーションに接続している間は、再度認証を行う必要はありません。


注 –

この動作は、セッションがタイムアウトした場合にのみ当てはまります。シングルサインオンが有効になっていて、HttpSession.invalidate() を使用してセッションの 1 つを無効にする場合、シングルサインオングループに属するすべてのアプリケーションのセッションが無効になります。シングルサインオングループに属する任意のアプリケーションへのアクセスを試みる場合、再認証が必要であり、アプリケーションにアクセスするクライアントに対して新しいセッションが作成されます。


ステートフルセッション Bean のフェイルオーバー

ステートフルセッション Bean (SFSB) には、クライアント固有の状態が含まれています。クライアントとステートフルセッション Bean の間には、一対一の関係が存在します。作成時、EJB コンテナは各 SFSB に、クライアントにバインドするための一意のセッション ID を割り当てます。

サーバーインスタンスが失敗した場合に備えて、SFSB の状態を持続的なストアに保存することができます。SFSB の状態は、そのライフサイクル内のあらかじめ定義された時点に、持続性ストアに保存されます。これを、チェックポイント設定と呼びます。有効になっている場合、チェックポイント設定は一般に、トランザクションがロールバックする場合でも、Bean がトランザクションを完了したあとに実行されます。

ただし、SFSB が Bean 管理によるトランザクションに参加している場合、そのトランザクションは Bean メソッドの実行の途中でコミットされる可能性があります。このメソッド呼び出しの結果、Bean の状態は遷移している途中である可能性があるため、これは Bean の状態にチェックポイントを設定するのに適切なタイミングではありません。この場合、EJB コンテナは、対応するメソッドの終了時に Bean の状態にチェックポイントを設定します。ただし、メソッドの終了時に、その Bean が別のトランザクションの範囲に入っていないことが前提です。Bean 管理によるトランザクションが複数のメソッドにまたがっている場合は、後続のメソッドの終了時にアクティブなトランザクションが存在しなくなるまで、チェックポイント設定が遅延されます。

SFSB の状態は必ずしもトランザクションではなく、非トランザクションビジネスメソッドの結果として大幅に変更される可能性もあります。SFSB がこれに当てはまる場合は、「チェックポイントを設定するメソッドの指定」で説明しているように、チェックポイントを設定するメソッドのリストを指定することができます。

分散可能 Web アプリケーションが SFSB を参照しており、その Web アプリケーションのセッションがフェイルオーバーする場合は、EJB 参照もフェイルオーバーされます。

Communications Server インスタンスの停止中に、セッション持続性を使用している SFSB の配備が取り消されると、持続性ストア内のセッションデータがクリアされない可能性があります。これを回避するには、Communications Server インスタンスが動作している間、SFSB の配備を取り消します。

EJB コンテナの可用性の設定

ProcedureEJB コンテナの可用性を設定する

  1. 「EJB コンテナの可用性」タブを選択します。

  2. 「可用性サービス」ボックスにチェックマークを付けます。

    可用性を無効にするには、このボックスのチェックマークを外します。

  3. 「可用性の設定」の説明に従って、ほかの設定を変更します。

  4. 「保存」ボタンをクリックします。

  5. サーバーインスタンスを再起動します。

同機能を持つ asadmin コマンド

EJB コンテナの可用性を有効にするには、asadmin set コマンドを使用して、設定に次の 3 つのプロパティーを設定します。

たとえば、設定の名前が config1 の場合は、次のコマンドを使用します。

asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability.availability-enabled="true"

asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability.sfsb-persistence-type="file"

asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability.sfsb-ha-persistence-type="replicated"

可用性の設定

「可用性サービス」の「EJB コンテナの可用性」タブを使用すると、次の設定を変更できます。

HA 持続型: 可用性が有効になっている SFSB のセッション持続性と非活性化メカニズムを指定します。使用できる値は、file (ファイルシステム) および replicated (ほかのサーバー上のメモリー) です。デフォルト値は replicated です。セッションの持続性が必要となる本稼動環境では、replicated を使用します。

SFSB 持続型: 可用性が有効になっていない SFSB の非活性化メカニズムを指定します。使用できる値は、file (デフォルト) および replicated です。

いずれかの持続型を file に設定すると、EJB コンテナによって非活性化されたセッション Bean が格納されるファイルシステムの場所が指定されます。ファイルシステムに対するチェックポイントはテストには有効ですが、本稼働環境には役立ちません。ストアプロパティーの設定については、管理コンソールのオンラインヘルプを参照してください。

HA 持続性によって、どのサーバーインスタンスが失敗した場合でも、サーバーインスタンスのクラスタは SFSB 状態を復元できます。HA ストアはまた、非活性化と活性化のストアとしても使用されます。SFSB 状態の持続性を必要とする本稼働環境では、このオプションを使用します。

可用性が無効の場合の SFSB セッションストアの設定

可用性が無効になっている場合、ローカルファイルシステムは SFSB 状態の非活性化に使用されますが、持続性には使用されません。SFSB 状態が格納される場所を変更するには、EJB コンテナのセッション格納位置の設定を変更します。ストアプロパティーの設定については、管理コンソールのオンラインヘルプを参照してください。

個々のアプリケーションまたは EJB モジュールの可用性の設定

配備中に、個々のアプリケーションまたは EJB モジュールの SFSB の可用性を有効にすることができます。

個々の Bean の可用性の設定

個々の SFSB について可用性を有効にし、チェックポイントを設定するメソッドを選択するには、sun-ejb-jar.xml 配備記述子ファイルを使用します。

高可用性セッション持続性を有効にするには、ejb 要素に availability-enabled="true" を設定します。SFSB キャッシュのサイズと動作を制御するには、次の要素を使用します。

sun-ejb-jar.xml の詳細については、『Sun GlassFish Communications Server 1.5 Application Deployment Guide』「The sun-ejb-jar.xml File」を参照してください。


例 6–1 可用性が有効になっている EJB 配備記述子の例

<sun-ejb-jar>
    ...
    <enterprise-beans>
        ...
        <ejb availability-enabled="true">
            <ejb-name>MySFSB</ejb-name>
        </ejb>
        ...
    </enterprise-beans>
</sun-ejb-jar>

チェックポイントを設定するメソッドの指定

有効になっている場合、チェックポイント設定は一般に、トランザクションがロールバックする場合でも、Bean がトランザクションを完了したあとに実行されます。Bean の状態に重要な変更をもたらす非トランザクションビジネスメソッドの終了時に、SFSB のオプションのチェックポイント設定を追加で指定するには、sun-ejb-jar.xml 配備記述子ファイルの ejb 要素にある checkpoint-at-end-of-method 要素を使用します。

checkpoint-at-end-of-method 要素内の非トランザクションメソッドは、次のいずれかになります。


注 –

SFSB がどのトランザクションにも参加しておらず、checkpoint-at-end-of-method 要素で明示的に指定されているメソッドがない場合は、この Bean に対して availability-enabled="true" が設定されていても、この Bean の状態にチェックポイントは設定されません。

パフォーマンスを向上させるには、メソッドの小さなサブセットを指定します。これらのメソッドは一般に、大量の処理を実行するか、または Bean の状態に重要な変更をもたらします。



例 6–2 メソッドのチェックポイント設定を指定する EJB 配備記述子の例

<sun-ejb-jar>
    ...
    <enterprise-beans>
        ...
        <ejb availability-enabled="true">
            <ejb-name>ShoppingCartEJB</ejb-name>
            <checkpoint-at-end-of-method>
                <method>
                    <method-name>addToCart</method-name>
                </method>
            </checkpoint-at-end-of-method>
        </ejb>
        ...
    </enterprise-beans>
</sun-ejb-jar>