hyzqb 发表于 2015-11-18 11:42:43

Memcache 实现tomcat集群session共享

  MSM(memcached-session-manager) 支持tomcat6 和tomcat7 ,利用 Value(Tomcat 阀)对Request进行跟踪。Request请求到来时,从memcached加载session,Request请求结束时,将tomcat session更新至memcached,以达到session共享之目的, 支持 sticky和 non-sticky 模式。
  Sticky 模式:tomcat session 为 主session, memcached 为备 session。Request请求到来时, 从memcached加载备 session到 tomcat (仅当tomcat jvmroute发生变化时,否则直接取tomcat session);Request请求结束时,将tomcat session更新至memcached,以达到主备同步之目的。
  Non-Sticky模式:tomcat session 为 中转session, memcached1 为主 sessionmemcached 2 为备session。Request请求到来时,从memcached 2加载备 session 到 tomcat,(当 容器 中还是没有session 则从memcached1加载主 session 到 tomcat, 这种情况是只有一个memcached节点,或者有memcached1 出错时),Request请求结束时,将tomcat session更新至主memcached1和备memcached2,并且清除tomcat
session 。以达到主备同步之目的。



参考:http://xylonwang.iyunv.com/blog/1269704

测试:

1.安装memcached

下载:linux:https://code.google.com/p/memcached/downloads/list

(1)前提安装 libevent

yum -y install libevent

(2)安装memcached

下载:wget https://memcached.googlecode.com/files/memcached-1.4.15.tar.gz

mkdir memcached

tar -zxvf memcached-1.4.15.tar.gz

cd memcached-1.4.15

./configure --prefix=/home/zhutw/memcached

make

make install

安装完毕!安装目录/home/zhutw/memcached

启动 memcached 服务器。

cd /home/zhutw/memcached/bin

./memcached -d -m 32 -l 192.168.100.208 -p 11211

./memcached -d -m 32 -l 192.168.100.208 -p 11311

这会以守护程序的形式启动 memcached(-d),为其分配 32MB 内存(-m 32),并指定监听 192.168.100.208,即端口 11211

检查:

telnet 192.168.100.208 11211

telnet 192.168.100.208 11311

已启动。

查看进程




memcached安装配置完毕!
安装配置tomcat7
下载:http://apache.fayea.com/apache-mirror/tomcat/tomcat-7/v7.0.47/bin/apache-tomcat-7.0.47-windows-x64.zip

  下载加jar包:https://code.google.com/p/memcached-session-manager/downloads/list
                          http://repo1.maven.org/maven2/de/javakaffee/msm/
  配置说明:https://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration
  


  多个tomcat各种序列化策略配置如下:
  一、java默认序列化tomcat配置
  conf/context.xml添加
  <Manager className=&quot;de.javakaffee.web.msm.MemcachedBackupSessionManager&quot;

   memcachedNodes=&quot;n1:192.168.100.208:11211 n2:192.168.100.208:11311&quot;   

lockingMode=&quot;auto&quot;

sticky=&quot;false&quot;

requestUriIgnorePattern= &quot;.*\.(png|gif|jpg|css|js)$&quot;   

sessionBackupAsync= &quot;false&quot;   

sessionBackupTimeout= &quot;100&quot;      

transcoderFactoryClass=&quot;de.javakaffee.web.msm.JavaSerializationTranscoderFactory&quot;   

    />


  lib增加jar包:
  spymemcached-2.10.3.jar


  memcached-session-manager-1.7.0.jar


  memcached-session-manager-tc7-1.7.0.jar
  二、javolution序列化tomcat配置
  conf/context.xml添加


  <Manager className=&quot;de.javakaffee.web.msm.MemcachedBackupSessionManager&quot;

   memcachedNodes=&quot;n1:192.168.100.208:11211 n2:192.168.100.208:11311&quot;   

lockingMode=&quot;auto&quot;

sticky=&quot;false&quot;

requestUriIgnorePattern= &quot;.*\.(png|gif|jpg|css|js)$&quot;   

sessionBackupAsync= &quot;false&quot;   

sessionBackupTimeout= &quot;100&quot;

copyCollectionsForSerialization=&quot;true&quot;   

