1简单介绍
    1.1决定用什么序列化策略。
    1.2配置tomcat
        1.2.1加入 memcached-session-manager jar 包到tomcat中。

        1.2.2加入序列化相关的jar到你项目(可选的)。
        1.2.3配置 memcached-session-manager 作为tomcat <Context>的管理。
        1.2.4memcached-session-manager 配置选项參数介绍。
        1.2.5系统參数配置(都是 可选的)
    1.3配置日志

1简单介绍

最简单的安装方式你须要一个tomcat(6。7。或者8) 和一个 memcached (或者其它支持memcached 协议的)。在实际的产品环境中你可能在一些不同的PC上有多个tomcat 和多个memcached。memcached-session-manager(msm) 支持两种工作模式。sticky sessions(粘性session) 跟 no-sticky sessions(非粘性session);
以下给出一个 sticky sessions 的安装的样例。用到了两个tomcat,两个memcached;
Tomcat-1(t1) 把他的session主要存储在 memcached-2(m2),Tomcat-2则主要存储在 memcached-1(m1),   假设m2假设不能正常工作,t1 将session存储在 memcached-1 (m1 ,m1是t1的 failoverNod).在这个配置下,当两台server中的一台(machine1 上执行着 t1,m1)宕机的时候,session不会丢失, 以下的很美丽的ASCII展示了这个设置;

  <t1>     <t2>
        . \  / .
        .  X  .
       . /   \   .
<m1>  <m2>

所以 ,应该怎么做呢?

...
1.1决定用什么序列化策略.
在序列化策略章节,有几种序列化的策略能够选择.默认的方式是java serialization 这样的方式已经在memcached-session-manager jar包中提供支持.其它的方式在不同的jar包中,在本节中你将看到不同的方式须要哪些jar包.

1.2配置tomcat
配置tomcat须要做两件事 1加入一些jar到你的 $CATALINA_HOME/lib/ 文件夹下,和WEB-/lib/ 文件夹下.2配置你的memcached-session-manager 在<Content> (一般在tomcat安装文件夹的 conf/context.xml)
加入jar包到tomcat

1.2.1依据你选择的序列化策略你须要加入 memcached-session-manager-${version}.jar  还有假设tomcat6 须要memcached-session-manager-tc6-${version}.jar ,tomcat7(tomcat 7 7.0.23+)须要memcached-session-manager-tc7-${version}.jar  ,tomcat8须要memcached-session-manager-tc8-${version}.jar
http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/
http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc6/
http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc7/
http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc8/

假设你用的是memcached 你还须要spymemcached-2.10.2.jar  http://repo1.maven.org/maven2/net/spy/spymemcached/2.10.2/spymemcached-2.10.2.jar

假设你使用 couchbase,你须要添加  couchbase-client-1.2.2.jar  jettison-1.1.jar, commons-codec-1.5.jar, httpcore-4.1.1.jar, httpcore-nio-4.1.1.jar, netty-3.5.5.Final.jar.
http://central.maven.org/maven2/com/couchbase/client/couchbase-client/1.2.2/couchbase-client-1.2.2.jar
http://repo1.maven.org/maven2/org/codehaus/jettison/jettison/1.1/jettison-1.1.jar
http://repo1.maven.org/maven2/commons-codec/commons-codec/1.5/commons-codec-1.5.jar
http://repo1.maven.org/maven2/org/apache/httpcomponents/httpcore/4.1.1/httpcore-4.1.1.jar
http://repo1.maven.org/maven2/org/apache/httpcomponents/httpcore-nio/4.1.1/httpcore-nio-4.1.1.jar
http://repo1.maven.org/maven2/io/netty/netty/3.5.5.Final/netty-3.5.5.Final.jar

请下载合适的jar包放在 $CATALINA_HOME/lib/ 文件夹下.
给你的项目添加风格化的序列化方式(可选的)
假设你想使用java自建的序列化方式就什么都不用做啦,假设想使用不同的序列化方式(能够获得更好一些的性能),须要往你的项目中/WEB-INF/lib 添加一些jar包.

msm (在groupId de.javakaffee.msm)在maven仓库中能够获得.你只须要增依赖管理这在你的项目中,使用maven你能够使用 依赖定义kryo-serializer:

