Tomacat session 共享复制
Posted njsummer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomacat session 共享复制相关的知识,希望对你有一定的参考价值。
1. msm 介绍
msm(memcached session manager)提供将Tomcat的session保持到memcached或redis的程序,可以实现高可用。项目早期托管在google code,目前在Github
github网站链接: https://github.com/magro/memcached-session-manager
支持Tomcat的 6.x、7.x、8.x、9.x
Tomcat的Session管理类,Tomcat版本不同
- memcached-session-manager-2.3.2.jar
- memcached-session-manager-tc8-2.3.2.jar
Session数据的序列化、反序列化类
- 官方推荐kyro
- 在webapp中WEB-INF/lib/下
驱动类
- memcached(spymemcached.jar)
- Redis(jedis.jar)
2. sticky 和 non-sticky 两种工作模式
2.1 sticky工作模式
sticky工作模式:在Tomcat本机上(t1)存一份session,在后端的session共享器 (memcached或者redis)m2上(一般为交叉节点)也存放一份副本,当m2故障了,新session会被写入到t1 和 m1 上去,同时m2故障发生同时还存活在t1上的session 还会被写到m1 上去。t2接收的session同样的方式被存放和容错。
The following description shows an example for a setup with sticky sessions, with two instances of tomcat and two instances of memcached installed.
Tomcat-1 (t1) will primarily store its sessions in memcached-2 (m2) which is running on another machine (m2 is a regular node for t1). Only if m2 is not available, t1 will store its sessions in memcached-1 (m1, m1 is the failoverNode for t1). With this configuration, sessions wont be lost when machine 1 (serving t1 and m1) crashes. The following really nice ASCII art shows this setup.
<t1> <t2>
. \\ / .
. X .
. / \\ .
<m1> <m2>
#以下是sticky的配置 修改 $CATALINA_HOME/conf/context.xml 特别注意,tomcat 节点上的修改内容有些差异 t1配置中为failoverNodes="n1", t2配置为failoverNodes="n2"
<Context>
...
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.16.0.38:11211,n2:172.16.0.48:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFac
tory"
/>
</Context>
实践的实验过程中,t1和m1部署可以在一台主机上,t2和m2部署也可以在同一台。
当新用户发请求到Tomcat1时, Tomcat1生成session返回给用户的同时,也会同时发给memcached2备份。即Tomcat1 session为主session,memcached2 session为备用session,使用memcached相当于备份了一份Session;如果Tomcat1发现memcached2 失败,无法备份Session到memcached2,则将Sessoin备份存放在
memcached1中。
# 配置说明
memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211"
memcached的节点: n1、n2只是别名,可以重新命名。
failoverNodes 为故障转移节点,n1是备用节点,n2是主存储节点。另一台Tomcat将n1改为n2,其主节
点是n1,备用节点是n2。
2.2 non-sticky 模式
non-sticky 模式即前端tomcat和后端memcached无关联(无粘性)关系
从msm 1.4.0之后版本开始支持non-sticky模式。
Tomcat session为中转Session,对每一个SessionID随机选中后端的memcached节点n1(或者n2)为主session,而另一个memcached节点n2(或者是n1)为备session。产生的新的Session会发送给主、备memcached,并清除本地Session。
后端两个memcached服务器对一个session来说是一个是主,一个是备,但对所有session信息来说每个
memcached即是主同时也是备
如果n1下线,n2则转正。n1再次上线,n2依然是主Session存储节点。
# non-sticky 模式 修改 $CATALINA_HOME/conf/context.xml tomcat的节点上的配置修改内容一样
<Context>
...
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.16.0.38:11211,n2:172.16.0.48:11211"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFac
tory"
/>
</Context>
3. 需要在$CATALINA_HOME/lib/目录下部署的jar包
参考链接: https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
将spymemcached.jar、memcached-session-manage、kyro相关的jar文件都放到Tomcat的lib目录中去,这个目录是$CATALINA_HOME/lib/ ,对应本次安装就是/usr/local/tomcat/lib。
kryo-3.0.3.jar
asm-5.2.jar
objenesis-2.6.jar
reflectasm-1.11.9.jar
minlog-1.3.1.jar
kryo-serializers-0.45.jar
msm-kryo-serializer-2.3.2.jar
memcached-session-manager-tc8-2.3.2.jar # 这个依据tomcat的版本需要选择不同的jar
spymemcached-2.12.3.jar
memcached-session-manager-2.3.2.jar
4. 安装配置
安装调试一般分以下几个主要步骤:
第一步:先配置好前端的反向代理服务器(nginx 、HAPROXY 、HTTPD等都可以);
第二步:配置好几个 tomcat 节点,并与前端的反向代理构建好集群;
第三步:配置session 的持久保存和同步,本文的主要内容就是介绍第三步,详细的教程在下面的官网连接上有详细的介绍。
官方的安装配置教程: https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
以上是关于Tomacat session 共享复制的主要内容,如果未能解决你的问题,请参考以下文章
(转)tomcat+nginx+redis实现均衡负载session共享