memcached session manager是一个高可用的Tomcat session共享解决方案,可使用memcached存取Session,以实现高可用。
一些大型的web2.0的网站,在正式部署时一般是部署在不同故障域的多台应用服务器上,以j2ee应用为例,一般我们都会部署在tomcat下,假如我们部署了10台tomcat服务器,那这10台tomcat可能是部署在不同的机器上,然后将应用程序copy到这10台tomcat下,然后启动所有tomcat,一般来说这样做的目的是为了达到负载均衡以及避免单点故障,另外也考虑到国内网络环境的原因,避免跨网络运营商访问而导致访问速度低下的问题。
当客户访问A服务器时,如果A服务器发生故障或者维护时,访问A服务器的就会负载均衡到B机器,但是session信息会丢掉,用户会发现,突然跳到登录页,用户体验不好。memcached session manager就是为了解决这个问题。
(1)将上面所提到的包全部拷贝到tomcat的lib下(所有负载的tomcat都需要)
相关jar包下载地址
(2)修改每台tomcat的conf目录下得context.xml文件或者server.xml文件,在其中加入如下代码
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:127.0.0.1:11210"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
其中127.0.0.1:11210是memcache的地址和端口
一月 08, 2016 11:55:05 下午 de.javakaffee.web.msm.MemcachedSessionService startInternal
信息: MemcachedSessionService starts initialization... (configured nodes definition n1:127.0.0.1:11210, failover nodes null)
2016-01-08 23:55:05.717 INFO net.spy.memcached.MemcachedConnection: Added {QA sa=/127.0.0.1:11210, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
2016-01-08 23:55:05.720 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.nio.ch.SelectionKeyImpl@7b87d6c5
一月 08, 2016 11:55:05 下午 de.javakaffee.web.msm.SessionTrackerValve
信息: Setting ignorePattern to .*\.(ico|png|gif|jpg|css|js)$
一月 08, 2016 11:55:05 下午 de.javakaffee.web.msm.MemcachedSessionService setLockingMode
信息: Setting lockingMode to URI_PATTERN with pattern /path1|/path2
一月 08, 2016 11:55:05 下午 de.javakaffee.web.msm.MemcachedSessionService createTranscoderFactory
信息: Creating transcoder factory de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory
一月 08, 2016 11:55:05 下午 de.javakaffee.web.msm.serializer.kryo.KryoTranscoder
信息: Starting with initialBufferSize 102400 and maxBufferSize 2048000
一月 08, 2016 11:55:05 下午 de.javakaffee.web.msm.MemcachedSessionService startInternal
信息: MemcachedSessionService finished initialization, sticky false, with node ids [n1] and failover node ids []