我们有10个运行相同Web应用程序的Tomcat实例。我们使用硬件负载均衡器,并将请求转发给任意服务器。在这种情况下,如何在所有Tomcat实例中维护会话?
答案 0 :(得分:1)
您需要使用Tomcat的群集在节点之间提供会话复制。
您还应考虑使用粘性会话将每个请求定向到任意服务器,要求每个服务器始终具有最新的会话数据。这在时间上是昂贵的,网络带宽和服务器内存。还有许多客户端并行发送多个请求的问题。如果他们去不同的服务器,他们会看到不同的会话状态。
对于10台服务器,您应该考虑在当前节点(该会话的主节点)和另一个节点(该会话的备份节点)上维护会话状态的BackupManager
,其他所有节点都只知道该会话的主节点和备份节点。默认DeltaManager
(维护所有节点上的会话状态)不会随着网络流量随节点数的平方增加而缩放(网络流量BackupManager
线性缩放)。请注意,一个常见的误解是一个节点充当所有会话的备份。这是不正确的。备份分布在集群周围,因此对于具有60个活动会话的4节点集群(A,B,C,D),节点A将具有15个主会话(60/4),5个备份用于与B上的主节点的会话, 5个备份用于与主服务器进行C语言的备份,5个备份用于与主服务器进行会话。