4.将session存储到memcached中
配置第一台tomcat
[root@node2 local]# vi tomcat/conf/context.xml
memcachedNodes="n1:192.168.1.204:11211" failoverNodes="n1" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> 配置第二台tomcat [root@node3 local]# vi tomcat/conf/context.xml memcachedNodes="n1:192.168.1.204:11211" failoverNodes="n1" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> 下载专用的jar包,并将这些jar包放置在$CATALINA_HOME/lib/ [root@node2 lib]# wget http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/1.8.1/memcached-session-manager-1.8.1.jar [root@node2 lib]# wget http://repo1.maven.org/maven2/net/spy/spymemcached/2.10.2/spymemcached-2.10.2.jar [root@node2 lib]# wget http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc7/1.8.1/memcached-session-manager-tc7-1.8.1.jar 三、memcached支持的序列化参数 1.javolution序列化tomcat配置 conf/context.xml添加 memcachedNodes="n1:192.168.100.208:11211 n2:192.168.100.208:11311" lockingMode="auto" sticky="false" requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$" sessionBackupAsync= "false" sessionBackupTimeout= "100" copyCollectionsForSerialization="true" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" /> 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 2、xstream序列化tomcat配置 conf/context.xml添加 memcachedNodes="n1:192.168.100.208:11211 n2:192.168.100.208:11311" lockingMode="auto" sticky="false" requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$" sessionBackupAsync= "false" sessionBackupTimeout= "100" transcoderFactoryClass="de.javakaffee.web.msm.serializer.xstream.XStreamTranscoderFactory" /> 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 3、flexjson序列化tomcat配置 conf/context.xml添加 memcachedNodes="n1:192.168.100.208:11211 n2:192.168.100.208:11311" lockingMode="auto" sticky="false" requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$" sessionBackupAsync= "false" sessionBackupTimeout= "100" transcoderFactoryClass="de.javakaffee.web.msm.serializer.json.JSONTranscoderFactory" /> 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 4、kryo序列化tomcat配置 conf/context.xml添加 memcachedNodes="n1:192.168.100.208:11211 n2:192.168.100.208:11311" lockingMode="auto" sticky="false" requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$" sessionBackupAsync= "false" sessionBackupTimeout= "100" copyCollectionsForSerialization="true" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> 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一致。 session存储到memchached实现方案时。他主要功能是修改tomcat的session存储机制,使之能够把session序列化存放到memcached中。 Manager标签属性说明 1.className 必须 类名:de.javakaffee.web.msm.MemcachedBackupSessionManager 2.memcachedNodes 必须 memcached节点:此属性应该包含所有运行的memcached节点或者membase bucket的uri地址,每一个memcached节点的属性定义格式为 如果我们配置的是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: 9.requestUriIgnorePattern 可选项 此属性是那些不能改备份Session的请求的正则表达式。如果像css,javascript,图片等静态文件被同一个Tomcat和同一个应用上下文来提供,这些请求也会通过memcached-session-manager。但是这些请求在一个http会话中几乎没什么改变,所以他们没必要触发Session备份。所以那些静态文件没必要触发Session备份,你就可以使用此属性定义。此属性必须符合java regex正则规范。 如:".*\.(png|gif|jpg|css|js)$" 10.sessionBackupAsync 可选项 指定Session是否应该被异步保存到Memcached中。 如果被设置为true,backupThreadCount设置起作用,如果设置false,通过sessionBackupTimeout设置的过期时间起作用。 11.backupThreadCount 可选项 用来异步保存Session的线程数,(如果sessionBackupAsync="true")。默认值为cup的内核数。 12.sessionBackupTimeout 可选项 设置备份一个Session所用的时间,如果操作超过时间那么保存失败。此属性只在sessionBackupAsync="false"是起作用。默认100毫秒 13.operationTimeout 可选项 从1.6.0版开始使用, 默认值为1000 14.sessionAttributeFilter 可选项 此属性是用来控制Session中的那个属性值保存到Memcached中的正则表达式。郑则表达式被用来匹配Session中属性名称。如sessionAttributeFilter="^(userName|sessionHistory)$" 指定了只有"userName"和"sessionHistory"属性保存到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。 将tomcat的session信息保存在memcached中,布布扣,bubuko.com 将tomcat的session信息保存在memcached中 标签:memcached apache tomcat session服务器 session 复制 踩 (0) 赞 (0) 注意点: -msm1.6.5依赖了Couchbase,需要添加couchbase-client的jar包,否则启动会报:java.lang.NoClassDefFoundError: com/couchbase/client/CouchbaseClient。 -tomcat6和7使用不同msm支持包:memcached-session-manager-tc6-1.6.5.jar和memcached-session-manager-tc7-1.6.5.jar,只可选一,否则启动报错。 -msm源码中的lib包版本太低:spymemcached-2.7.jar需要使用2.10.2,否则启动tomcat报错: java.lang.NoSuchMethodError: net.spy.memcached.MemcachedClient.set(Ljava/lang/String;ILjava/lang/Object;)Lnet/spy/memcached/internal/OperationFuture; at de.javakaffee.web.msm.BackupSessionTask.storeSessionInMemcached(BackupSessionTask.java:227) kryo-serializers-0.8.jar需要使用0.10版本,否则报错: Caused by: java.lang.ClassNotFoundException: de.javakaffee.kryoserializers.DateSerializer