<dependency>
    <groupId>de.javakaffee.msm</groupId>
    <artifactId>msm-kryo-serializer</artifactId>
    <version>1.8.0</version>
    <scope>runtime</scope>
</dependency>

 javolution 的 artifactId是 msm-javolution-serializer, xstream 是msm-xstream-serializer , flexjson 是msm-flexjson-serializer.自行选择..

 假设你没有使用maven,不同的的序列化策略须要不同的jar包
  serializers:
    kryo-serializer: msm-kryo-serializer, kryo-serializers-0.11 (0.11 is needed, as 0.20+ is for kryo2), kryo, minlog, reflectasm, asm-3.2
    http://repo1.maven.org/maven2/com/googlecode/kryo/
    http://repo1.maven.org/maven2/de/javakaffee/kryo-serializers/0.11/
    http://repo1.maven.org/maven2/com/googlecode/kryo/
    http://repo1.maven.org/maven2/com/googlecode/minlog/
    http://repo1.maven.org/maven2/com/googlecode/reflectasm/
    http://repo1.maven.org/maven2/asm/asm/3.2/
    javolution-serializer: msm-javolution-serializer, javolution-5.4.3.1
    http://repo1.maven.org/maven2/de/javakaffee/msm/msm-javolution-serializer/
    http://memcached-session-manager.googlecode.com/svn/maven/javolution/javolution/5.4.3.1/
    xstream-serializer: msm-xstream-serializer, xstream, xmlpull, xpp3_min
    http://repo1.maven.org/maven2/de/javakaffee/msm/msm-xstream-serializer/
    http://repo1.maven.org/maven2/com/thoughtworks/xstream/xstream/
    http://repo1.maven.org/maven2/xmlpull/xmlpull/
    http://repo1.maven.org/maven2/xpp3/xpp3_min/
    flexjson-serializer: msm-flexjson-serializer, flexjson
    http://repo1.maven.org/maven2/de/javakaffee/msm/msm-flexjson-serializer/
    http://repo1.maven.org/maven2/net/sf/flexjson/flexjson/
1.2.3配置 memcached-session-manager 作为<Context> 管理者
更新 <Context>(一般在tomcat 安装文件夹/conf/context.xml 假设你改动过配置文件的位置,自行改动)使Manager 包括memcached-session-manager ,以下给出实例.
以下的配置的样例是sticky sessions ,memcached的non-sticky sessions还有membase的non-sticky sessions。
这个配置假设你有两个memcached分别安装在两台机器上。1个在host1,另一个在host2。

全部的样例都使用 sticky sessions + kryo(序列化)。

sticky sessions + kryo 的样例
以下是tomcat1的配置,假设这个tomcat执行在tomcat1。这台机器同一时候还执行了 memcached "n1". 属性 failoverNodes="n1" 告诉msm 把session主要存储在memcached "n2",当没有其它 memcached node(这里主要指n2) 能够使用的时候才存储在"n1"(假设host1 很不幸运的挂掉了。session 将会继续存储在 memcached "n2" tomcat2 也将继续服务)。第二个tomcat(在host2上)你只须要把failover
node 改为“n2” ,所以他叫喜欢“n2”,其它的东西不用改。

<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>

non-sticky sessions + kryo 样例

non-sticky sessions样例的配置. 在这个样例不须要配置 ,session将会在tomcat之间循环,不会只使用一个tomcat。以下是non-sticky sessions 配置 (全部的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>
 non-sticky sessions with couchbase + kryo 的样例

 假设使用的是 membase 名字叫"bucket1"配置例如以下;

<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>

多个contexts共享session的 执行多个webapps/contexts 共享session (比如 已经设置 sessionCookiePath="/" -or emptySessionPath="true" in tomcat6),当你使用memcached存储session,你必须告诉 memcached session manager 加入一个session前缀,这是你能够使用 storageKeyPrefix属性来设置(具体的设置例如以下):
假设你

<Context sessionCookiePath="/">
  ...
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211"
    failoverNodes="n1"
    storageKeyPrefix="context"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
</Context>

以下的章节是更加具体的配置。

当我们在 Context/Manager 属性中配置了msm ,我们程序的session将会存储在memcached或者membase中。如今你能够做一些測试,关掉tomcat中的一个或者几个,或者重新启动当中的一个 memcached etc, have fun :-) !

