session - 多个tomcat实例之间的Tomcat session

标签 session tomcat load-balancing

我们有 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/

相关文章:

java - 从命令行启动 servlet 容器 (Jersey Jax RS)

java - Tomcat 严重 : Exception starting filter CorsFilter, ClassNotFoundException

tomcat - java.lang.NoClassDefFoundError : javax/servlet/Filter 错误

nginx - 使用 nginx 开源的粘性 session 负载均衡器

java - 如何使用JavaDSL保持 Camel 上的路由运行?

php - 设置 http header 时丢失 session 数据(在 CodeIgniter 中)

php - session 跟踪 - 如果用户已登录

c# - 有没有办法在 netTcpBinding 中同时启用 session 和流式传输?

java - 基本 Apache Camel LoadBalancer 故障转移示例

php 销毁一个不是当前 session 的 session