第8章 Web アプリケーションのクラスター化
8.1. セッションレプリケーション
8.1.1. HTTP セッションレプリケーションについて
8.1.2. Web セッションキャッシュについて
standalone-ha.xml
プロファイルを含むいずれかの HA プロファイル、管理対象ドメインプロファイル ha
または full-ha
を使用するときに設定できます。最も一般的に設定される要素は、キャッシュモードと分散キャッシュのキャッシュオーナーの数です。
キャッシュモードは、REPL
(デフォルト値) または DIST
のいずれかになります。
- REPL
REPL
モードでは、クラスターの他のノードそれぞれにキャッシュ全体がレプリケートされます。これは、最も安全なオプションですが、オーバーヘッドが増加します。- DIST
DIST
モードは、以前の実装で提供されたバディモードに似ています。このモードでは、owners
パラメーターで指定された数のノードにキャッシュを分散することによりオーバーヘッドが削減されます。オーナーのこの数のデフォルト値は2
です。
owners
パラメーターは、セッションのレプリケートされたコピーを保持するクラスターノード数を制御します。デフォルト値は、2
です。
8.1.3. Web セッションキャッシュの設定
REPL
です。DIST
モードを使用する場合は、管理 CLI で次の 2 つのコマンドを実行します。異なるプロファイルを使用する場合は、コマンドでプロファイル名を変更します。スタンドアロンサーバーを使用する場合は、コマンドの /profile=ha
部分を削除します。
手順8.1 Web セッションキャッシュの設定
デフォルトキャッシュモードを
DIST
に変更します。/profile=ha/subsystem=infinispan/cache-container=web/:write-attribute(name=default-cache,value=dist)
分散キャッシュのオーナー数を設定します。
以下のコマンドでは、5
オーナーが設定されます。デフォルト値は2
です。/profile=ha/subsystem=infinispan/cache-container=web/distributed-cache=dist/:write-attribute(name=owners,value=5)
デフォルトキャッシュモードを
REPL
に戻します。/profile=ha/subsystem=infinispan/cache-container=web/:write-attribute(name=default-cache,value=repl)
サーバーの再起動
Web キャッシュモードの変更後は、サーバーを再起動する必要があります。
サーバーでセッションレプリケーションが設定されます。独自のアプリケーションでセッションレプリケーションを使用するには、「アプリケーションにおけるセッションレプリケーションの有効化」を参照してください。
8.1.4. アプリケーションにおけるセッションレプリケーションの有効化
JBoss Enterprise Application Platform の高可用性 (HA) 機能を利用するには、アプリケーションが配布可能になるよう設定する必要があります。ここでは配布可能にする手順を説明した後、使用可能な高度な設定オプションの一部について解説します。
手順8.2 アプリケーションを配布可能にする
要件: アプリケーションが配布可能であることを示します。
アプリケーションが配布可能とマークされていないとセッションが配布されません。アプリケーションのweb.xml
記述子ファイルの<web-app>
タグ内に<distributable />
要素を追加します。例は次の通りです。例8.1 配布可能なアプリケーションの最低限の設定
<?xml version="1.0"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <distributable/> </web-app>
希望する場合はデフォルトのレプリケーション動作を変更します。
セッションレプリケーションに影響する値を変更したい場合は、<jboss-web>
要素の子要素である<replication-config>
要素内で値を上書きします。デフォルトを上書きしたい場合のみ指定の要素が含まれるようにします。以下の例に、全デフォルト設定の一覧と、最も一般的に変更されるオプションを説明する表を示します。例8.2 デフォルトの
<replication-config>
値<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 5.0//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd"> <jboss-web> <replication-config> <cache-name>custom-session-cache</cache-name> <replication-trigger>SET</replication-trigger> <replication-granularity>ATTRIBUTE</replication-granularity> <use-jk>false</use-jk> <max-unreplicated-interval>30</max-unreplicated-interval> <snapshot-mode>INSTANT</snapshot-mode> <snapshot-interval>1000</snapshot-interval> <session-notification-policy>com.example.CustomSessionNotificationPolicy</session-notification-policy> </replication-config> </jboss-web>
オプション
|
説明
|
---|---|
<replication-trigger>
|
クラスター全体でセッションデータのレプリケーションが引き起こされるのはどのような状態であるか制御します。セッション属性として保存された可変オブジェクトがセッションからアクセスされた後、メソッド
setAttribute() が直接呼び出されない限り、オブジェクトが変更されレプリケーションが必要であるかをコンテナは明確に認識できないため、このオプションは必須となります。
設定に関係なく、
setAttribute() を呼び出すと常にセッションレプリケーションが引き起こされます。
|
<replication-granularity>
|
レプリケートされるデータの細かさを決定します。デフォルトは
SESSION ですが、ATTRIBUTE を設定すると、ほとんどの属性は変更されずにセッションのパフォーマンスを向上することができます。
|
オプション
|
説明
|
---|---|
<useJK>
| mod_cluster 、mod_jk 、mod_proxy などのロードバランサーの使用を前提とするか指定します。デフォルトは false です。 true に設定すると、各要求に関連付けられているセッション ID がコンテナによって確認され、フェイルオーバーが発生するとセッション ID の jvmRoute の部分が置き換えられます。
|
<max-unreplicated-interval>
|
セッションのタイムスタンプのレプリケーションがトリガーされるまで、セッション後に待機する最大間隔 (秒単位) になります。変更がないと判断された場合でも適用されます。これにより、各セッションのタイムスタンプがクラスターノードによって認識されるようにし、フェイルオーバー中にレプリケートされなかったセッションが誤って期限切れにならないようにします。また、フェイルオーバー中に
HttpSession.getLastAccessedTime() への呼び出しに正しい値を使用できるようにします。
デフォルトでは値は指定されません。値が指定されないと、コンテナの
jvmRoute 設定が JK フェイルオーバーが使用されているかを判断します。 0 を設定すると、セッションがアクセスされるたびにタイムスタンプがレプリケートされます。-1 を設定すると、要求中の他のアクティビティがレプリケーションをトリガーした場合のみタイムスタンプがレプリケートされます。 HttpSession.getMaxInactiveInterval() よりも大きい正の値を設定すると設定ミスとして扱われ、0 に変換されます。
|
<snapshot-mode>
|
セッションが他のノードへレプリケートされるタイミングを指定します。デフォルトは
INSTANT で、INTERVAL を使用することも可能です。
INSTANT モードでは要求処理スレッドが使用され、変更は要求の最後にレプリケートされます。<snapshot-interval> オプションは無視されます。
INTERVAL モードでは、バックグラウンドタスクは <snapshot-interval> によって指定される間隔で実行され、変更されたセッションがレプリケートされます。
|
<snapshot-interval>
| INTERVAL が <snapshot-mode> の値として使用された時に、変更されたセッションがレプリケートされる間隔 (ミリ秒単位) になります。
|
<session-notification-policy>
|
インターフェース
ClusteredSessionNotificationPolicy の実装の完全修飾クラス名です。登録された HttpSessionListener 、HttpSessionAttributeListener 、 HttpSessionBindingListener へサーブレット仕様の通知が送信されたかどうかを管理します。
|