1.2.4memcached-session-manager 配置属性概览。
className (必须的)
    这个设置是让 de.javakaffee.web.msm.MemcachedBackupSessionManager 去管理memcached中session的存储。

然而。在1.3.6 版本号以后在开发的过程中另一个de.javakaffee.web.msm.DummyMemcachedBackupSessionManager 能够使用:他不过简单的把session序列化在内存Map中。

当下一次请求到达的时候在反序列化这些数据,不过查看反序列化的作用。

这样的情况下我们的程序还是使用的session,memcached-session-manager(或者
DummyMemcachedBackupSessionManager)将不会有作用。session 的序列化个反序列化将会是同步的。这时的memcachedNodes和failoverNode不会创建一个memcached 端。所以序列化的数据不会存储在memcached,这个时候Memcaches 也不是必须的。

memcachedNodes (必须的)

    这个属性必须包括全部的 memcached nodes或者membase bucket uri(s) ,全部的tomcat都必须配置好。

每个节点用","切割比如对于一个节点来说<id>是可选的(e.g. memcachedNodes="n1:app01:11211,n2:app02:11211"),所以还能够使用<host>:<port>来定义 (e.g. memcachedNodes="localhost:11211"),这样sessionId就不会改变(没有加入node id),这个选项在配置 membase+moxi是很实用的,全部的tomcat只认识一个"memcached"(实际上是moxi)
    memcached nodes:每个memcached node 定义方式为<id>:<host>:<port>.
 
    membase bucket uris (since 1.6.0): 使用membase 必须配置一个或者多个membase bucket uris, 比如 http://host1:8091/pools,http://host2:8091/pools. Bucketusername与password必须通过 username跟password 配置(以下还会讲到)。 连接到 membase 须要一些支持memcached 协议的jar包. 须要把 jettison.jar 跟 netty.jar 放到 CATALINA_HOME/lib/.

failoverNodes (可选的, 在 non-sticky sessions 是不可用的)

    当有其它能够使用的memcache 节点的时候使用。因此你应该列出那些跟你的tomcat在同一台机器上的memcached node比如,host1上安装了tomcat1(t1) memcached1(m1)。host2上安装了tomcat1(t2) memcached1(m2)。你应该设置n1作为tomcat1的failover node.因此当memcached2(tomcat2 failoverNodes 设置为 n2)不能使用的时候tomcat1 的session 只存储在memcached1.
这样的设置当host1宕机的时候tomcat1的session 还是能够继续工作的。

    对于非粘性会话的会话是不依赖于一个单一的tomcat failoverNodes不得指定。

对于membase buckets 这个属性能够省略。

    多个memcached node 必须用空格“  ”或者逗号“,”分隔。

username (1.6.0以后, 可选的)

    membase bucket或者SASL 使用的username,假设memcachedNodes 包括一个(或多个)membase bucket uri,这就是bucket的名称。

假设memcachedNodes 使用了username 给SASL授权。还须要一个memcached 协议的包。

password (1.6.0以后, 可选的)

    membase bucket 或者 SASL 授权密码(假设没有密码默觉得空就好)。

memcachedProtocol (1.3以后, 可选的, 默认值 text)

    使用的memcached的协议, text或者binary.

sticky (1.4.0以后, 可选的, 默认值 true)

    设置 sticky Session 或者 non-sticky Session.

其它可选的配置选项。自己去查吧。

原文https://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration

假设发现错误能够联系我 leihelloworld@163.com

