我们有 10 个 Tomcat 实例,它们都运行相同的 Web 应用程序。我们使用硬件负载平衡器,它将请求转发到任意服务器。在这种情况下,我如何维护所有 Tomcat 实例的 session ?
最佳答案
您需要使用Tomcat的集群来提供节点间的 session 复制。
您还应该考虑使用粘性 session ,因为将每个请求定向到任意服务器要求每个服务器始终具有最新的 session 数据。这在时间、网络带宽和服务器内存方面都很昂贵。还有一个问题是许多客户端并行发送多个请求。如果他们转到不同的服务器,他们将看到不同的 session 状态。
如果有 10 个服务器,您应该考虑 BackupManager
,它在当前节点(该 session 的主节点)和一个其他节点(该 session 的备份节点)上与所有其他节点维护 session 状态节点只知道该 session 的主节点和备份节点。默认的 DeltaManager
(维护所有节点上的 session 状态)不会随着网络流量随节点数量的平方增加而扩展(使用 BackupManager
网络流量会扩展线性)。请注意,一个常见的误解是一个节点充当所有 session 的备份。这是不正确的。备份分布在集群周围,因此对于具有 60 个事件 session 的 4 节点集群(A、B、C、D),节点 A 将有 15 个主 session (60/4),与 B 上的主 session 的 5 个备份, C 上与 master 的 session 有 5 个备份,D 上与 master 的 session 有 5 个备份。
关于session - 多个tomcat实例之间的Tomcat session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20391040/