Tomcatでフェイルオーバー
複数のTomcatでクラスタを構築してセッション情報の共有を行う場合、
の3種類の方法があるとのことです(The Apache Tomcat 5.5 Servlet/JSP Container Clustering/Session Replication HOW-TO)。
ちなみに、Tomcat5.5のドキュメントでは
1.Using session persistence, and saving the session to a shared file system (PersistenceManager + FileStore)
2.Using session persistence, and saving the session to a shared database (PersistenceManager + JDBCStore)
3.Using in-memory-replication, using the SimpleTcpCluster that ships with Tomcat 5 (server/lib/catalina-cluster.jar)
となっていますが、Tomcat5.0のドキュメントでは
1.Using session persistence, and saving the session to a shared file system (PersistenceManager)
2.Using session persistence, and saving the session to a shared database (JDBCManager)
3.Using in-memory-replication, using the SimpleTcpCluster that ships with Tomcat 5 (server/lib/catalina-cluster.jar)
となっています(Tomcat6.0はTomcat5.5と同じ)。ん~?? FileStoreやJDBCStoreに関しては、Tomcat4の頃から存在するようですが、JDBCManagerはそもそも存在していないような??
で、とりあえずPersistenceManager+FileStore/JDBCStoreの組み合わせの環境構築を行ってみました。
【PersistenceManager】
PersistenceManagerは、元々は長時間使用されていないメモリ上のセッションオブジェクトをファイル等に対して永続化するためのもののようです(主な目的はメモリの消費量を抑えるため)。で、PersistenceManagerの機能のうち、「セッション情報のバックアップ」の機能を用いることで、(若干制限はあるものの)フェイルオーバーを実現することが可能となるようです。
Contextに対する設定となりますが、conf/context.xmlに内容を記述すると、すべてのアプリケーションに適用されることとなります(Tomcat5.5の場合のContextの設定の詳細はこちら。なお、5.0と5.5とでいろいろと変更されたようです)。
<Manager className="org.apache.catalina.session.PersistentManager"
saveOnRestart="true"
maxIdleSwap="-1"
maxIdleBackup="1"
processExpiresFrequency="6"
>
<Store (中略)
>
</Store>
</Manager>
Managerに対してStoreを登録すると、一定の間隔でStore処理が行われるようになります。「一定の間隔」の計算の仕方は(Tomcat5.5.23のソースをみたところ)以下のような感じになるようです。パラメータの詳細に関しては、JavaDoc PersistentManagerおよびそれらの親クラスのField Summaryがある程度は参考になるかと。
なので、セッション情報をファイル(あるいはDB)に保管するためには若干のタイムラグが必要となるため、その間に別のTomcatに処理が割り振られてしまうとセッション情報の維持に失敗してしまうので、Apache側のStickySessionは必須になるかと。
また、saveOnRestartがfalseになっていると、Tomcat停止時にそのTomcatにつながっているセッション情報が削除されてしまい、結果としてフェイルオーバーに失敗することになるので、この部分は通常はtrueで使用することになるかと思います。
#FileStore/JDBCStoreに関しては次回。
【6/2編集】
saveOnRestartの値をfalseからtrueに変更。
「Java」カテゴリの記事
- Fess(2017.06.10)
- Apache-Tomcat通信で接続エラー(2012.11.01)
- JAXBとプリミティブ型(2012.10.02)
- psi-probeでグラフが表示されない(2012.05.15)
- Tomcat JDBC Pool(2011.11.13)
「Subversion・Trac・etc.」カテゴリの記事
- Kanboard(2017.06.13)
- XML parsing failed : (413 Request Entity Too Large)(2017.06.11)
- TortoiseSVNとクライアント証明書(2012.09.17)
- Trac 1.1.1(dev)(2012.09.15)
- Trac1.0 リリース(2012.09.09)
The comments to this entry are closed.























![アスキー: UNIX MAGAZINE (ユニックス マガジン) 2008年 01月号 [雑誌]](http://ecx.images-amazon.com/images/I/11Z7w19zJ3L.jpg)













Comments