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 的会话复制集群,服务器节点变动会不会影响用户的会话
server.xml配置文件
应用访问目录
启动集群后,查看tomcat日志
集群监听端口是否开启,是否收到其他集群中其他的组播心跳信息
检查启动日志相关信息,看下是否有异常
客户端访问
1、页面可以看到调度到不同的后端主机
2、session是没有变化的


可使用抓包
小结
1、yum 安装tomcat
yum 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...
keepalived