Memcache 实现tomcat集群session共享

2024-04-05 23:18

本文主要是介绍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.iteye.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="de.javakaffee.web.msm.MemcachedBackupSessionManager"
   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.JavaSerializationTranscoderFactory"    
    />

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="de.javakaffee.web.msm.MemcachedBackupSessionManager"
   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


三、xstream序列化tomcat配置
conf/context.xml添加
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
   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


四、flexjson序列化tomcat配置

conf/context.xml添加

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
   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


五、kryo序列化tomcat配置

conf/context.xml添加

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
   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一致。


配置实例请参考:http://download.csdn.net/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="n1:app01:11211,n2:app02:11211",如果只有单个的memcached节点,则<id>是可选项,只需配置<host>:<port>即可,形如:memcachedNodes="localhost:11211"。

如果我们配置的是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正则规范。

    如:".*\.(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。

这篇关于Memcache 实现tomcat集群session共享的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/878420

相关文章

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

HDFS—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。 配置白名单步骤如下: 1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist 和blacklist文件 (1)创建白名单 [lytfly@hadoop102 hadoop]$ vim whitelist 在whitelist中添加如下主机名称,假如集群正常工作的节

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3