3

我们正在 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"
    />
4

1 回答 1

3

一种方法是在服务器上托管 memcached 或Windows Azure Caching,并利用memcached-session-manager在 Tomcat 服务器之间共享会话数据。

“memcached-session-manager 是一个 tomcat 会话管理器,它将会话保存在 memcached 中,用于高可用性、可扩展和容错的 Web 应用程序。它支持粘性和非粘性配置,目前正在使用 tomcat 6.x 和 7。 x. 对于粘性会话,支持会话故障转移(tomcat 崩溃),对于非粘性会话,这是默认设置(默认情况下,一个会话由不同的 tomcats 为不同的请求提供服务)。此外,通过迁移支持 memcashed 故障转移(memcached 崩溃)会话。也不应有单点故障,因此当 memcached 失败时,会话不会丢失(但在 tomcat 或另一个 memcached 中可用)。

在这个答案中看到一个稍微过时的讨论。

于 2013-07-08T20:41:54.953 回答