声明:本篇文章是根据memcached-session-manager官方配置方法wiki页面翻译整理,关于memcached-session-manager的介绍,具体参见官网:http://code.google.com/p/memcached-session-manager/,也可以参考:http://gong1208.iteye.com/blog/1596120
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也不会丢失。具体如下图所示:
我们如何设置才能实现呢?
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文件,并在<Context>元素中添加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:
- <dependency>
- <groupId>de.javakaffee.msm</groupId>
- <artifactId>msm-kryo-serializer</artifactId>
- <version>1.6.0</version>
- <scope>runtime</scope>
- </dependency>
javolution:
- <dependency>
- <groupId>de.javakaffee.msm</groupId>
- <artifactId>msm-javolution-serializer</artifactId>
- <version>1.6.0</version>
- <scope>runtime</scope>
- </dependency>
xstream:
- <dependency>
- <groupId>de.javakaffee.msm</groupId>
- <artifactId>msm-xstream-serializer</artifactId>
- <version>1.6.0</version>
- <scope>runtime</scope>
- </dependency>
flexjson:
- <dependency>
- <groupId>de.javakaffee.msm</groupId>
- <artifactId>msm-flexjson-serializer</artifactId>
- <version>1.6.0</version>
- <scope>runtime</scope>
- </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 <Context> 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="n1"的作用是告诉msm最好是把session保存在memcached "n2"节点上,只有在n2节点不可用的情况下才把session保存在n1节点。这样即使host1主机宕机,仍然可以通过host2上的tomcat2访问存放在memcached "n2" 节点中的session。
tomcat1 configuration:
- <Context>
- ...
- <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
- memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211"
- failoverNodes="n1"
- requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
- transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
- />
- </Context>
以上就是tomcat1的配置信息,对于tomcat2,我们只需要修改一下failoverNodes属性的值为"n2" ,这样tomcat2就会优先把session存放到memcached "n1"节点,其余配置信息都一样。
下面演示一个非黏性session管理的配置示例,对于非黏性的 session管理,我们不需要配置failoverNodes属性,因为所有sessions在tomcat集群中是循环可见的,并不会绑定到某一个单 独的tomcat,对于非黏性session管理,集群中的所有tomcat都是用同一个配置,具体信息如下:
- <Context>
- ...
- <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
- memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211"
- sticky="false"
- sessionBackupAsync="false"
- lockingMode="uriPattern:/path1|/path2"
- requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
- transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
- />
- </Context>
如果是使用membase来对session进行管理,那么则某一个节点的配置如下:
- <Context>
- ...
- <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
- memcachedNodes="http://host1.yourdomain.com:8091/pools"
- username="bucket1"
- password="topsecret"
- memcachedProtocol="binary"
- sticky="false"
- sessionBackupAsync="false"
- requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
- transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
- />
- </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节点的属性定义格式为<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
- none: 从不对session进行锁定
- all: session将一直被锁定,知道请求结束
- auto: 对于只读请求,session将不会被锁定,如果是非只读请求,则session会被锁定
- uriPattern:<regexp>: 通过正则表达式的方式来对请求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)
相关推荐
7. **安装与配置**:在Tomcat7中使用Memcached-session-manager和Kryo,开发者需要下载相应的jar包,将其添加到Tomcat的类路径中,然后在`context.xml`或`server.xml`配置文件中进行相应的配置,指定Memcached服务器...
**memcached-session-manager详解** `memcached-session-manager` 是一个为Java应用服务器,特别是Tomcat设计的组件,用于将Web应用程序的用户会话数据存储在分布式缓存系统中,如Memcached。通过这种方式,它可以...
《基于Tomcat7的Memcached会话管理器详解》 在现代Web应用中,会话管理是不可或缺的一部分,它确保用户在浏览多个页面时能够保持登录状态和其他个性化设置。然而,随着分布式系统的普及,单一服务器的会话管理方式...
### Apache + Tomcat + Memcached 全配置详解 #### 一、环境搭建概述 本文将详细介绍如何在 Ubuntu 操作系统下使用源代码安装并配置 Apache、Tomcat 和 Memcached,实现集群中的 Session 共享与负载均衡。由于采用...
- **配置Tomcat**:在Tomcat的`lib`目录中添加Memcached的JAR依赖,并在`context.xml`中配置`MemcachedBackupSessionManager`,指定节点如`memcachedNodes="n2:localhost:11211"`,以实现Session共享。 3. **...
#### 三、Nginx 配置详解 Nginx 的配置文件通常位于 `/usr/local/webserver/nginx/conf/nginx.conf` 或者类似的路径中。下面是一些关键配置项的解释: 1. **进程配置**: ```nginx worker_processes 8; ``` ...
8. **部署配置**:在Tomcat中启用Memcached支持,通常需要在服务器配置文件(如server.xml)中添加相关的监听器或Valve,以及在Web应用的上下文中配置缓存策略。 综上所述,这个"tomcat6-7+memcached支持jar包"是为...
3. 在Tomcat服务器上配置session的持久化,通常是在web.xml中设置`<session-config>`标签,指定session的存储方式为Memcached。 4. 配置每个Tomcat服务器,使它们能够识别和读取由Nginx转发的带有session信息的请求...
- **修改Tomcat配置**:在server.xml中配置Manager元素,指定session的存储策略和memcached的连接参数。 - **配置Nginx**:在Nginx的配置文件中设置负载均衡策略,可以实现基于session的会话粘滞性(sticky ...
### Linux环境下Memcached安装及配置使用详解 #### 一、Memcached简介 Memcached是一款高性能、分布式内存对象缓存系统,用于加速动态Web应用程序的速度,减轻数据库负担。它通过在内存中缓存数据和对象来减少读取...
- 配置Tomcat:确保Java环境已安装并配置,将MSM相关的jar包放入Tomcat的lib目录,修改Tomcat配置文件(如server.xml)启用AJP协议和MSM。 7. 后续步骤 - 重启Apache和Tomcat服务,确保配置生效。 - 测试集群...
### Linux环境下JDK、Tomcat、MySQL与Memcached的安装部署详解 #### 一、安装JDK 在Linux系统上安装Java Development Kit (JDK) 是进行Java开发的基础步骤之一。 1. **安装JDK(RPM包)** - **步骤1**: 使用`rpm...
**Memcached与Tomcat整合详解** Memcached是一种高性能的分布式内存对象缓存系统,它能够存储数据并提供快速访问,通常用于减轻数据库的负载。在Java应用服务器如Tomcat中集成Memcached,可以显著提高应用的性能和...
### Ubuntu16集成nginx+多个tomcat+memcached文档知识点详解 #### 一、环境搭建概述 本文档主要介绍如何在Ubuntu 16.04系统上集成部署Nginx、多个Tomcat以及Memcached。这是一套常用的Web服务器集群方案,其中...
《JDK、Tomcat、Apache、Memcached及MySQL安装配置详解》 在IT领域,搭建一个包含JDK、Tomcat、Apache、Memcached和MySQL的环境是常见的需求,主要用于开发和部署Java Web应用。以下是对这五个组件的详细安装配置...
**Memcached 完整项目详解** Memcached 是一个高性能、分布式的内存对象缓存系统,用于在应用服务器之间共享数据,减少数据库负载。这个项目包含了 Memcached 的服务端(适用于 Windows)以及 Java 客户端,是开发...
《Memcached Session Manager在Tomcat 8中的应用与配置详解》 Memcached Session Manager是一款针对Tomcat应用服务器的会话管理器,它将Web应用程序的会话数据存储在分布式内存缓存系统——Memcached中,以提高性能...
### Tomcat配置宝典知识点详解 #### Tomcat概述 Tomcat是Apache软件基金会下的Jakarta项目的核心组成部分之一,由Apache、Sun Microsystems等公司和个人共同开发完成。Tomcat因其技术先进性和稳定性而广受好评,...