データベースへの Liberty セッション・パーシスタンスの構成
サーバーの再始動または予期しないサーバー障害が発生してもセッション・データを維持する必要がある場合は、セッション・データをデータベースに保持するように Liberty を構成できます。 この構成では、複数のサーバーが同じセッション・データを共有することができ、またフェイルオーバーの発生時にセッション・データをリカバリーできます。
このタスクについて
セッション・データをデータベースに保持するように Liberty で 1 つ以上のサーバーを構成するには、以下のステップを実行します。
手順
- すべてのサーバーで再使用できる共有セッション管理構成を定義します。 最小要件として、以下のステップを完了する必要があります。
-
sessionDatabase-1.0
機能を有効にします。 - データ・ソースの定義:
<dataSource id="SessionDS" ... />
- セッション・データベース構成からのデータ・ソースを参照します。
<httpSessionDatabase id="SessionDB" dataSourceRef="SessionDS" ... />
- セッション管理構成からの永続ストレージ・ロケーションを参照します。
<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 で指定します。 -
- 各サーバーに共有セッション管理構成を組み込みます。 例えば、以下のようにして、
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>
構成ファイルでのインクルード・エレメントの使用を参照してください。
- 各サーバーの bootstrap.properties ファイル に固有の変数を指定します。
- ${wlp.user.dir}/servers/s1/bootstrap.properties
httpPort=9081 cloneId=s1
- ${wlp.user.dir}/servers/s2/bootstrap.properties
httpPort=9082 cloneId=s2
- ${wlp.user.dir}/servers/s1/bootstrap.properties
- サーバーを始動する前に、セッション・パーシスタンス用の表を作成します。
- デフォルトの行サイズ、表名、または表スペース名を変更する場合は、
httpSessionDatabase
エレメントの詳細について「 データベース・セッション・パーシスタンス 」を参照してください。 - サーバーが z/OS®にインストールされている場合は、 表を手動で作成する必要があります。 サーバーがセッション・パーシスタンスのために z/OS DB2® を使用している場合、別の手順に従って 表を手動で作成する必要があります。
- サーバーがセッション・パーシスタンスのために DB2 を使用している場合は、 ページ・サイズを増やして 、大量のデータをデータベースに書き込むためのパフォーマンスを最適化することができます。
- デフォルトの行サイズ、表名、または表スペース名を変更する場合は、
- Liberty サーバーをホストするすべてのマシンのシステム・クロックを同期化します。 システム・クロックが同期していないと、期限前にセッションの無効化が発生する可能性があります
- オプション: 必要に応じて、HTTP セッションと セキュリティー を Libertyに統合します。 デフォルトでは、セキュリティーが有効な保護リソース内でセッションを作成してそのセッションにアクセスした後に、そのセッションにアクセスできるのは、そのセッションの元の所有者のみです。 セッション・セキュリティー (セキュリティー統合) は、デフォルトで有効になっています。
- オプション: 必要に応じて、 をインストールし、構成した各サーバーに要求をルーティングするように Web サーバー・プラグインを 構成 します。 セッション・アフィニティーが維持されるのは、 プラグイン構成 で、サーバー構成で定義されているクローン ID と一致するクローン ID が指定されている場合のみです。