一、Apache Tomcat Clustering(Tomcat自带集群)
- 进入tomcat官网http://tomcat.apache.org/tomcat-8.5-doc/cluster-howto.html(根据自己的tomcat版本进行选择)找到相应的位置,将以下内容复制到tomcat中的server.xml的响应节点
- 根据文档说明将
<distributable/>
节点插入响应项目的web.xml中
- 以上即完成简单的Tomcat集群搭建
- 原理:部署的Tomcat间会做一次session对比数据的一致性,如果不一致则会进行网络传输。因此会存在如下两个问题:
(1)session之间的对比是通过笛卡尔积对比,速度非常慢;
(2)网络传输会消耗很大的资源
综上:不推荐使用
二、JWT等类似机制
jwt方式并不在tomcat集群方式之中,而是变相的完成tomcat集群完本要完成的东西,实现了tomcat间session的共享。
三、MSM(Memcached Session Manager用内存管理session)统一Session管理
这种方式是将请求的session全部放入统一的Memcached区域,避免了Tomcat之间的session对比和数据传输。
3.1、memcached会话管理器
memcached-session-manager是一个tomcat会话管理器,它将会话保存在memcached或Redis中,用于高可用性,可伸缩和容错的Web应用程序。它支持粘性sticky和非粘性non-sticky配置,目前正在使用tomcat 6.x,7.x,8.x和9.x. 对于粘性会话,支持会话故障转移(tomcat崩溃),对于非粘性会话,这是默认值(默认情况下,不同的tomcats为不同的请求提供会话)。还通过迁移会话来支持memcached故障转移(memcached崩溃)。也不存在单点故障,因此当memcached失败时,会话不会丢失(但可以在tomcat或其他memcached中使用)。
3.2、通用配置
3.2.1、非粘性
- 引入依赖包(相关jar包下载见:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration --‘Configure tomcat’)
- 配置Tomcat/conf/context.xml
<Context>
...
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.1.17:5555,n2:192.168.1.17:6666" //配成自己的服务ip和端口
sticky="false" //非粘性
sessionBackupAsync="false"
lockingMode="auto" //改为auto
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>
- 获取Memcached存储内容
stats items
stats cachedump [itemIndex] [0] (0表示查找全部)
3.2.2、粘性(Tomcat数量少,用的人少的时候效率高)
- 指定sticky为true
- 关闭lockingmode
- 修改server.xml -> Engine -> jvmRoute
- failoverNode
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.1.17:5555,n2:192.168.1.17:6666" //配成自己的服务ip和端口
sticky="true" //粘性
sessionBackupAsync="false"
failoverNode="n1" //在Memcached出问题后起作用
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>
四、Tomcat+Redis统一Session管理
详见:https://blog.csdn.net/weixin_43192102/article/details/89848277
如何选择:如果对性能要求高选择MSM,如果对数据持久化要求高选择Tomcat+Redis