tomcat&memcached实现session共享

Tomcat:apache-tomcat-7.0.67.tar.gz

memcached:memcached-1.4.25.tar.gz

libevent:libevent-2.0.22-stable.tar.gz

1,memcached安装请参考上一篇文章;

安装所需之lib包

http://pan.baidu.com/s/1bfPIdo

2,测试session 共享之项目依然使用前几篇文章程序;

3,tomcat需要更改以下几个地方:

[root@hnxz-vm-mysql-p01 apache-tomcat-7.0.67]# vim conf/context.xml

 在<Context>属性中增加 

     <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
                memcachedNodes="n1:10.207.238.61:11211"
                sticky="false"
                failoverNodes="n2"
                sessionBackupAsync="false"
                lockingMode="auto"
                requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
                transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"  
                />

memcachedNodes 可以添加多个

暂时没有做到failover 在failover过程中报错 但memcached 就不会出现问题,但存在单点故障;

Jan 14, 2016 11:26:02 AM de.javakaffee.web.msm.LockingStrategy$OnAfterBackupSessionTask call
INFO: Could not store secondary backup of session 1694C94A2A6DEBC4F5D1ED172519184E-n1
java.lang.IllegalArgumentException: The given node id n1 is not part of this list [n2]
at de.javakaffee.web.msm.NodeIdList.getNextNodeId(NodeIdList.java:60)
at de.javakaffee.web.msm.MemcachedNodesManager.getNextAvailableNodeId(MemcachedNodesManager.java:351)
at de.javakaffee.web.msm.SuffixBasedNodeLocator.getNodeId(SuffixBasedNodeLocator.java:110)
at de.javakaffee.web.msm.SuffixBasedNodeLocator.getPrimary(SuffixBasedNodeLocator.java:97)
at net.spy.memcached.MemcachedConnection.addOperation(MemcachedConnection.java:1101)
at net.spy.memcached.MemcachedConnection.enqueueOperation(MemcachedConnection.java:1081)
at net.spy.memcached.MemcachedClient.asyncStore(MemcachedClient.java:315)
at net.spy.memcached.MemcachedClient.add(MemcachedClient.java:812)
at de.javakaffee.web.msm.LockingStrategy$OnAfterBackupSessionTask.pingSessionBackup(LockingStrategy.java:520)
at de.javakaffee.web.msm.LockingStrategy$OnAfterBackupSessionTask.call(LockingStrategy.java:481)
at de.javakaffee.web.msm.LockingStrategy$OnAfterBackupSessionTask.call(LockingStrategy.java:435)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

4,然后启动tomcat测试是否可以session 共享;

5,apache nginx 负载均衡在写出,请参考以前文章;

转载于:https://my.oschina.net/ambari/blog/602197

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nginx+tomcat7+session共享 kryo序列化所需要包 1.将上面所提到的包全部拷贝到tomcat的lib下(三台tomcat都需要) 2.修改每台tomcat的conf目录下得context.xml文件或者server.xml文件,在其中加入如下任意一段代码(注意:当使用多台tomcat时,一定要使用non-sticky模式): <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> Sticky 模式:tomcat session 为 主sessionmemcached 为备 session。Request请求到来时, 从memcached加载备 sessiontomcat (仅当tomcat jvmroute发生变化时,否则直接取tomcat session);Request请求结束时,将tomcat session更新至memcached,以达到主备同步之目的。下面是sticky模式时响应的流程图(图片来源网络): sticky模式 Non-Sticky模式:tomcat session 为 中转sessionmemcached1 为主 sessionmemcached 2 为备session。Request请求到来时,从memcached 2加载备 sessiontomcat,(当 容器 中还是没有session 则从memcached1加载主 sessiontomcat, 这种情况是只有一个memcached节点,或者有memcached1 出错时),Request请求结束时,将tomcat session更新至 主memcached1和备memcached2,并且清除tomcat session 。以达到主备同步之目的,如下是non-sticky模式的响应流程图:(图片来源网络)。 non-sticky

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值