transcoderFactoryClass=&quot;de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory&quot;   

    />
  lib增加jar包
  msm-javolution-serializer-cglib-1.3.0.jar


  msm-javolution-serializer-jodatime-1.3.0.jar


  spymemcached-2.10.3.jar


  javolution-5.4.3.1.jar


  msm-javolution-serializer-1.7.0.jar


  memcached-session-manager-1.7.0.jar


  memcached-session-manager-tc7-1.7.0.jar


  


  三、xstream序列化tomcat配置

conf/context.xml添加

<Manager className=&quot;de.javakaffee.web.msm.MemcachedBackupSessionManager&quot;

   memcachedNodes=&quot;n1:192.168.100.208:11211 n2:192.168.100.208:11311&quot;   

lockingMode=&quot;auto&quot;

sticky=&quot;false&quot;

requestUriIgnorePattern= &quot;.*\.(png|gif|jpg|css|js)$&quot;   

sessionBackupAsync= &quot;false&quot;   

sessionBackupTimeout= &quot;100&quot;

transcoderFactoryClass=&quot;de.javakaffee.web.msm.serializer.xstream.XStreamTranscoderFactory&quot;   

    />

lib增加jar包

xmlpull-1.1.3.1.jar

xpp3_min-1.1.4c.jar

xstream-1.4.6.jar

msm-xstream-serializer-1.7.0.jar

spymemcached-2.10.3.jar

memcached-session-manager-1.7.0.jar

memcached-session-manager-tc7-1.7.0.jar


  


  四、flexjson序列化tomcat配置
  

conf/context.xml添加



<Manager className=&quot;de.javakaffee.web.msm.MemcachedBackupSessionManager&quot;

   memcachedNodes=&quot;n1:192.168.100.208:11211 n2:192.168.100.208:11311&quot;   

lockingMode=&quot;auto&quot;

sticky=&quot;false&quot;

requestUriIgnorePattern= &quot;.*\.(png|gif|jpg|css|js)$&quot;   

sessionBackupAsync= &quot;false&quot;   

sessionBackupTimeout= &quot;100&quot;      

transcoderFactoryClass=&quot;de.javakaffee.web.msm.serializer.json.JSONTranscoderFactory&quot;   

    />

lib增加jar包



flexjson-3.1.jar

msm-flexjson-serializer-1.7.0.jar

spymemcached-2.10.3.jar

memcached-session-manager-1.7.0.jar



memcached-session-manager-tc7-1.7.0.jar






五、kryo序列化tomcat配置


conf/context.xml添加



<Manager className=&quot;de.javakaffee.web.msm.MemcachedBackupSessionManager&quot;

   memcachedNodes=&quot;n1:192.168.100.208:11211 n2:192.168.100.208:11311&quot;   

lockingMode=&quot;auto&quot;

sticky=&quot;false&quot;

requestUriIgnorePattern= &quot;.*\.(png|gif|jpg|css|js)$&quot;   

sessionBackupAsync= &quot;false&quot;   

sessionBackupTimeout= &quot;100&quot;   

copyCollectionsForSerialization=&quot;true&quot;   

transcoderFactoryClass=&quot;de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory&quot;   

    />

lib增加jar包



kryo-1.04.jar

minlog-1.2.jar

asm-3.2.jar



reflectasm-1.01.jar



kryo-serializers-0.11.jar



msm-kryo-serializer-1.7.0.jar



spymemcached-2.10.3.jar

memcached-session-manager-1.7.0.jar



memcached-session-manager-tc7-1.7.0.jar





各种情况配置如上,据说kryo序列化效率比较快,未做测试。

选其一中方式,部署2个tomcat端口分别是8080和8181

启动后,访问刷新SessionID是否一致。

http://127.0.0.1:8080/t.jsp



SessionID:37B7F153AB3567295B2FBF1831475F5F-n1

SessionIP:127.0.0.1

SessionPort:8080







http://127.0.0.1:8181/t.jsp



SessionID:37B7F153AB3567295B2FBF1831475F5F-n1

SessionIP:127.0.0.1

SessionPort:8181



测试结果SessionID一致。





配置实例请参考:http://download.iyunv.com/detail/tianwei7518/6832985








session存储到memchached实现方案时。他主要功能是修改tomcat的session存储机制,使之能够把session序列化存放到memcached中。



Manager标签属性说明
1.className
必须


类名:de.javakaffee.web.msm.MemcachedBackupSessionManager





2.memcachedNodes必须


