linux下分布式项目基于tomcat8,redis的session共享

最近测试突然找我提了一个线上项目的超级历史遗留问题。简单看了一下,是一个用户注册发送验证码并且验证验证码的业务流程。判断是因为nginx集群中的多个tomcat服务没有共享session,当app一个注册请求是再A服务拿到的验证码,而验证的请求去到了B服务,则验证失败。

方案:

  此方案对应tomcat-8.5.30,redis应用阿里云实例,jdk没有影响(使用了jdk1.7.0_79,jdk1.8.0_65两个版本)。

下载相关jar包及配置文件

开源项目https://github.com/ran-jit/tomcat-cluster-redis-session-manager/releases/tag/2.0.3

点击下载

linux下分布式项目基于tomcat8,redis的session共享

解压后

linux下分布式项目基于tomcat8,redis的session共享

将lib文件夹的jar包复制到tomcat的lib中,conf文件夹的redis-data-cache.properties文件按需配置并拷贝到tomcat的conf中。

再将代码 

<Valve className="tomcat.request.session.redis.SessionHandlerValve" />  

        <Manager className="tomcat.request.session.redis.SessionManager" />  

加入tomcat的conf---->context.xml中

linux下分布式项目基于tomcat8,redis的session共享

==========================================================

整个过程中遇到的问题都可以根据tomcat启动日志进行解决,测试过程省略。