Azure 中的 Tomcat 负载平衡

标签 tomcat authentication azure load-balancing

我们正在实现一个小型 Tomcat 场(2 个节点),安装在 Azure 中的两个切片上,并将 Azure 负载均衡器放在前面。这基本上是一个循环、非粘性 session 平衡器。

Web 应用程序使用 Tomcat 的容器管理安全性(表单例份验证,当前通过 DataSourceRealm。

正如我们预期的那样,当用户循环到未对其进行身份验证的节点时,他们会收到身份验证错误。

我已经做了相当多的研究,似乎没有一个单一的规定方法来处理这个问题...有人建议我们将节点放在 Apache 服务器后面并使用 mod_jk;我们重新设计身份验证流程以使用 cookie 来确认身份验证;我们使用 Tomcat 集群。

我们实现这一目标的最简单方法是什么?我们的应用程序不使用 session 进行任何操作(除了 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"
    />

最佳答案

一种方法是在服务器上托管 memcached,或 Windows Azure Caching ,和杠杆memcached-session-manager在 Tomcat 服务器之间共享 session 数据。

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

请参阅 this answer 上的稍微过时的讨论。 .

关于Azure 中的 Tomcat 负载平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17525784/

相关文章:

android - 验证 Android 应用程序请求

security - .NET 4.0 客户端证书验证错误

azure - Terraform - Azure 作为提供商和受限访问帐户

Azure 上的 Node.js RESTful API

tomcat - 对用 Java 编写的 Websocket 服务器和客户端端点之间交换的消息实现 gzip 压缩

jsp - JSF 2 和 JSP 2

tomcat - 使用 JMS Tibco EMS JNDI 资源启动 Tomcat 时来自 Catalina 的 NullPointerException

java - 安装 Android 应用程序后首次使用时创建一次登录页面

azure - 将 VMWare Workstation Pro VM 迁移到 Azure 的直接路径?

java - 如何在 tomcat 服务器上运行两个具有不同 spring 配置文件的 WAR 文件?