Apache 会话复制是否可以在没有粘性会话的情况下进行?

Apache 会话复制是否可以在没有粘性会话的情况下进行?,apache,tomcat,load-balancing,cluster-computing,session-replication,Apache,Tomcat,Load Balancing,Cluster Computing,Session Replication,在Tomcat的上下文中,会话复制是否可以在不启用粘性会话的情况下进行 我知道粘性会话的目的是让客户端在整个会话过程中“粘住”一台服务器。通过会话复制,客户机与服务器的交互将在整个集群(许多web服务器)中复制 在上述情况下,是否可以进行会话复制?i、 e.客户机的会话分布在整个web服务器上,与任何一个web服务器的每次交互都是跨服务器复制的,因此,允许无缝交互 AFAIK,tomcat集群不支持非粘性会话。发件人: 确保已为粘性会话配置loadbalancer 模式 但是有一个解决方案(我创

在Tomcat的上下文中,会话复制是否可以在不启用粘性会话的情况下进行

我知道粘性会话的目的是让客户端在整个会话过程中“粘住”一台服务器。通过会话复制,客户机与服务器的交互将在整个集群(许多web服务器)中复制


在上述情况下,是否可以进行会话复制?i、 e.客户机的会话分布在整个web服务器上,与任何一个web服务器的每次交互都是跨服务器复制的,因此,允许无缝交互

AFAIK,tomcat集群不支持非粘性会话。发件人:

确保已为粘性会话配置loadbalancer 模式

但是有一个解决方案(我创建的,所以你知道我有偏见:-)叫做(msm),它也支持非粘性会话。msm使用(或任何使用memcached协议的后端)作为会话备份/存储的后端

在非粘性模式下,会话只存储在memcached中,而不再存储在tomcat中,与非粘性会话一样,会话存储必须是外部的(以避免过时数据)

它还支持会话锁定:对于多个非粘性会话,并行请求可能会命中不同的Tomcat,并可以并行修改会话,因此某些会话更改可能会被其他更改覆盖。会话锁定允许同步到不同Tomcat的并行请求

主要介绍了粘性会话方法(因为它仅从这一点开始),以了解有关您可能在上搜索或询问的非粘性会话的详细信息

有关配置的详细信息和示例可以在中找到

只是想让您了解一下复杂性:您需要的是一个或多个正在运行的服务器(或s.th.类似的memcached)和一个更新的tomcat context.xml,如下所示:

<Context>
  ...
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:host1.domain.com:11211,n2:host2.domain.com:11211"
    sticky="false"
    sessionBackupAsync="false"
    lockingMode="auto"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    />
</Context>

...

您的负载平衡器不需要特殊配置,因此一旦这些配置就绪,您就可以开始测试您的应用程序了。

关于此主题的精彩文章如下:

他们提到的陶土产品在这里有一个简单的教程:


Terracotta在Tomcat上工作,但您必须注意检查哪些Terracotta是免费的,哪些是商业的。几年前,他们的冗余存储是付费的,我不记得这个解决方案是一个单独的产品。

我实际上找到了这个问题的相反答案。使用OOTB选项的会话复制for me(Tomcat7)只能在没有粘性会话的情况下正常工作。打开日志后,我发现启用JVMRoutes后,我的会话ID从A123456789变为A123456789.01——后缀为jvmroute。该会话已成功从群集中的节点01复制到节点02,但使用相同的ID(A123456789.01)。当我将节点01从集群中取出时,通信量开始粘附在节点02上——现在它寻找一个会话A123456789.02,当然它不存在。01存在,但在到期之前基本处于空闲状态。如果我启动另一台服务器,复制会话,然后关闭02,我会有更奇怪的行为,因为会话是在它停止的地方启动的


对我来说,到目前为止,没有粘性会话的会话复制(只是集群中节点之间的常规RR)是唯一有效的方法

我读过这篇文章,但它没有回答我的问题,即会话复制是否可以在没有粘性会话的情况下进行。对于Tomcat,在应用程序方面,如果不首先启用粘性会话,就不可能进行会话复制。感谢您提供的解决方案。我已经阅读了Tomcat的FAQ,但奇怪的是,我能够在Tomcat mod_jk上执行会话复制而不启用粘性会话。不确定这是否异常。会话复制本身独立于loadbalancer配置工作。问题应该是,几个tomcat共享同一个会话,导致会话数据过时(假设您没有在tomcat中配置jvmRoute)。例如:如果tomcat1持有会话A的版本1(来自第一个请求),而tomcat2持有会话A的版本2(因为它使用请求2更改了它),并且第三个请求将再次转到tomcat1,那么第二个请求的更改将丢失(将看到会话版本1)。配置了jvmRoute后,您一直处于故障切换状态……感谢Grotzke的深入了解,他为我提出的问题提供了非常清晰的答案。:)