Tomcat中负载的Session解决办法

Posted 舒润

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat中负载的Session解决办法相关的知识,希望对你有一定的参考价值。

Tomcat进行请求的Session解决方式总体来说有三种,

(1)使用nginx或者Apache反向代理工具进行用户请求的分机器,在Tomcat的Engine中的标签中加入jvmRoute属性,指定对应的负载到这个机器上就可以了,即称为有粘性的Session。

<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">

  Nginx对应原理:nginx_upstream_jvm_route(nginx扩展,推荐使用)

  nginx_upstream_jvm_route是一个nginx的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能。

  简单来说,它是基于cookie中的JSESSIONID来决定将请求发送给后端的哪个server,nginx_upstream_jvm_route会在用户第一次请求后端server时,将响应的server标识绑定到cookie中的JSESSIONID中,从而当用户发起下一次请求时,nginx会根据JSESSIONID来决定由哪个后端server来处理。

  还可以使用ip_hash的方式来进行,但是,不推荐这样的方式,所以,总体来说,这个方式是可以进行负载的,也是解决Session问题。

  通常,更推荐大家使用第三方的代理进行Session的分机器方式,这样在高可用方面可能稍微欠缺,但是,如果不是很大的项目情况,不会出现太大的问题。

  配置方式:待后面进行实际亲测后贴出来

  别人配置方式地址:http://www.linuxidc.com/Linux/2013-06/86446.htm (后面将验证改配置是否有效)

  这里也讲了一些价值的东西:http://hanqunfeng.iteye.com/blog/1920994

 

(2)使用Tomcat自带的功能,进行服务间的Session复制,但是,Session复制可以使用两种方式,修改后全量的复制,还是修改后增量复制,对应的Tomcat的类,DeltaSession(增量)、ReplicatedSession(全量,暂时在Tomcat9源码中未找到),这里的配置还有待添加。即称为无粘性的Session。

   配置方式:待后面进行实际亲测后贴出来

  别人配置方式地址:http://www.cnblogs.com/hanxianlong/p/3456780.html (后面将验证改配置是否有效)

(3)将Tomcat的Session管理分离出来,进行统一管理,将Session放入到Redis或其他缓存中去。

  这里需要去使用代码实现,也可以使用第三方插件实现,名称:tomcat-redis-session-manager 地址:https://github.com/jcoleman/tomcat-redis-session-manager

 

以上是关于Tomcat中负载的Session解决办法的主要内容,如果未能解决你的问题,请参考以下文章

负载均衡集群中的session解决方案

负载均衡集群中的session解决方案

tomcat重启后session没有清除的解决办法

使用Redis存储Nginx+Tomcat负载均衡集群的Session

Linux学习十负载均衡带来tomcat的session不一致问题

Apache和Tomcat 配置负载均衡(mod-proxy方式)-粘性session