以前的项目使用Nginx作为反向代理实现了多个Tomcat的负载均衡,为了实现多个Tomcat之间的session共享,使用了开源的Memcached-Session-Manager框架。 此框架的优势: 1、支持Tomcat6和Tomcat7 2、操作粘性或不黏性Session 3、没有单点故障 4、Tomcat的故障转移 5、Memcached的故障转移 6、可插拔的Session序列化 7、支持异步保存Session 8、Sessions发送到Memcached如果他确实修改了 9、JMX管理和监控 步骤: 以下操作步骤的前提是你已经安装了,Tomcat和Memcached,和已经配置了Nginx的负载, 如果这些您都没做,请先安装和配置,这些网上有很多,不再多说。 1、下载jar包 下载的jar有: memcached-session-manager-1.5.1.jar, memcached-session-manager-tc6-1.5.1.jar, jar包下载地址:http://code.google.com/p/memcached-session-manager/downloads/list 2、把下载的jar包放到%TOMCAT_HOMT%\lib中。 3、配置%TOMCAT_HOME%\config\context.xml 在Context.xml文件中加入 [html] view plaincopy
- <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配置文件的<Host>...<Host>中添加配置
[html] view plaincopy
-
- <Context docBase="F:/tomcats/tomcat-7.0.2_2/webapps" path= "/msm" reloadable= "true" >
- <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"
- />
- </Context>
4、启动Tomcat查看Session是否共享成功。 1、 session存储到memchached实现方案时。他主要功能是修改tomcat的session存储机制,使之能够把session序列化存放到memcached中。 2、Manager标签属性说明: className 此属性是必须的。 memcachedNodes 此属性是必须的。这个属性必须包含你所有运行的memcached节点。每个节点的定义格式为<id>:<host>:<port>。 多个之间用空格或半角逗号隔开(如:memcachedNodes="n1:localhost:11211,n2:localhost:11212")。 如果你设置单个memcache节点<id>是可选的,所以它允许设置为<host>:<port>(memcachedNodes="localhost:11211")。failoverNodes 可选项,属性只能用在非粘连Session机制中。 此属性必须包含memcached节点的Id,此节点是Tomcat作为备份使用。多个之间用空格或逗号隔开 memcachedProtocol 可选项,默认为text。出属性指明memcached使用的存储协议。只支持text或者binary。 sticky 可选项,默认为true。 指定使用粘性的还是非粘性的Session机制。 lockingMode 可选项, 此属性只对非粘性Session有用,默认为none。 指定非粘性Session的锁定策略。他的只有 (1)、none:从来不加锁 (2)、all: 当请求时对Session锁定,直到请求结束 (3)、auto:对只读的request不加锁,对非只读的request加锁 (4)、uriPattern:<regexp>: 使用正则表达式来比较requestRUI + "?" + queryString来决定是否加锁
|