在集群环境下, session的管理是一个需要特别注意的地方.
tomcat 集群环境可采用一下集中方式实现session管理 .
1, session复制, 即将server1 上的session复制一份放入server2,这样server1,server2上都有相同的session。
问题,复制session会存在性能问题, 最近在本机上做了一下测试,如果采用jmeter进行测试, 请求发送的速度高于session的复制速度,导致session共享失败.
2, 将session放入缓存服务器上(redis,memcached), 这种方式已经有完整的解决方案 ,相关可查看
redis : https://github.com/jcoleman/tomcat-redis-session-manager
memcached: https://code.google.com/p/memcached-session-manager/
因为本项目的采用的缓存服务器为redis,因此采用redsi来管理session。
配置方式如下:
1,将jar防止在${tomcat path}/lib下:
相关jar 为 tomcat-redis-session-manager-1.2-tomcat-6.jar , jedis-2.2.1.jar , commons-pool-1.3.jar
2,修改tomcat的配置文件信息
${tomcat path}/conf/context.xml
添加 <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve"/>
<Manager className="com.radiadesign.catalina.session.RedisSessionManager" database="0" host="localhost" maxInactiveInterval="60" port="6379"/>
启动tomcat ,出现日志信息
一月 27, 2014 4:19:36 下午 com.radiadesign.catalina.session.RedisSessionManager start
INFO: Attached to RedisSessionHandlerValve
一月 27, 2014 4:19:36 下午 com.radiadesign.catalina.session.RedisSessionManager initializeSerializer
INFO: Attempting to use serializer :com.radiadesign.catalina.session.JavaSerializer
一月 27, 2014 4:19:36 下午 com.radiadesign.catalina.session.RedisSessionManager start
以上凡是与http server没有任何的关系,如果采用的http server,可使用http sever的session 共享方式.
例如 nginx, 可采用ip_hash等方式实现。