- PR -

tomcatのクラスタリングについて

1
投稿者投稿内容
NAO
会議室デビュー日: 2008/04/15
投稿数: 1
投稿日時: 2008-04-15 15:44
下記の環境にて、サイトを運営しております。

●HardWare(×2)
OS:Debian4.0
WebServer:tomcat 5.5.25
APServer:apache2.2.3

●SoftWare
struts 1.3.8
hibernate3
velocity
springframework2

serverが2台あるので、tomcatのクラスタリング機能を用いてsessionレプリケーションを行おうと
考えておりますが、TransactionTokenが共有されずにIsTokenValidでTokenが一致しないと
みなされしまい、session共有がうまく行えておりません。
tomcatのmanualを見ながらClusterタグの設定を色々変更してみているものの全然効果がない状態です。

現在、tomcatの設定はserver.xmlにあるClusterタグ部分のコメントを外した状態になっており
Context毎のweb.xmlにレプリケーション用のタグを記述している状態です。
何かアドバイスを頂ければと思います。情報が不足しておりましたらご連絡いただければと思います。

お手数お掛け致しますが、ご教授の程宜しくお願い致します。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2008-04-15 23:32
Strutsの同期トークンの仕組みは、クラスタ対応が微妙です。
Tomcatのクラスタのレプリケーションはリクエスト完了後に行われます。
(厳密にそういう仕様であるかを確認したわけではなく、
単に実行して試した事があるだけです。)

それと、トークンの発行を行う際、リクエスト単位でスレッドの同期化が行われますが、
クラスタ環境の場合、同一セッションのリクエストが別々のサーバで処理されます。
それぞれのリクエストのスレッドの同期はできません。

本格的にやるのであれば、
1.Actionクラスを継承して、Token系メソッドをオーバーライドして独自のTokenプロセッサを使用
2.Tokenプロセッサ内での同期化はDBの行ロックで行う
3.セッションの変わりにDBにトークンを保存

というように、同期処理や保存処理をDBに委譲するようにすれば、
割と簡単に対応できるかもしれません。
1

スキルアップ/キャリアアップ(JOB@IT)