在先前的例子中,我用Tomcat官方提供的Session复制方式实现Tomcat集群Session共享。今天,我用另一种方式Memcached-Session-Manager来实现Session共享。话不多说,上实例。

    Memcached-Session-Manager将Session序列化到Memcache中,序列化的组件有很多,比如:

msm-kryo-serializer、msm-javolution-serializer等,这里使用msm-javolution-serializer,使用不同组件需要的jar包是不同的。所需jar包如图所示:

Tomcat+Memcached实现Session共享_第1张图片

如果使用maven的话,这些jar包可以这样得到:

Tomcat+Memcached实现Session共享_第2张图片

本例中,由于使用msm-javolution-serializer作为序列化Session的组件,所以只需要前5个jar包。

将这5个jar包拷贝的两个tomcat的lib目录中,如下图:

Tomcat+Memcached实现Session共享_第3张图片

为了将Session序列化到Memcache中,需要改变Tomcat的默认的StandardManager

在$CATALINA_HOME/conf/context.xml文件的Context元素中增加如下配置:

wKioL1WfMY6y2kQaAAHVZjP9ch8102.jpg

如果用msm-kryo-serializer组件的话,这里的transcoderFactoryClass的值应该是

de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory

同时,为了能够在Tomcat控制台($CATALINA_HOME/logs/catalina.out)看到Memcached-Session-Manager输出的日志,我们在$CATALINA_HOME/conf/logging.properties文件的最后增加如下配置:

wKiom1WfMJnQZUbvAAAxOf2UU04932.jpg

server.xml文件不需要做更改

Tomcat+Memcached实现Session共享_第4张图片既然要将Session保存到Memcache中,Memcache是必不可少的,这里就不做介绍。启动两个memcached

memcached -d -p 11211 -u root

memcached -d -p 11212 -u root

同时,为了负载均衡需要启动nginx

service nginx start

最后,分别启动两个Tomcat

Tomcat+Memcached实现Session共享_第5张图片

激动人心的时刻到了,让我们看看tomcat的启动日志

Tomcat+Memcached实现Session共享_第6张图片

接下来,还是用我们以前的test为例来看看是不是能够实现负载均衡+Session共享

答案是肯定的,结果是之前用Session复制的效果是一样的

Tomcat+Memcached实现Session共享_第7张图片

最后,来看看控制台

Tomcat+Memcached实现Session共享_第8张图片

成功!


参考:

http://my.oschina.net/smallsun512/blog/164107

http://www.tuicool.com/articles/VZz6bm
http://chenzhou123520.iteye.com/blog/1650212

http://www.iteye.com/topic/1125301

http://blog.chinaunix.net/uid-26719405-id-4683071.html