tomcat cluster session copy

tomcat集群会话复制

基于多播通信的方式,把会话信息同步给后端其他节点,这个组件就是 cluster

概述

要在 Tomcat 中启用会话复制,可以遵循三种不同的路径来实现完全相同的目标: 1、使用会话持久性,并将会话保存到共享文件系统(PersistenceManager + FileStore) 2、使用会话持久化,并将会话保存到共享数据库(PersistenceManager + JDBCStore) 3、 使用内存复制,使用 Tomcat 附带的 SimpleTcpCluster (lib/catalina-tribes.jar + lib/catalina-ha.jar)

应用程序

  • stateful:有状态 扩展:负载均衡,每一个个体是不可被取代,2个MYSQL,两批不同的用户连接不同的MYSQL数据存储,他们能互相取代吗?做不到,但是如果两个静态WEB服务器,指向同一种存储,任何服务都可以取到数据,因此,不用当个体来看待,就当群体看待,任何一个都可以被 取代
  • stateless:无状态
翻译:无状态为畜牲,有状态则为宠物,不可取代,很难被取代,因此,扩展受到了限制,无状态没有任何的限制

集群基础

  • 您的所有会话属性都必须实现 java.io.Serializable
  • 取消注释Clusterserver.xml 中的元素
  • 如果您已定义自定义集群阀,请确保ReplicationValve 在 server.xml 中的 Cluster 元素下也已定义
  • 如果您的 Tomcat 实例在同一台机器上运行,请确保Receiver.port 每个实例的属性都是唯一的,在大多数情况下,Tomcat 足够聪明,可以通过自动检测 4000-4100 范围内的可用端口自行解决此问题
  • 确保你web.xml有 元素
  • 如果您使用的是 mod\_jk,请确保在您的引擎中设置<Engine name="Catalina" jvmRoute="node01" > 了 jvmRoute 属性,并且 jvmRoute 属性值与您在workers.properties 中的工作人员名称相匹配
  • 确保所有节点具有相同的时间并与 NTP 服务同步!
  • 确保您的负载均衡器配置为粘性会话模式
注意:请记住,您的会话状态由 cookie 跟踪,因此您的 URL 必须从外部看起来相同,否则将创建一个新会话。

示例:使用 tomcat cluster 组件来定义 tomcat 的会话复制集群,服务器节点变动会不会影响用户的会话

官方文档:https://tomcat.apache.org/tomcat-8.5-doc/cluster-howto.html 只需添加在<Engine><Host>元素以启用集群

server.xml配置文件

应用访问目录

启动集群后,查看tomcat日志

集群监听端口是否开启,是否收到其他集群中其他的组播心跳信息

检查启动日志相关信息,看下是否有异常

客户端访问

1、页面可以看到调度到不同的后端主机 2、session是没有变化的
notion image
notion image

可使用抓包

小结

1、yum 安装tomcatyum install tomcat tomcat-admin-webapps tomcat-docs-webapp tomcat-webapps 2、组播地址建议一组集群使用同一个 3、server使用固定地址,避免影响网络环境 4、集群和后端调度建议网络接口,分开,做分流处理 5、集群建议仅激活自已应用的集群会话,根据实际应用场景 6、很好的测试工具,上千台应用程序压测https://jmeter.apache.org/
如何使用session server
X 有存储 –> 无存储 Y 有状态 –> 无状态
有状态有存储 有状态无存储 无状态存储 无状态无存储
Loading...