tomcat+nginx+memcached+windows session不能共享

困扰我两天了。

使用tomcat7+nginx,实现负载均衡,并且测试通过。
但是session不能够共享,项目登录之后,进行其他操作时候提示登录,说明nginx转发请求到其他tomcat时候,丢失了session。

加入memcached,想要实现session共享。
按照网上的说明配置,启动,但是session并不能实现共享。

下载的jar,拷贝到tomcat/lib下面。
图片说明

memcached下载,安装,启动,tomcat1和tomcat2启动都正常,始终没有报错,但是session就是不能共享。

tomcat/config/context.xml配置如下(tomcat1和tomcat2都相同)

 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" 
        memcachedNodes="n1:127.0.0.1:11211" 
        sticky="false" 
        lockingMode="auto" 
        sessionBackupAsync="false"   
        sessionBackupTimeout="1000"  
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" 
        />

在项目中新建demo.jsp,观察session变化(也是网上的例子)

 <%@ page contentType="text/html;charset=UTF-8" %>   
<%@ page import="java.util.*" %>   
<html><head><title>Cluster Test</title></head>   
<body>   
<%   
  //HttpSession session=request.getSession(true);   
  System.out.println(session.getId());   
  out.println("port:" + request.getLocalPort()  );  
  out.println("<br>SESSION ID:" + session.getId()+"<br>");     
  // 如果有新的请求,则添加session属性   
  String name=request.getParameter("name");   
  if (name != null &&name.length() >0) {   
     String value=request.getParameter("value");   
     session.setAttribute(name, value);   
 }     
    out.print("<b>Session List:</b>");     
    Enumeration<String>names=session.getAttributeNames();   
    while (names.hasMoreElements()) {   
        String sname=names.nextElement();    
        String value=session.getAttribute(sname).toString();   
        out.println( sname + "=" + value+"<br>");   
        System.out.println( sname + "=" + value);   
  }


%>   
</body>   
</html>

测试结果
图片说明
图片说明

做过负载均衡的牛人,请帮我指点一下把。

2个回答

Fry_boy
Fry_boy 我已经试了两天了,网上的例子差不多都试遍了,看来真的要放弃了吗?!
大约 4 年之前 回复
Fry_boy
Fry_boy 我也尝试把这个例子的配置拷贝过来,但是运行时候报错,我用排除法找到报错原因是因为memcachedNodes里面配置了两个 : memcachedNodes = "n1:127.0.0.1:11211 n2:127.0.0.1:11213",报错信息是:java.net.ConnectionException:connect refused: no further infomation. (memcached服务已经打开,本机防火墙也是关闭的)
大约 4 年之前 回复
Fry_boy
Fry_boy 我和这个例子的区别是:1.引入的jar包版本不完全相同;2.memcachedNodes = "n1:127.0.0.1:11211,我只配置了一个,例子上配置了两个。(这一点应该无关紧要)
大约 4 年之前 回复
Fry_boy
Fry_boy 我和这个例子的区别是:
大约 4 年之前 回复

java.net.ConnectionException:connect refused: no further infomation. 错误就是还没有连接上,

Fry_boy
Fry_boy 问题搞定了。我之前的配置没有任何问题,出现问题的原因是,我用来测试的项目是中含有名为“shiro”的权限验证框架,这个框架自己管理session,所以memcached没办法获取session并且管理session,导致的结果就是我之前的现象,启动运行一切正常吗,但是就是没有办法共享session,我自己新建一个最简单的demo,测试通过了。下面要做的就是如何扩展“shiro”框架了。
大约 4 年之前 回复
Fry_boy
Fry_boy 按理说,这几个应用很容易配置,也很容易测试(就简单的测试来说),但是弄了两三天怎么都弄不好,现在打算让另外一位同事也搭建一下这个环境,看看会不会有我的问题。不过还是要谢谢你耐心的解答。
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问