我有几个 Tomcat 服务器的设置分布在几台服务器之间,它们都运行相同的东西。Apache 位于 Apache 之上,并且是 Apache 服务器前面的负载均衡器。我想使用共享会话对 Tomcat 进行集群,以最大限度地减少部署应用程序时的停机时间和用户中断。
我知道集群在同一台服务器中工作,但是否可以设置 Tomcat 以在不同机器上的服务器之间共享会话?
=> Server 1
==> Apache 1
===> Tomcat 1
=> Server 2
==> Apache 2
===> Tomcat 2
当服务器/Tomcat 1 关闭时,用户及其会话将转移到服务器/Tomcat 2,反之亦然。
看看Teracotta 的网络会话。
网络会话教程列出了五个简单的步骤供您评估产品 (FOSS)。
我正在设置相同的东西,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
PS:
对于 2 个 tomcat 节点的相同问题,我使用相同的方法。我面临一个小问题,记录在下面,如果您成功/遇到类似问题,请查看此
Tomcat会话复制问题
您可以将会话保存在数据库中,因此可以从两个 tomcat 访问它们。或者将它们存储在 Tomcat 之间的共享目录中。
您可以将会话保存在两个服务器之间共享的memcached中。这应该比在数据库中使用共享会话或在 n 个服务器之间使用共享目录提供更好的性能和可伸缩性。