データベースへの Liberty セッション・パーシスタンスの構成

サーバーの再始動または予期しないサーバー障害が発生してもセッション・データを維持する必要がある場合は、セッション・データをデータベースに保持するように Liberty を構成できます。 この構成では、複数のサーバーが同じセッション・データを共有することができ、またフェイルオーバーの発生時にセッション・データをリカバリーできます。

このタスクについて

セッション・データをデータベースに保持するように Liberty で 1 つ以上のサーバーを構成するには、以下のステップを実行します。

手順

  1. すべてのサーバーで再使用できる共有セッション管理構成を定義します。 最小要件として、以下のステップを完了する必要があります。
    1. sessionDatabase-1.0 機能を有効にします。
    2. データ・ソースの定義:
      <dataSource id="SessionDS" ... />
    3. セッション・データベース構成からのデータ・ソースを参照します。
      <httpSessionDatabase id="SessionDB" dataSourceRef="SessionDS" ... />
    4. セッション管理構成からの永続ストレージ・ロケーションを参照します。
      <httpSession storageRef="SessionDB" ... />
    注: httpSession エレメントの storageRef 属性と httpSessionDatabase エレメントの id 属性は必須ではありません。 sessionDatabase-1.0 フィーチャーが使用可能であり、httpSessionDatabase エレメントが有効なデータ・ソースを参照している場合、セッション・パーシスタンスは、storageRef 属性が設定されていなくても使用可能になります。

    httpSession エレメントおよび httpSessionDatabase エレメントについて詳しくは、「 データベース・セッション・パーシスタンス 」を参照してください。

    例えば、以下のように、${shared.config.dir}/httpSessionPersistence.xml というファイルを作成できます。
    <server description="Demonstrates HTTP Session Persistence Configuration">
    
        <featureManager>
            <feature>sessionDatabase-1.0</feature>
            <feature>servlet-3.0</feature>
        </featureManager>
    
        <httpEndpoint id="defaultHttpEndpoint" host="*" httpPort="${httpPort}">
            <tcpOptions soReuseAddr="true"/>
        </httpEndpoint>
    
        <fileset id="DerbyFiles" includes="*.jar" dir="${shared.resource.dir}/derby/client"/>
        <library id="DerbyLib" filesetRef="DerbyFiles"/>
        <jdbcDriver id="DerbyDriver" libraryRef="DerbyLib"/>
        <dataSource id="SessionDS" jdbcDriverRef="DerbyDriver">
            <properties.derby.client user="user1" password="password1" 
                                     databaseName="${shared.resource.dir}/databases/SessionDB" 
                                     createDatabase="create"/>
        </dataSource>
    
        <httpSessionDatabase id="SessionDB" dataSourceRef="SessionDS"/>
        <httpSession storageRef="SessionDB" cloneId="${cloneId}"/>
    
        <application id="test" name="test" type="ear" location="${shared.app.dir}/test.ear"/>    
    
    </server>
    注: 複数のサーバーが同じデータベースにセッション・データを保持するように構成されている場合、それらのサーバーは同じセッション管理構成を共有する必要があります。 これ以外のどの構成もサポートされません。 例えば、あるサーバーは 複数行スキーマ を使用し、別のサーバーは単一行スキーマを使用することはできません。

    HTTP サーバー・プラグインは、応答/要求ヘッダーに挿入されるクローン ID を使用して、要求と要求の間でセッション・アフィニティーを保持します。 クローン ID は通常は変更されませんが、 Libertyでは、クローン ID は初めてサーバーを始動するときに生成され、 --clean optionを使用してサーバーを始動すると再生成されます。 実動で使用する場合、 クローン ID を手動で割り当てることによって、ID が安定し、要求アフィニティーが正しく保持されることが確実になります。 クローン ID は、サーバーごとに固有でなければならず、8 文字から 9 文字の長さの英数字であり、ステップ 3 で指定します。

  2. 各サーバーに共有セッション管理構成を組み込みます。 例えば、以下のようにして、 s1 および s2という名前のサーバー・インスタンス用に 2 つの server.xml ファイルを作成します。
    • ${wlp.user.dir}/servers/s1/server.xml
    • ${wlp.user.dir}/servers/s2/server.xml
    <server description="Example Server">
        <include location="${shared.config.dir}/httpSessionPersistence.xml"/>
    </server>

    構成ファイルでのインクルード・エレメントの使用を参照してください。

  3. 各サーバーの bootstrap.properties ファイル に固有の変数を指定します。
    • ${wlp.user.dir}/servers/s1/bootstrap.properties
      httpPort=9081
      cloneId=s1
    • ${wlp.user.dir}/servers/s2/bootstrap.properties
      httpPort=9082
      cloneId=s2
  4. サーバーを始動する前に、セッション・パーシスタンス用の表を作成します。
    • デフォルトの行サイズ、表名、または表スペース名を変更する場合は、 httpSessionDatabase エレメントの詳細について「 データベース・セッション・パーシスタンス 」を参照してください。
    • サーバーが z/OS®にインストールされている場合は、 表を手動で作成する必要があります。 サーバーがセッション・パーシスタンスのために z/OS DB2® を使用している場合、別の手順に従って 表を手動で作成する必要があります。
    • サーバーがセッション・パーシスタンスのために DB2 を使用している場合は、 ページ・サイズを増やして 、大量のデータをデータベースに書き込むためのパフォーマンスを最適化することができます。
  5. Liberty サーバーをホストするすべてのマシンのシステム・クロックを同期化します。 システム・クロックが同期していないと、期限前にセッションの無効化が発生する可能性があります
  6. オプション: 必要に応じて、HTTP セッションと セキュリティーLibertyに統合します。 デフォルトでは、セキュリティーが有効な保護リソース内でセッションを作成してそのセッションにアクセスした後に、そのセッションにアクセスできるのは、そのセッションの元の所有者のみです。 セッション・セキュリティー (セキュリティー統合) は、デフォルトで有効になっています。
  7. オプション: 必要に応じて、 をインストールし、構成した各サーバーに要求をルーティングするように Web サーバー・プラグインを 構成 します。 セッション・アフィニティーが維持されるのは、 プラグイン構成 で、サーバー構成で定義されているクローン ID と一致するクローン ID が指定されている場合のみです。