集群中通过msm实现session共享,采用轮询的方式时session经常失效
最近有个任务是使用nginx+tomcat实现集群和负载均衡,同时结合使用memcached实现session共享。配置集群中没有什么问题,就是这个通过memcached+tomcat实现session共享这出现了问题,现在使用了两个tomcat服务器,一个memcached,当nginx中配置使用轮询的方式时,登录后系统之后操作的过程中频繁出现需要重新登录的情况,使用ip_hash的配置方式没有此问题。
最开始配置完memcached+tomcat后进行测试的时候,在两个tomcat中分别放一个简单的小项目,就是在首页上显示sessionID,采用轮询的方式,不断刷新,sessionID并不会改变,说明session已经共享了,不明白到项目中为什么会出现这样的问题。
两个tomcat的context.xml的添加manager标签,是一样的,配置如下
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
sticky="true"
memcachedNodes="n1:168.168.169.120:11211"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
server.xml的Engine标签中也都添加了jvmRoute属性。
在系统里有个检测session的过滤器,其中有句代码是
Httpsession session = request.getSession(false),
就是这句代码,该方法经常返回null,这时就会session失效。可是,在没有超时的情况下该方法怎么就返回null呢?
各位对此了解或遇到过此类情况的大神,请在百忙之中抽空指教下,在此先谢了。