我们正在 Azure 中跨两个切片实现一个小型 Tomcat 场(2 个节点),并将 Azure 负载均衡器放在前面。这基本上是一个循环的、非粘性会话平衡器。
webapp 使用 Tomcat 的容器管理的安全性(表单身份验证,目前通过 DataSourceRealm。
正如我们预期的那样,当用户轮询到他们未对其进行身份验证的节点时,他们会遇到身份验证错误。
我已经进行了大量研究,但似乎没有一个规定的方法来处理这个问题......有人建议我们将节点放在 Apache 服务器后面并使用 mod_jk;我们重新设计了身份验证过程以使用 cookie 来确认身份验证;我们使用Tomcat集群。
我们实现这一目标的最简单方法是什么?我们的应用程序不使用任何会话(Tomcat 的 CMS 除外)。我们宁愿不离开 Tomcat 的 CMS,但我们并不反对在必要时构建 JAAS 实现。但实际上,我们唯一需要支持的是跨节点身份验证。
任何帮助表示赞赏!
编辑:我们尝试在 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"
/>