nginx 1.8 +tomcat 7 +memcached 1.4.4实现session共享

1、nginx+tomcat+memcached实现session共享

nginx版本:nginx/1.8.0
tomcat版本:tomcat/7.0_67
jdk版本:java version “1.7.0_67”
memcached版本:memcached/1.4.4

①安装启动memcached

yum install -y memcached
memcached -d -m 128 -u app -p 11211 -c 1024 -P /tmp/memcached.pid
echo ‘memcached -d -m 128 -u app -p 11211 -c 1024 -P /tmp/memcached.pid’ >>/etc/rc.local

②下载所需要的jar包

库包下载地址:http://pan.baidu.com/s/1skijmzz
将以上包下载解压之后放于 tomcat-7.0_67/lib/ 目录下

③修改tomcat的conf/context.xml配置文件,在 中添加如下内容:

<manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" 
        memcachedNodes="n1:server1_ip:11211,n2:server2_ip:11211" 
        sticky="false" 
        memcachedProtocol="binary"
        sessionBackupAsync="false" 
        lockingMode="uriPattern:/path1|/path2" 
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" 
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"></manager>

此处使用的为non-sticky sessions + kryo(非粘滞kryo)模式,另有其他模式,详细可参考官方文档:
https://code.google.com/archive/p/memcached-session-manager/wikis/SetupAndConfiguration.wiki
但是需要注意的是,如果使用交叉存储模式sticky sessions + kryo(粘滞kryo模式)且前端使用的是nginx代理,需要重新编译nginx 添加sticky模块,方可实现session共享。

④启动tomcat服务,如果可以看见
MemcachedSessionService finished initialization, sticky false, operation timeout 1000, with node ids [n1, n2] and failover node ids []则表示tomcat session保存到memcached中已生效。

2、参数配置
①、 session存储到memchached实现方案时。他主要功能是修改tomcat的session存储机制,使之能够把session序列化存放到memcached中。
②、Manager标签属性说明:
className 此属性是必须的。
memcachedNodes 此属性是必须的。这个属性必须包含你所有运行的memcached节点。每个节点的定义格式为::。多个之间用空格或半角逗号隔开
(如:memcachedNodes=”n1:localhost:11211,n2:localhost:11212″)。如果设置单个memcache节点是可选的,所以它允许设置为:(memcachedNodes=”localhost:11211″)。

sticky 可选项,默认为true。指定使用粘性的还是非粘性的Session机制。
failoverNodes 可选项,属性只能用在非粘连Session机制中。此属性必须包含memcached节点的Id,此节点是Tomcat作为备份使用。多个之间用空格或逗号隔开
lockingMode 可选项, 此属性只对非粘性Session有用,默认为none。指定非粘性Session的锁定策略。他的只有
(1)、none:从来不加锁
(2)、all: 当请求时对Session锁定,直到请求结束
(3)、auto:对只读的request不加锁,对非只读的request加锁
(4)、uriPattern:: 使用正则表达式来比较requestRUI + “?” + queryString来决定是否加锁,

memcachedProtocol 可选项,默认为text。出属性指明memcached使用的存储协议。只支持text或者binary。
requestUriIgnorePattern 可选项,此属性是那些不能改备份Session的请求的正则表达式。如果像css,javascript,图片等静态文件被同一个Tomcat和同一个应用上下文来提供,这些请求也会通过memcached-session-manager。但是这些请求在一个http会话中几乎没什么改变,所以他们没必要触发Session备份。所以那些静态文件没必要触发Session备份,你就可以使用此属性定义。此属性必须符合java regex正则规范。

sessionBackupAsync 可选项,默认true,指定Session是否应该被异步保存到Memcached中。 如果被设置为true,backupThreadCount设置起作用,如果设置false,通过sessionBackupTimeout设置的过期时间起作用。
backupThreadCount 可选项,默认为CPU内核数。用来异步保存Session的线程数(如sessionBackupAsync=”true”)。
sessionBackupTimeout 可选项,默认100,单位毫秒,设置备份一个Session所用的时间,如果操作超过时间那么保存失败。此属性只在sessionBackupAsync=”false”是起作用。默认100毫秒

sessionAttributeFilter 可选项 从1.5.0版本有此属性是用来控制Session中的那个属性值保存到Memcached中的正则表达式。正则表达式被用来匹配Session中属性名称。如sessionAttributeFilter=”^(userName|sessionHistory)$” 指定了只有”userName”和”sessionHistory”属性保存到Memcached中。依赖于选择的序列化策略。
transcoderFactoryClass 可选,默认为 de.javakaffee.web.msm.JavaSerializationTranscoderFactory此属性值是创建序列化和反序列化保存到Memcached中的Session的编码转换器的工厂类名。这个指定的类必须实现了de.javakaffee.web.msm.TranscoderFactory和提供一个无参的构造方法。例如其他的有效的实现在其他packages/jars中提供如:msm-kryo-serializer,msm-xstrea-serializer和msm-javolution-serializer.
copyCollectionsForSerialization 可选项,默认false。
customConverter 可选项
enableStatistics 可选项,默认true,用来指定是否进行统计。
enabled 可选项,默认true,指定Session保存到Memcached中是否可用和是否可以通过JMX进行改变。只用于粘性Session。

3、Tomcat的会话超时设置

Tomcat的会话超时可以在多个级别上设置:tomcat实例级别、Web应用级别、servlet级别以及运行时Context代码级别。 较低级别的设定会覆盖较高级别的设定。

Tomcat可以在以下几个地方设置session超时:

① Web容器级别
在conf/web.xml中
Xml代码

<!-- ==================== Default Session Configuration ================= -->  
  <!-- You can set the default session timeout (in minutes) for all newly   -->  
  <!-- created sessions by modifying the value below.                       -->  
  
    <session -config>  
        </session><session -timeout>30</session>  

这里是以分钟为单位的,默认是30分;

② webapp级别
在webapp中的 WEB-INF/web.xml
Xml代码

<!-- 配置Session失效时间 -->  
<session -config>  
        </session><session -timeout>30</session>  

也是以min为单位;

③ 应用程序代码中:硬编码
Java代码
session.setMaxInactiveInterval(30*60);//以秒为单位

优先级,越细粒度优先级越高,也就是3>2>1

④ 还要一种配置,但现在比较少见了,因为需要将Context配置在server.xml里:
这就是修改conf/server.xml
Xml代码

<context path="/test" docBase="/home/httpd/html/test"  
    defaultSessionTimeOut="3600" isWARExpanded="true"  
    isWARValidated="false" isInvokerEnabled="true"  
    isWorkDirPersistent="false"></context>  

单位为秒

附:
重启时保持会话
在关闭Tomcat实例/取消Web应用部署时,缺省会把当前的活动会话保存到硬盘上,并在重启启动/部署时在把会话从硬盘上加载到内存中。
文件保存在各目录下的SESSIONS.SER中。有时可能会话中保存了敏感信息,或者不希望使用这个特 性,可以配置Context.xml文件关闭这个选项。
配置 manager.pathname == “”即可,形如:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值