session共享之nginx+tomcat+memcache

环境
centos6.4
nginx :192.168.44.137
tomcat1 :192.168.44.137
tomcat2 :192.168.44.139
memcache
n1:192.168.44.137:12000
n2:192.168.44.137:12001
相关安装包:http://download.csdn.net/detail/tshangshi/9644004

memcahce

1.memcached是基于libevent的,所以确保系统已经装了libevent

# tar -xzvf libevent-2.0.22-stable.tar.gz
# cd libevent-2.0.22-stable
# ./configure –prefix=/usr
# make && make install

2.memcache

# tar -xzvf memcached-1.4.31.tar.gz
# cd memcached-1.4.31
# ./configure –with-libevent=/usr
# make && make install

3.启动

# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.44.137 -p 12000 -c256 -P /tmp/memcached.pid
# netstat tunlp |grep 12000

参数:
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB
-u是运行Memcache的用户
-l是监听的服务器IP地址
-p是设置Memcache监听的端口
-c选项是最大运行的并发连接数,默认是1024
-P是设置保存Memcache的pid文件

Tomcat

1.添加依赖jar包(javolution序列化)
spymemcached-2.10.3.jar
javolution-5.5.1.jar
memcached-session-manager-1.6.5.jar
memcached-session-manager-tc7-1.6.5.jar
msm-javolution-serializer-1.6.5.jar
msm-flexjson-serializer-1.6.5.jar
msm-kryo-serializer-1.6.5.jar
msm-xstream-serializer-1.6.5.jar
2.context.xml
Sticky 模式:tomcat session 为 主session, memcached 为备 session。Request请求到来时, 从memcached加载备 session到 tomcat (仅当tomcat jvmroute发生变化时,否则直接取tomcat session);Request请求结束时,将tomcat session更新至memcached,以达到主备同步之目的。
Non-Sticky模式:tomcat session 为 中转session, memcached1 为主 session,memcached 2 为备session。Request请求到来时,从memcached 2加载备 session 到 tomcat,(当 容器 中还是没有session 则从memcached1加载主 session 到 tomcat, 这种情况是只有一个memcached节点,或者有memcached1 出错时),Request请求结束时,将tomcat session更新至主memcached1和备memcached2,并且清除tomcat session 。以达到主备同步之目的。

Sticky 模式

# vim $TOMCAT_HOME/conf/context.xml
tomcat1

<Manager    className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:192.168.44.137:12000 n2:192.168.44.137:12001"
    failoverNodes="n1"
    requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" 
    copyCollectionsForSerialization="false"
    />

tomcat2

    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:192.168.44.137:12000 n2:192.168.44.137:12001"
    failoverNodes="n2"
    requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" 
    copyCollectionsForSerialization="false"
    />
non-sticky模式
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" 
            memcachedNodes="n1:192.168.44.137:12000" 
            requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$" 
            sessionBackupAsync="false" 
sessionBackupTimeout="3000"                 transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"   
            copyCollectionsForSerialization="false" />
参数:
1.memcachedNodes  
memcached节点:此属性应该包含所有运行的memcached节点或者membase bucket的uri地址,每一个memcached节点的属性定义格式为<id>:<host>:<port>,多个节点定义直接使用空格或者逗号分隔
2.failoverNodes 
故障转移节点:可选项,对非黏性session不可用,属性必须包含memcached节点集群的所有ids。节点id之间用空格或者逗号分隔。
3.sticky
定义session方式为黏性或非黏性,默认为true,(无前端负载均衡)多个tomcat时需使用非黏性
4.lockingMode    
只有非黏性session才使用,默认值为none
none: 从不对session进行锁定
all: session将一直被锁定,知道请求结束
auto: 对于只读请求,session将不会被锁定,如果是非只读请求,则session会被锁定
uriPattern:<regexp>: 通过正则表达式的方式来对请求uri以及查询字符串进行匹配,只有匹配上的才会被锁定。
5.requestUriIgnorePattern   
此属性是那些不能改备份Session的请求的正则表达式。如果像css,javascript,图片等静态文件被同一个Tomcat和同一个应用上下文来提供,这些请求也会通过memcached-session-manager。但是这些请求在一个http会话中几乎没什么改变,所以他们没必要触发Session备份。所以那些静态文件没必要触发Session备份,你就可以使用此属性定义。此属性必须符合java regex正则规范。
6.sessionBackupAsync   
指定Session是否应该被异步保存到Memcached中。 如果被设置为true,backupThreadCount设置起作用,如果设置false,通过sessionBackupTimeout设置的过期时间起作用。
7.sessionBackupTimeout    
设置备份一个Session所用的时间,如果操作超过时间那么保存失败。此属性只在sessionBackupAsync="false"是起作用。默认100毫秒
8.sessionAttributeFilter
此属性是用来控制Session中的那个属性值保存到Memcached中的正则表达式。正则表达式被用来匹配Session中属性名称。如sessionAttributeFilter="^(userName|sessionHistory)$" 指定了只有"userName""sessionHistory"属性保存到Memcached中。依赖于选择的序列化策略。
9.transcoderFactoryClass   
 此属性值是创建序列化和反序列化保存到Memcached中的Session的编码转换器的工厂类名。这个指定的类必须实现了de.javakaffee.web.msm.TranscoderFactory和提供一个无参的构造方法。例如其他的有效的实现在其他packages/jars中提供如:msm-kryo-serializer,msm-xstrea-serializer和msm-javolution-serializer.
默认为 de.javakaffee.web.msm.JavaSerializationTranscoderFactory
10.enabled   
 指定Session保存到Memcached中是否可用和是否可以通过JMX进行改变。只用于粘性Session。 默认值为true
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值