JRun4クラスタのハングアップ
IIS+JRun4の構成時TAMはステートレスジャンクションだった。
セッションを継続するためにはJRun4のアフィニティ機能が必須である。
JRun4のアフィニティ機能はスティッキーセッションと呼ばれている。
IISにJRun4のISAPIフィルターモジュールのDLLとして実装されている。
jrun.dll/jrun_iis6.dll/jrun_iis6_wildcard.dll
このISAPIのモジュールのことをコネクターと呼んでいる。
セッションの継続はJ2EEの仕様どおりJSESSIONIDのクッキー値を使う。
{jrun}/servers/{servername}/SERVER-INF/connector.properties
にサーバーのIDを持っている。
server.id=c830
セッションの割り振りのときに
JSESSIONID=c830xxxxxxxxxxxxxxxx
のクッキーの値がセットされる。
IISのJRun4コネクターはJSESSIONIDの値の先頭4文字を見て該当する
JRun4サーバに中継するのだ。
セッションオブジェクトをserializableにしておくと
in-memoryセッションレプリケーション機能を使うこともできる。
これがJRun4がよくハングアップした原因と思っている。
ユーザはIEを立ち上げてWeb上の共通メニューのURLを開く、
シングルサインオン機能ののTAMは
PD-ID=xxxx
の認証クッキーをブラウザにセットする。
共通メニューからウィンドウをポップアップさせてJRun4のアプリを開く
JRun4は
JSESSIONID=c830xxxxxxxxxxxxxxxx
をブラウザにセットし、2台のJRun4の間でメモリー間のレプリケーションをはじめる。
問題はJRun4のセッションがタイムアウトした時に発生する。
このブラウザの使い方では共通メニューのブラウザにJRun4のJSESSIONIDが残り続けてしまうのだ。
さらにJRun4のアプリにはクッキーを無効にするログオフ手順が無いことも原因の1つである。
何回もログインするのは面倒なので共通メニューを起動したままユーザはシステムを使い続ける。
JRun4のアプリを再び起動するとタイムアウトしたJSESSIONIDの値がIISに投げられる。
該当するセッションオブジェクトが存在しないのでJRun4はレプリケート先にセッションをさがしに行くのだ。
こんな理由で無効なセッションをレプリケート先にさがしにいくリクエストが大量に発生する。
レプリケータがパンクして2台ともJRun4がハングアップするのだ。
End of FILE.
2005/11/14
ugya@yahoo.com