困扰我两天了。
使用tomcat7+nginx,实现负载均衡,并且测试通过。
但是session不能够共享,项目登录之后,进行其他操作时候提示登录,说明nginx转发请求到其他tomcat时候,丢失了session。
加入memcached,想要实现session共享。
按照网上的说明配置,启动,但是session并不能实现共享。
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>
做过负载均衡的牛人,请帮我指点一下把。