热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MemcacheSessionManager

转自:MSMIntroduction如果为了简单使用,你只需要安装一个tomcat(6或者7)和memcached,在生产环境中可能会有多台tomcat服务器以及多台可用的memc

转自:MSM

Introduction

如果为了简单使用,你只需要安装一个tomcat(6或者7)和memcached,在生产环境中可能会有多台tomcat服务器以及多台可用的memcached节点,并安装在不同的机器上,我们可以使用黏性session(sticky sessions)或者非黏性session(non-sticky sessions),memcached-session-manager (msm) 对这两种操作模式都支持。

下面给出一个黏性session模式的设置示例,此实例中安装了2个tomcat以及2个memcached。

Tomcat-1(t1)的首要选择是把session存储在memcached-2 (m2)上(m2是t1的一个普通节点),而m2是运行在另外的一台机器上。只有当m2不可用(宕机或无法访问)时,t1才会把session存储到memcached-1(m1,m1是t1的故障转移节点)上。使用这种配置,即使机器1宕机了session也不会丢失。具体如下图所示:

《Memcache Session Manager》

我们如何设置才能实现呢?

Decide which serialization strategy to use

从1.1版开始,MSM就提供了多种可选的session序列化策略,默认的策略是使用java进行序列化,这种实现已经集成在memcached-session-manager.jar包中了,其它的策略则可以通过不同的jar包来提供实现。在下面的章节中,我们可以了解到每种策略所需要的jar包具体有哪些。

Configure tomcat

关于tomcat的配置主要包括两个方面,首先需要下载所需要的包,放到tomcat安装目录下的lib目录下(严格来说应该是$CATALINA_HOME/lib/)以及我们应用的WEB-INF/lib/ 目录下,同时还需要修改$CATALINA_HOME/conf/context.xml文件,并在元素中添加memcached session管理的配置信息。

Add memcached-session-manager jars to tomcat

不管你选择哪种序列化策略,你都需要 memcached-session-manager-${version}.jar ,如果你使用的是tomcat6,则还需要下载 memcached-session-manager-tc6-${version}.jar ,如果使用的是tomcat7则下载 memcached-session-manager-tc7-${version}.jar 。同时还需要下载 spymemcached-2.7.3.jar.下载这完这些jar包后把jar包放到 $CATALINA_HOME/lib/目录

Add custom serializers to your webapp (optional)

如果只是使用java序列化的话,那么需要的jar包就是以上所列出的那些了,但是如果想使用自定义的序列化策略(通常性能会更佳),我们还需要下载相应的jar包并放到我们webapp下的WEB-INF/lib/目录中。

如果你的应用使用了maven来进行jar包管理,那么你只需要在pom.xml中加入相应的序列化策略依赖定义就可以了,具体的maven依赖定义如下(任选一种就oK了):

kryo-serializer:

1 <dependency>
2 <groupId>de.javakaffee.msmgroupId>
3 <artifactId>msm-kryo-serializerartifactId>
4 <version>1.6.0version>
5 <scope>runtimescope>
6 dependency>

javolution:

1 <dependency>
2 <groupId>de.javakaffee.msmgroupId>
3 <artifactId>msm-javolution-serializerartifactId>
4 <version>1.6.0version>
5 <scope>runtimescope>
6 dependency>

xstream:

1 <dependency>
2 <groupId>de.javakaffee.msmgroupId>
3 <artifactId>msm-xstream-serializerartifactId>
4 <version>1.6.0version>
5 <scope>runtimescope>
6 dependency>

flexjson:

1 <dependency>
2 <groupId>de.javakaffee.msmgroupId>
3 <artifactId>msm-flexjson-serializerartifactId>
4 <version>1.6.0version>
5 <scope>runtimescope>
6 dependency>

如果我们不是使用maven仓库来对依赖进行管理的话 ,我们需要针对每种策略下载单独需要的jar包,具体如下:

  • kryo-serializer: msm-kryo-serializer, kryo-serializers, kryo, minlog, reflectasm, asm-3.2
  • javolution-serializer: msm-javolution-serializer, javolution-5.4.3.1
  • xstream-serializer: msm-xstream-serializer, xstream, xmlpull, xpp3_min
  • flexjson-serializer: msm-flexjson-serializer, flexjson

