基于MSM 的tomcat session 共享

简介:

   ,是基于tomcat cluster 来配置,当然这个配置也十分的简单,但是tomcat 官网建议tomcat cluster 配置,tomcat 不能超过4台,如果超过四台tomcat,不仅容易出现广播风暴,而且效率也是最低,为解决tomcat session 共享的问题,介绍一下memcached-session-Manager

  memcache session manager 原理

MSM(Memcache-session-manager) 支持tomcat6 tomcat7,利用Value(tomcat 阀值Request 进行跟踪。 tomcat 收到Request 请求时,从memcached 中加载sessionRequest 请求结束时,将tomcat session更新至memcached,以达到session 共享的目的,MSM 支持sticky non-sticky 两种模式

   Sticky 模式:tomcat  session  为主sessionmemcache 为备sessionRequest 请求到来时,首先从memcached加载备session tomcat(仅当tomct jvmroute 发上变化时,否则直接取的是tomcat session)Request 请求结束时,将tomcat session 更新到memcached,以达到主备同步之目的。 Stick模式就是前端的loadbanlence 能保证每个用户的请求都路由到同一个tomcat上。

  

   Non-Sticky模式:tomcat session 为中转sessionmemcached1为主sessionmemcache 2 为备session Request 请求到来时,从memcached 2 中加载session tomcat(当容器中还是没有session 则从memcached1 加载主session tomcat,这中情况是只有一个memcached节点,或者有memcached1出错时)Request请求结束时,将tomcat session更新至memcached1 memcached  2 中,并清除tomcat session。以达到主备同步之目。Non-sticky则每一次请求都肯能路由到不同tomcat

     

MSM 特性

支持Tomcat6 tomcat7,支持黏性和非黏性session,无单一故障点

 可处理tomcat 故障转移,memcached 故障转移,插件式session 序列话,允许异步保存session,以提升响应速度,只有当session 有修改时,才会将session写回到memcached

 需要下载觉得jar 包如下:

   kryo-1.03.jar

   kry0-serializers-0.9.jar

   memcached-session-manager-1.6.1.jar

   memcached-session-manager-tc6-1.6.1.jar

   memcached-2.5.jar

   minlog-1.2.jar

   msm-kryo-serializer-1.6.1.jar

   reflectasm-0.9.jar

   spymemcached-2.8.2.jar

 

 配置 sticky

  1 使用默认的sticky sessionkryo序列化方式,基于memcached 的缓存

     需要配置$TOMCAT_HOME/conf/context.xml

       <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

    memcachedNodes="n1:192.168.3.44:11211,n2:192.168.3.44:11212"

    failoverNodes="n1"

    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

/>

开启 tomcat jvmRouter $TOMCAT_HOME/conf/server.xml

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat46">

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat48">

 3 配置spymemcached 日志,在tomcat 启动脚本中添加

       CATALINA_OPTS="-Dnet.spy.log.LoggerImpl=net.spy.memcached.compat.log.SunLogger" 

 4  配置MSM logging,在$TOMCAT_HOME/conf/logging.properties配置文件中添加如下

        ##memcached session manager log level

de.javakaffee.web.msm.level= FINE

# A handler's log level threshold can be set using SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST or ALL

net.spy.memcached.level = WARNING

# To make only the MemcachedConnection less verbose:

#net.spy.memcached.MemcachedConnection.level = WARNING

   

       

 配置non-sticky

配置$TOMCAT_HOME/conf/context.xml

  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

    memcachedNodes="n1:192.168.3.44:11211,n2:192.168.3.44:11212"

    sticky="false"

    lockingMode="auto"

    requestUriIgnorePattern=".*\.(ico|png|gif|jps|css|js)$"

    sessionBackupAsync="flase"    sessionBackupTimeout="1000"    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

   /> 

 2 配置spymemcached 日志,在tomcat 启动脚本中添加

       CATALINA_OPTS="-Dnet.spy.log.LoggerImpl=net.spy.memcached.compat.log.SunLogger"

   3  配置MSM logging,在$TOMCAT_HOME/conf/logging.properties配置文件中添加如下

   ##memcached session manager log level

de.javakaffee.web.msm.level= FINE

# A handler's log level threshold can be set using SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST or ALL

net.spy.memcached.level = WARNING

# To make only the MemcachedConnection less verbose:

#net.spy.memcached.MemcachedConnection.level = WARNING

 

注:参考的blog

   http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration

   http://miwucc.iteye.com/blog/1329729

   http://gong1208.iteye.com/blog/1596120

 










本文转自 freehat08 51CTO博客,原文链接:http://blog.51cto.com/freehat/970343,如需转载请自行联系原作者
目录
相关文章
|
存储 负载均衡 NoSQL
Tomcat 9.X(9.0.74)集群实现Session共享(基于redisson)
本文主要介绍了tomcat集群环境下基于redis+Redisson实现session共享,分享给大家,供广大从业者学习和参考。
12489 4
|
应用服务中间件 容器
Tomcat的Session过期处理策略
Tomcat的Session过期处理策略
124 0
|
应用服务中间件 容器
Tomcat设置session超时的几种方式
Tomcat设置session超时的几种方式
479 0
|
负载均衡 NoSQL Java
基于redis 的tomcat session 同步
这里我把Redis放在/XX/下,所以在该目录下执行下列命令: $ wget http://download.redis.io/releases/redis-3.2.1.tar.gz $ tar xzf redis-3.2.1.tar.gz $ cd redis-3.2.1 $ make
177 0
|
负载均衡 Java 应用服务中间件
tomcat集群下的session共享和负载均衡(memcache实现)
tomcat集群下的session共享和负载均衡(memcache实现)
142 0
|
负载均衡 NoSQL Java
tomcat集群下的session共享和负载均衡(redis实现)
tomcat集群下的session共享和负载均衡(redis实现)
278 0
|
NoSQL Java 应用服务中间件
tomcat集群使用redis实现session共享
tomcat集群使用redis实现session共享
321 0
|
存储 负载均衡 NoSQL
tomcat集群环境下如何保证session一致性
tomcat集群环境下如何保证session一致性
288 0
tomcat集群环境下如何保证session一致性
|
NoSQL 应用服务中间件 Redis
tomcat redis session共享的解决方案SessionListener不执行
tomcat redis session共享的解决方案SessionListener不执行
109 0
|
NoSQL Java 应用服务中间件
tomcat redis session共享报错 lassNotFoundException: org.apache.commons.pool.impl.GenericObjectPool$Confi
tomcat redis session共享报错 lassNotFoundException: org.apache.commons.pool.impl.GenericObjectPool$Confi
154 0