MSM相关Jar包:获取方式,在Maven公网服务进行Jar最新版本下载
三、准备
1. 配置Tomcat
Tomcat有两个部分需要修改:
- 添加相关的Jar包至Tomcat安装目录下lib文件夹中,一般为$CATALINA_HOSE/lib下,此处注意:Web应用的WEB-INF/lib下不要放置相关的jar包,否则启动Tomcat会报异常(序列化类异常:java.lang.ClassCastException de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory)
- 修改Tomcat配置文件,一般为$CATALINA_HOME/conf/Context.xml
- memcached-session-manager-${version}.jar 可在Maven公共服务下载http://mvnrepository.com/
- memcached-session-manager-tc6-${version}.jar http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc6 Tomcat6 使用
- memcached-session-manager-tc7-${version}.jar http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc7 Tomcat7 使用
- Java内置序列化
- 自定义序列化(提升性能)
- kryo-serializer(已测试)
这里推荐使用Maven自动依赖获取相关jar包
<span style="font-family:Microsoft YaHei;font-size:14px;"> <dependency>
<groupId>de.javakaffee.msm</groupId>
<artifactId>msm-kryo-serializer</artifactId>
<version>1.8.3</version>
</dependency></span>
4. Tomcat配置<span style="font-family:Microsoft YaHei;font-size:14px;"> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.16.0.67:11211"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /></span>
若一个memcached节点出现异常,则session会转存至另一个,具体实现待后续进行研究测试(此处后续测试后进行补充)
四:原理
原文:http://xylonwang.iteye.com/blog/1269704,http://miwucc.iteye.com/blog/1329729
MSM(memcached-session-manager) 支持tomcat6 和tomcat7 ,利用 Value(Tomcat 阀)对Request进行跟踪。Request请求到来时,从memcached加载session,Request请求结束时,将tomcat session更新至memcached,以达到session共享之目的, 支持 sticky 和 non-sticky 模式。
1.Sticky 模式:
tomcat session 为主session,memcached 为备session。Request请求到来时, 从memcached加载备 session 到tomcat (仅当tomcat jvmroute发生变化时,否则直接取tomcat session);Request请求结束时,将tomcat session更新至memcached,以达到主备同步之目的。
2.Non-Sticky模式:
tomcat session 为 中转session, memcached1 为主 session,memcached 2 为备session。Request请求到来时,从memcached 2加载备 session 到 tomcat,(当 容器 中还是没有session 则从memcached1加载主 session 到tomcat, 这种情况是只有一个memcached节点,或者有memcached1 出错时),Request请求结束时,将tomcat session更新至 主memcached1和备memcached2,并且清除tomcat session 。以达到主备同步之目的。