若是为了简单使用,你只须要安装一个tomcat(6或者7)和memcached,在生产环境中可能会有多台tomcat服务器以及多台可用的memcached节点,并安装在不一样的机器上,咱们能够使用黏性session(sticky sessions)或者非黏性session(non-sticky sessions),memcached-session-manager (msm) 对这两种操做模式都支持。 javascript
下面给出一个黏性session模式的设置示例,此实例中安装了2个tomcat以及2个memcached。 css
Tomcat-1(t1)的首要选择是把session存储在memcached-2 (m2)上(m2是t1的一个普通节点),而m2是运行在另外的一台机器上。只有当m2不可用(宕机或没法访问)时,t1才会把session存储到memcached-1(m1,m1是t1的故障转移节点)上。使用这种配置,即便机器1宕机了session也不会丢失。具体以下图所示: java
咱们如何设置才能实现呢? web
从1.1版开始,MSM就提供了多种可选的session序列化策略,默认的策略是使用java进行序列化,这种实现已经集成在memcached-session-manager.jar包中了,其它的策略则能够经过不一样的jar包来提供实现。在下面的章节中,咱们能够了解到每种策略所须要的jar包具体有哪些。 正则表达式
关于tomcat的配置主要包括两个方面,首先须要下载所须要的包,放到tomcat安装目录下的lib目录下(严格来讲应该是$CATALINA_HOME/lib/)以及咱们应用的WEB-INF/lib/ 目录下,同时还须要修改$CATALINA_HOME/conf/context.xml文件,并在<Context>元素中添加memcached session管理的配置信息。 json
无论你选择哪一种序列化策略,你都须要 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/目录。 tomcat
若是只是使用java序列化的话,那么须要的jar包就是以上所列出的那些了,可是若是想使用自定义的序列化策略(一般性能会更佳),咱们还须要下载相应的jar包并放到咱们webapp下的WEB-INF/lib/目录中。 服务器
若是你的应用使用了maven来进行jar包管理,那么你只须要在pom.xml中加入相应的序列化策略依赖定义就能够了,具体的maven依赖定义以下(任选一种就oK了): session
kryo-serializer: app
javolution:
xstream:
flexjson:
若是咱们不是使用maven仓库来对依赖进行管理的话 ,咱们须要针对每种策略下载单独须要的jar包,具体以下:
处理完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="n1"的做用是告诉msm最好是把session保存在memcached "n2"节点上,只有在n2节点不可用的状况下才把session保存在n1节点。这样即便host1主机宕机,仍然能够经过host2上的tomcat2访问存放在memcached "n2" 节点中的session。
tomcat1 configuration:
以上就是tomcat1的配置信息,对于tomcat2,咱们只须要修改一下failoverNodes属性的值为"n2" ,这样tomcat2就会优先把session存放到memcached "n1"节点,其他配置信息都同样。
下面演示一个非黏性session管理的配置示例,对于非黏性的session管理,咱们不须要配置failoverNodes属性,由于全部sessions在tomcat集群中是循环可见的,并不会绑定到某一个单独的tomcat,对于非黏性session管理,集群中的全部tomcat都是用同一个配置,具体信息以下:
若是是使用membase来对session进行管理,那么则某一个节点的配置以下:
在context.xml中配置完msm以后, 咱们就能够启动咱们的应用程序了,这样全部的session将会根据系统配置存储到指定的memcached节点或者membase中。
className (required)
类名:de.javakaffee.web.msm.MemcachedBackupSessionManager
memcachedNodes (required)
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协议,传输数据经过二进制流方式。
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
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)
序列化接口实现:
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)