关于分布式WEB 的session共享(memcached+tomcat)

转载:http://blog.csdn.net/love_ubuntu/article/details/8464983
http://www.2cto.com/os/201405/299934.html

分布式的WEB 的session 共享方式之一。利用mencached,把session序列化,存放在缓存中,实现分布式共享。

1.tomcat 中,需要安装对应相关的JAR包。

memcached-2.6.jar(http://spymemcached.googlecode.com/files/memcached-2.6.jar)

javolution-5.4.3.1.jar

memcached-session-manager-1.5.1.jar

memcached-session-manager-tc7-1.5.1.jar(这个包比较特殊,不同版本的TOMCAT对应不同的JAR包,例如:tomcat6版本的对应:memcached-session-manager-tc6-1.5.1.jar,
tomcat7版本的对应:memcached-session-manager-tc7-1.5.1.jar,)

msm-javolution-serializer-1.5.1.jar

msm-kryo-serializer-1.5.1.jar

msm-xstream-serializer-1.5.1.jar

2.tomcat的配置,配置tomcat. 在%TOMCAT_HOME%\config\context.xml文件中加入】

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  
memcachedNodes="n1:localhost:11211,n2:localhost:11212"            
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js){1}quot; sessionBackupAsync="false" sessionBackupTimeout="1800000" copyCollectionsForSerialization="false" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" /> 

还有说在server.xml中配置的。据说没成功,就不说了。

3.session存储到memchached实现方案时。他主要功能是修改tomcat的session存储机制,使之能够把session序列化存放到memcached中
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都必须配置好。每个节点用”,”分割例如对于一个节点来说是可选的(e.g. memcachedNodes=”n1:app01:11211,n2:app02:11211”),所以还可以使用:来定义 (e.g. memcachedNodes=”localhost:11211”),这样sessionId就不会改变(没有添加node id),这个选项在配置 membase+moxi是非常有用的,所有的tomcat仅仅认识一个”memcached”(实际上是moxi)
memcached nodes:每一个memcached node 定义方式为::.

membase bucket uris (since 1.6.0): 使用membase 必须配置一个或者多个membase bucket uris, 例如 http://host1:8091/pools,http://host2:8091/pools. Bucket用户名和密码必须通过 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.

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

你可能感兴趣的:(关于分布式WEB 的session共享(memcached+tomcat))