![两台机器之间可以实现 Tomcat 共享会话/集群吗?](https://linux22.com/image/510499/%E4%B8%A4%E5%8F%B0%E6%9C%BA%E5%99%A8%E4%B9%8B%E9%97%B4%E5%8F%AF%E4%BB%A5%E5%AE%9E%E7%8E%B0%20Tomcat%20%E5%85%B1%E4%BA%AB%E4%BC%9A%E8%AF%9D%2F%E9%9B%86%E7%BE%A4%E5%90%97%EF%BC%9F.png)
我设置了几个 Tomcat 服务器,分布在几台服务器上,所有服务器都运行相同的程序。Apache 位于 Apache 之上,Apache 服务器前面有一个负载均衡器。我想使用共享会话对 Tomcat 进行集群,以在部署应用程序时最大限度地减少停机时间和用户中断。
我知道集群在同一台服务器内工作,但是否可以设置 Tomcat 以使其在不同机器上的服务器之间共享会话?
=> Server 1
==> Apache 1
===> Tomcat 1
=> Server 2
==> Apache 2
===> Tomcat 2
当服务器/Tomcat 1 关闭时,用户及其会话将转移到服务器/Tomcat 2,反之亦然。
答案1
使用 Terracotta 快速、可靠的 Web 会话插件,即可获得无状态 Web 架构的可扩展性优势,而无需超载数据库或重写应用程序。Terracotta for Sessions 可与您喜欢的 Web 框架和您自己的自定义会话对象配合使用。
这网络会话教程列出了您评估产品(FOSS)时需要采取的五个简单步骤。
答案2
我正在设置同样的东西,Apache 的以下链接概述了如何实现这一点:
http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html
这基本上分为两个部分:
1)使会话对象可序列化
2)在 tomcat(server.xml)中设置集群配置。
根据您使用的 tomcat 管理器,您可能必须在节点上启用多播,以启用节点之间的通信。会话复制由 tomcat 通过这些多播 ping 处理。我见过许多人使用这种方法,而且这种方法对他们很有效(似乎是一种标准/简单的方法)。
这里还有一篇关于相同主题的详细博客文章 - 共有 5 个部分,还有一些视频。
http://www.ramkitech.com/2012/10/tomcat-clustering-series-simple-load.html
附言:
我正在使用相同的方法,解决 2 个 tomcat 节点的相同问题。我遇到了一个小问题,记录如下,如果您成功/遇到类似问题,请查看此内容
答案3
您可以将会话保存在数据库中,这样两个 tomcat 都可以访问它们。或者将它们存储在 tomcat 之间的共享目录中。
答案4
您可以将会话保存在memcached,在两台服务器之间共享。这应该比在数据库中使用共享会话或 n 台服务器之间的共享目录提供更好的性能和可扩展性。