memcached-session-manager 教程实现session共享的更多相关文章

  1. Nginx+Tomcat8+Memcached实现负载均衡及session共享

    1> 基础环境 简易拓扑图: 2> 部署Tomcat [root@node01 ~]# ll -h ~ |egrep 'jdk|tomcat'-rw-r--r-- 1 root root ...

  2. 使用Memcached Session Manager扩展Session管理

    >>Tomcat的session管理 在请求过程中首先要解析请求中的sessionId信息,然后将sessionId存储到request的参数列表中. 然后再从request获取sessi ...

  3. windows使用nginx+memcached实现负载均衡和session或者缓存共享

    windows使用nginx+memcached实现负载均衡和session或者缓存共享 两台server server1:115.29.186.215 windows2008 64位操作系统 ser ...

  4. Tomcat使用Memcached Session Manager管理Session

    Tomcat使用Memcached Session Manager管理Session 废话不多说,直接进入主题.项目使用阿里云负载均衡+ECS服务器集群进行部署,Tomcat使用8.5版本.阿里云负载 ...

  5. [转载]利用memcached在多台服务器之间共享PHP的session数据

    原文地址:利用memcached在多台服务器之间共享PHP的session数据作者:a1049709658 最近我的几篇文章都是是最近项目的一点心得^^ 这个项目一开始就设计的"很大&quo ...

  6. 基于Memcached的tomcat集群session共享所用的jar

    多个tomcat各种序列化策略配置如下:一.java默认序列化tomcat配置conf/context.xml添加<Manager className="de.javakaffee.w ...

  7. 基于Memcached的tomcat集群session共享所用的jar及多个tomcat各种序列化策略配置

    原文:http://www.cnblogs.com/interdrp/p/4096466.html 多个tomcat各种序列化策略配置如下:一.java默认序列化tomcat配置conf/contex ...

  8. 二十一.构建memcached服务、LNMP+memcached、PHP的本地Session信息、PHP实现session共享

    proxy client web1 web2   1.构建memcached服务 ]# yum -y install memcached ]# cat /etc/sysconfig/memcached ...

  9. 【荐】PHP Session和Cookie,Session阻塞,Session垃圾回收,Redis共享Session,不推荐Memcached保存Session

    什么是 Session 在 web 应用开发中,Session 被称为会话.主要被用于保存某个访问者的数据. 由于 HTTP 无状态的特点,服务端是不会记住客户端的,对服务端来说,每一个请求都是全新的 ...

随机推荐

  1. 《转》windows下通过cmd切换python2和python3版本

    当电脑中同时安装了python2和python3时,往往会由切换版本的需求.那么如何通过cmd命令行做到呢? 方法:修改python.exe的文件名 举个栗子: 我的电脑中同时安装了py2.7.10和 ...

  2. 【Spring源码深度解析学习系列】复杂标签属性解析(四)

    一.创建用于属性承载的BeanDefinition BeanDefiniton是一个接口,在Spring中存在三种实现:RootBeanDefinition.ChildBeanDefinition.G ...

  3. JS - 兼容到ie7的自定义样式的滚动条封装

    demo: html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  4. jQuery队列(一)

    jQuery的队列依赖缓存机制事件,它同时是animate的基础. 它不像事件机制.缓存机制.回调机制一样有自己的命名空间,由于比较简单,所以直接挂在到$和jQuery对象上. 它提供的基础方法有: ...

  5. SSH安装篇之——SecureCRT连接(内网和外网)虚拟机中的Linux系统(Ubuntu)

    最近在学习Linux,看了网上很多SecureCRT连接本地虚拟机当中的Linux系统,很多都是需要设置Linux的配置文件,有点繁琐,所以自己就摸索了一下,把相关操作贴出来分享一下. SecureC ...

  6. 题目1016:火星A+B(进制新问题)

    题目链接:http://ac.jobdu.com/problem.php?pid=1016 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  7. LeetCode 31 Next Permutation(下一个全排列)

    题目链接: https://leetcode.com/problems/next-permutation/?tab=Description   Problem :寻找给定int数组的下一个全排列(要求 ...

  8. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十一:PS/2模块⑤ — 扩展鼠标

    实验十一:PS/2模块⑤ — 扩展鼠标 当普通鼠标即三键鼠标再也无法满足需求的时候,扩展鼠标即滚轮鼠标就诞生了,然而实验十一的实验目的就是实现滚轮鼠标的驱动.不过,进入整体之前,先让我们来了解一下鼠标 ...

  9. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十:SDRAM模块③ — 页读写 α

    实验二十:SDRAM模块③ — 页读写 α 完成单字读写与多字读写以后,接下来我们要实验页读写.丑话当前,实验二十的页读写只是实验性质的东西,其中不存在任何实用价值,笔者希望读者可以把它当成页读写的热 ...

  10. Unity3D研究院之将UI的点击事件渗透下去(转)

    转自 http://www.xuanyusong.com/archives/4241 处理UI还有3D模型的点击推荐使用UGUI的这套事件系统,因为使用起来比较简洁,不需要自己用代码来发送射线,并且可 ...