tomcat集群session共享

tomcat有cluster和loadbalance两种方案.

cluster(http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html)通过组播方式进行session同步实现高可用性,但是一般的交换机都将组播关闭了,如果有这种需求,需要开启交换机此功能。因为组播对交换机资源消耗很大,所以如果cluster中的tomcat服务器很多,会影响session同步效率.

loadbalance实现负载均衡(可以根据不同的sessionID分配到同一个tomcat上)。因为缺省session信息会保存到tomcat自己内存中,无法实现高可用性。如果需要高可用性可以将所有session信息存储到一起,放到cache服务器或者数据库服务器中。 

memcached session manager

我的环境是nginx 负载多台tomcat(2台机器,2个应用,8个tomcat) .  

地址:http://code.google.com/p/memcached-session-manager

安装和使用参见http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration.

下面是我的一点摘抄总结

优势

摘自http://blog.csdn.net/small_love/article/details/6662686

  1、支持Tomcat6和Tomcat7

  2、操作粘性或不黏性Session

  3、没有单点故障

  4、Tomcat的故障转移

  5、Memcached的故障转移

  6、可插拔的Session序列化

  7、支持异步保存Session

  8、Sessions发送到Memcached如果他确实修改了

  9、JMX管理和监控

使用

1:首先安装 memcached 和nginx 

2:下载下面的jar包放到%TOMCAT_HOMT%\lib下

http://spymemcached.googlecode.com/files/memcached-2.6.jar

memcached-2.6.jar

http://code.google.com/p/memcached-session-manager/downloads/list

javolution-5.4.3.1.jar

memcached-session-manager-1.5.1.jar

memcached-session-manager-tc7-1.5.1.jar(根据你的tomcat版本选择 tc7 是tomcat7)

msm-javolution-serializer-1.5.1.jar

msm-kryo-serializer-1.5.1.jar

msm-xstream-serializer-1.5.1.jar

官方给出多种序列化方案,kryo的效率比较高,详见 http://code.google.com/p/memcached-session-manager/wiki/SerializationStrategies

3:配置tomcat context.xml 或者 server.xml中的context标签

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="n1:ip:11211,n2:ip:11212"

requestUriIgnorePattern=".*/.(png|gif|jpg|css|js|swf)$"

sessionBackupAsync="false"

sessionBackupTimeout="100"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"

copyCollectionsForSerialization="false"/>

4.启动tomcat 查看sessionid

JSESSIONID: 6353107A4C57323148D900274400DA61-n1.f230

其实是修改tomcat的session存储机制 n1是memcached的节点名称,f230是jvmRoute

猜你喜欢

转载自chongzai.iteye.com/blog/1601776