memcached节点:此属性应该包含所有运行的memcached节点或者membase bucket的uri地址,每一个memcached节点的属性定义格式为<id>:<host>:<port>,多个节点定义直接使用空格或者逗号分隔,形如:memcachedNodes=&quot;n1:app01:11211,n2:app02:11211&quot;,如果只有单个的memcached节点,则<id>是可选项,只需配置<host>:<port>即可,形如:memcachedNodes=&quot;localhost:11211&quot;。

如果我们配置的是membase,那么从1.6.0版本开始,我们可以配置指定一个或者多个membase bucket uris,形如:http://host1:8091/pools,http://host2:8091/pools。Bucket 名称和密码通过属性username,password来定义。membase
buckets连接需要遵循memcached协议,传输数据通过二进制流方式。





3.failoverNodes 可选项

故障转移节点:可选项,对非黏性session不可用,属性必须包含memcached节点集群的所有ids。节点id之间用空格或者逗号分隔。







4.username 可选项

从1.6.0版开始使用,并且是可选的。用来进行membase
bucket或者SASL验证,密码可以为空。







5.password 可选项

从1.6.0版开始使用,并且是可选的。用来进行membase
bucket或者SASL验证,密码可以为空。







6.memcachedProtocol
   可选项

定义memcached协议,默认使用text文本,出属性指明memcached使用的存储协议。只支持text或者binary。





7.sticky
可选项

定义session方式为黏性或非黏性,默认为true,多个tomcat时需使用非黏性







8.lockingMode
可选项



只有非黏性session才使用,默认值为none


[*]none: 从不对session进行锁定
[*]all: session将一直被锁定,知道请求结束
[*]auto: 对于只读请求,session将不会被锁定,如果是非只读请求,则session会被锁定
[*]uriPattern:<regexp>: 通过正则表达式的方式来对请求uri以及查询字符串进行匹配,只有匹配上的才会被锁定。
  

9.requestUriIgnorePattern
可选项





此属性是那些不能改备份Session的请求的正则表达式。如果像css,javascript,图片等静态文件被同一个Tomcat和同一个应用上下文来提供,这些请求也会通过memcached-session-manager。但是这些请求在一个http会话中几乎没什么改变,所以他们没必要触发Session备份。所以那些静态文件没必要触发Session备份,你就可以使用此属性定义。此属性必须符合java
regex正则规范。




如:&quot;.*\.(png|gif|jpg|css|js)$&quot;   





10.sessionBackupAsync
可选项

指定Session是否应该被异步保存到Memcached中。
如果被设置为true,backupThreadCount设置起作用,如果设置false,通过sessionBackupTimeout设置的过期时间起作用。







11.backupThreadCount
可选项

用来异步保存Session的线程数,(如果sessionBackupAsync=&quot;true&quot;)。默认值为cup的内核数。





12.sessionBackupTimeout
可选项

设置备份一个Session所用的时间,如果操作超过时间那么保存失败。此属性只在sessionBackupAsync=&quot;false&quot;是起作用。默认100毫秒







13.operationTimeout
可选项

从1.6.0版开始使用, 默认值为1000







14.sessionAttributeFilter
可选项

此属性是用来控制Session中的那个属性值保存到Memcached中的正则表达式。郑则表达式被用来匹配Session中属性名称。如sessionAttributeFilter=&quot;^(userName|sessionHistory)$&quot;
指定了只有&quot;userName&quot;和&quot;sessionHistory&quot;属性保存到Memcached中。依赖于选择的序列化策略。







15.transcoderFactoryClass
可选项

此属性值是创建序列化和反序列化保存到Memcached中的Session的编码转换器的工厂类名。这个指定的类必须实现了de.javakaffee.web.msm.TranscoderFactory和提供一个无参的构造方法。例如其他的有效的实现在其他packages/jars中提供如:msm-kryo-serializer,msm-xstrea-serializer和msm-javolution-serializer.



默认为 de.javakaffee.web.msm.JavaSerializationTranscoderFactory





16.copyCollectionsForSerialization
可选项

默认值为false。







17.customConverter
可选项



自己定义特殊的类注册到kryo自定义转换器中,实现序列化



18.enableStatistics
可选项

用来指定是否进行统计。 默认值为true。







19.enabled
可选项

指定Session保存到Memcached中是否可用和是否可以通过JMX进行改变。只用于粘性Session。
默认值为true。
页: [1]
查看完整版本: Memcache 实现tomcat集群session共享