在先前的例子中,我用Tomcat官方提供的Session复制方式实现Tomcat集群Session共享。今天,我用另一种方式Memcached-Session-Manager来实现Session共享。话不多说,上实例。
Memcached-Session-Manager将Session序列化到Memcache中,序列化的组件有很多,比如:
msm-kryo-serializer、msm-javolution-serializer等,这里使用msm-javolution-serializer,使用不同组件需要的jar包是不同的。所需jar包如图所示:
如果使用maven的话,这些jar包可以这样得到:
本例中,由于使用msm-javolution-serializer作为序列化Session的组件,所以只需要前5个jar包。
将这5个jar包拷贝的两个tomcat的lib目录中,如下图:
为了将Session序列化到Memcache中,需要改变Tomcat的默认的StandardManager
在$CATALINA_HOME/conf/context.xml文件的Context元素中增加如下配置:
如果用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文件的最后增加如下配置:
server.xml文件不需要做更改
既然要将Session保存到Memcache中,Memcache是必不可少的,这里就不做介绍。启动两个memcached
memcached -d -p 11211 -u root
memcached -d -p 11212 -u root
同时,为了负载均衡需要启动nginx
service nginx start
最后,分别启动两个Tomcat
激动人心的时刻到了,让我们看看tomcat的启动日志
接下来,还是用我们以前的test为例来看看是不是能够实现负载均衡+Session共享
答案是肯定的,结果是之前用Session复制的效果是一样的
最后,来看看控制台
成功!
参考:
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