Configure memcached-session-manager as  Manager

处理完jar包之后,我们还需要修改 $CATALINA_HOME/conf/context.xml文件中Context节点下的内容,添加memcached-session-manager配置。

下面将会讲解关于tomcat配置的具体的示例,主要包括使用memcached来管理黏性session和非黏性session以及使用membase来管理非黏性session。示例基于的前提是假设我们有2个memcached实例,一个运行在host1主机,另一个运行在host2主机,示例使用的序列化方式为kryo。

下面我们给出tomcat1的配置,假设tomcat1和memcached节点n1都是运行在host1主机上,其中属性failoverNodes=&#8221;n1&#8243;的作用是告诉msm最好是把session保存在memcached &#8220;n2&#8243;节点上,只有在n2节点不可用的情况下才把session保存在n1节点。这样即使host1主机宕机,仍然可以通过host2上的tomcat2访问存放在memcached &#8220;n2&#8221; 节点中的session。

tomcat1 configuration:

1 <Context>
2 ...
3 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
4 memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211"
5 failoverNodes="n1"
6 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
7 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
8 />
9 Context>

以上就是tomcat1的配置信息,对于tomcat2,我们只需要修改一下failoverNodes属性的值为&#8221;n2&#8243; ,这样tomcat2就会优先把session存放到memcached &#8220;n1&#8243;节点,其余配置信息都一样。

下面演示一个非黏性session管理的配置示例,对于非黏性的session管理,我们不需要配置failoverNodes属性,因为所有sessions在tomcat集群中是循环可见的,并不会绑定到某一个单独的tomcat,对于非黏性session管理,集群中的所有tomcat都是用同一个配置,具体信息如下:

1 <Context>
2 ...
3 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
4 memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211"
5 sticky="false"
6 sessionBackupAsync="false"
7 lockingMode="uriPattern:/path1|/path2"
8 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
9 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
10 />
11 Context>

如果是使用membase来对session进行管理,那么则某一个节点的配置如下:

1 <Context>
2 ...
3 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
4 memcachedNodes="http://host1.yourdomain.com:8091/pools"
5 username="bucket1"
6 password="topsecret"
7 memcachedProtocol="binary"
8 sticky="false"
9 sessionBackupAsync="false"
10 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
11 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
12 />
13 Context>

在context.xml中配置完msm之后, 我们就可以启动我们的应用程序了,这样所有的session将会根据系统配置存储到指定的memcached节点或者membase中。

Overview over memcached-session-manager configuration attributes

className (required)

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

memcachedNodes (required)

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

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

failoverNodes (optional, must not be used for non-sticky sessions)

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

username (since 1.6.0, optional)

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

password (since 1.6.0, optional)

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

memcachedProtocol (since 1.3, optional, default text)

定义memcached协议,默认使用text文本

sticky (since 1.4.0, optional, default true)

定义session方式为黏性或非黏性,默认为true

lockingMode (since 1.4.0, optional, for non-sticky sessions only, default none)

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

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

requestUriIgnorePattern (optional)

sessionBackupAsync (optional, default true)

backupThreadCount (since 1.3, optional, default number-of-cpu-cores)

sessionBackupTimeout (optional, default 100)

operationTimeout (since 1.6.0, optional, default 1000)

sessionAttributeFilter (since 1.5.0, optional)

transcoderFactoryClass (since 1.1, optional, default de.javakaffee.web.msm.JavaSerializationTranscoderFactory)

序列化接口实现:

  • Java serialization: de.javakaffee.web.msm.JavaSerializationTranscoderFactory
  • Kryo based serialization: de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory
  • Javolution based serialization: de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory
  • XStream based serialization: de.javakaffee.web.msm.serializer.xstream.XStreamTranscoderFactory

copyCollectionsForSerialization (since 1.1, optional, default false)

customConverter (since 1.2, optional)

enableStatistics (since 1.2, optional, default true)

enabled (since 1.4.0, optional, default true)


推荐阅读
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 标题: ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
author-avatar
CH_Double_C
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有