コンテナレベルのセッションレプリケーション
コンテナレベルのセッションレプリケーションは、フェイルセーフ環境にYellowfinを導入することができるため、クラスタ内のノードに障害が発生した場合、現在Yellowfinに接続しているユーザーは、他のノードでセッションを継続することができます。これは、アプリケーションサーバレベルでのセッションレプリケーションにより実現するものであり、Yellowfinの機能ではないため、Yellowfinのコンポーネントとしてサポートをしていません。この構成では、異なるクラスタノードからの着信リクエストを均等に分散するためにロードバランサーが必要ですが、こちらの説明については割愛させていただきます。
アプリケーションサーバに応じて、この機能の実現方法は異なります。今回の例では、Yellowfinとともに提供されるTomcatを使用して説明します。
セッションレプリケーションのセットアップは、以下の手順から構成されています。
Tomcatのセッションレプリケーションについて、より詳細な情報は、こちらを参照してください。:http://tomcat.apache.org
セッションレプリケーションの制限
Yellowfinでセッションレプリケーション(または、任意のJava webアプリケーション)を使用する場合は、いくつかの注意点があります。セッションレプリケーションの主な欠点は、プロセスオーバーヘッドとメモリ使用量です。
クラスタ内のすべてのノードへ各セッションを複製する場合は、追加のプロセスオーバーヘッドが発生します。これは、各HTTPリクエスト後に発生し、デフォルトでは、変更されたセッション要素のみ他のノードへコピーされます。これは、ユーザーが接続されている任意ノードで作業をする度に、すべてのノードで追加処置が発生することを意味します。
セッションレプリケーション機能は、サーバ上のユーザーのメモリフットプリントを、クラスタ内のすべてのノードに複製します。これは、クラスタ内のすべてのユーザーのセッションは、各ノードに保存されることになり、追加のメモリを消費します。追加ノードへクラスタを拡張することで、各ノードのメモリ量が制限されます。
このオーバーヘッドが、フェイスセーフ機能を追加するに値するかどうかを考慮しなくてはいけません。セッションレプリケーションが使用されていない場合にノードに障害が発生すると、ユーザーのセッションは破棄されますが、他のノードにログインをし直すことで、作業を継続することができます。
web.xmlファイルの変更
各ノードのweb.xmlファイルの「<web-app>」配下に、「<distributable/>」を追加します。例:
<web-app> <distributable/> <!-- System Event and Debug classes --> <listener> <listener-class>com.hof.servlet.SysSessionListener</listener-class> </listener>
セッションの複製を有効にするには、web.xmlファイル内のClusterManagement servletに以下を追加します。
<init-param> <param-name>SessionReplication</param-name> <param-value>true</param-value> </init-param>
server.xmlファイルの変更
server.xmlファイルの「Yellowfin/appserver/conf」ディレクトリに変更が必要です。
「<host>」XMLブロック内に以下のXMLエントリーを追加します。
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
IPアドレス「224.0.0.0」は、セッションレプリケーションメッセージが受信されるマルチキャストアドレスです。これは、変更する必要はありませんが、Linux/Unixサーバでは、このアドレスでブロードキャストを受信するために、有効なマルチキャストルートを登録しなくてはいけない場合があります。これは、コンソールから以下のコマンドを実行することで行うことができます。
sudo route add -net 224.0.0.0 netmask 224.0.0.0 dev eth0
このシンタックスは、Linux/Unixの様々な種類により異なる可能性があります。今回の例では、「eth0」をこのルートで使用されるネットワークデバイスとして使用しています。
ROOT.xmlの変更
「Yellowfin/appserver/conf/Catalina/localhost」ディレクトリ内のROOT.xmlから、以下の行を削除します。
<Manager className="org.apache.catalina.session.PersistentManager" debug="0" distributable="false" saveOnRestart="false"> <Store className="org.apache.catalina.session.FileStore" /> </Manager>
これらの行は、Yellowfinディスクへのセッションシリアル化を抑制するために追加されていました。
追加情報
Tomcatのセッションレプリケーション機能は、異なるバージョンでは変更になる場合があります。こちらで概説されているプロセスが機能しない場合は、TomcatのウェブサイトでYellowfinが実行されているTomcatのバージョンの、更新された資料を確認してください。