Azure の 2 つのスライスにまたがってインストールされた Tomcat の小さなファーム (2 ノード) を実装し、Azure ロード バランサーを前面に配置しています。これは基本的に、ラウンドロビンの非スティッキー セッション バランサーです。
Web アプリケーションは、Tomcat のコンテナー管理セキュリティ (フォーム認証、現在は DataSourceRealm.
ユーザーが認証されていないノードにラウンドロビンされると、予想どおり、認証エラーが発生します。
私はかなりの量の調査を行いましたが、これに対処するための単一の規定された方法はないようです... ノードを Apache サーバーの背後に置き、mod_jk を使用することが提案されています。Cookie を使用して認証を確認するように認証プロセスを再設計すること。Tomcat クラスタリングを使用すること。
これを達成するための最も簡単な方法は何でしょうか? 私たちのアプリは、(Tomcat の CMS 以外の) 何にもセッションを使用しません。必要に応じて JAAS 実装を構築することは嫌いではありませんが、Tomcat の CMS から離れたくはありません。しかし実際には、サポートする必要があるのはクロスノード認証だけです。
どんな助けでも大歓迎です!
編集: Azure で memcached を試みたところ、次の結果が得られました。
2013-07-08 21:50:55.463 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.nio.ch.SelectionKeyImpl@dcd4755
2013-07-08 21:50:55.463 INFO net.spy.memcached.MemcachedConnection: Reconnecting due to failure to connect to {QA sa=srvr.cloud.com/1XX.1XX.1XX.1XX:11XXX, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0}
java.net.ConnectException: Connection timed out: no further information
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source)
at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:399)
at net.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:247)
at net.spy.memcached.MemcachedConnection.run(MemcachedConnection.java:915)
context.xml:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:srvr.cloud.com:11XXX"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"
/>