论坛首页 Java企业应用论坛

Nginx+Tomcat7+Memcached实现tomcat集群和session共享问题

浏览 7778 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-10-15  
     由于最近项目要升级进行负载均衡,网上看了很多文章,确定还是用Nginx+Tomcat+Memcached实现tomcat集群和session共享这种方式来实现。经过网上一些配置参考Demo版本成功了.session也共享成功。
     在满心欢喜的情况下,还以为这么快就搞定了。事实不既然,我把我们web项目部署进去,结果出现很多问题。想必这些问题过来人肯定遇到过。问题如下:
     1.2个tomcat7单独启动,项目部署进去,都可以登录进去并运行。这是我的配置Memcached在tomcat7/conf/context.xml
    
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
	memcachedNodes="n1:localhost:11211"
	requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$"
	sessionBackupTimeout="100"
	transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
	copyCollectionsForSerialization="false"/>

     之前配置多配置了一个sessionBackupAsync="false",老是报出序列化错误
Caused by: com.esotericsoftware.kryo.SerializationException: Unable to serialize object of type: java.util.concurrent.ConcurrentHashMap

     我自己写了一个类注册到 kryo还是报,于是又查找资料,把这个配置sessionBackupAsync="false" 去掉就不报异常。    这属于正常麽。有点疑问?
     有些网上资料说:“多个tomcat必须用采用Non-sticky Session方式”配置加一个sticky="false",这个我加了,结果还是不行。
     2.还以为可以了,结果我2个tomcat一起启动,结果运行http://localhost/XXX,就登陆不进去了,错误也没没有?这是我两个tomcat打印一些信息,如下:


     不知道T神们遇到过这样的问题麽,你们是怎么解决的?求指导一二,欢迎交流下!
  • 大小: 176.4 KB
   发表时间:2014-10-17   最后修改:2014-10-17
采用bboss会话共享可以实现同根域名应用之间sso功能,也可以实现集群节点之间session共享,跨容器(tomcat,weblogic,websphere,jetty等),可以方便地在容器session管理和bboss session管理机制之间来回切换,提供会话管理和监控功能,无需session sticking,相关资料可以查看bboss博文:
bboss session共享架构及特点
bboss会话共享demo使用指南
bboss session共享使用方法介绍

楼主上面提到的问题,在bboss里面通通没有
0 请登录后投票
   发表时间:2014-10-20  
如果是新开发系统,其实基于cookie可能更稳妥一些。
0 请登录后投票
   发表时间:2014-10-22  
最好的方案就是放弃session用会话cookie代替
0 请登录后投票
   发表时间:2014-10-22  
tomcat6正常:
1、Tomcat6目录下\conf\context.xml 加入以下部分
<Context>

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->

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

</Context>

加入相应的jar包 tomcat\lib
memcached-session-manager-1.6.3.jar
memcached-session-manager-tc6-1.6.3.jar
spymemcached-2.8.4.jar
0 请登录后投票
   发表时间:2014-10-22  
在同一台机器上同时启动多个tomcat吗?

需要每个实例配不同的 http连接端口号(默认8080)和管理端口号(默认8009)
否则会冲突。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics