基于nginx的tomcat负载均衡和集群(超简单)
?
今天看到"基于apache的tomcat负载均衡和集群配置"这篇文章成为javaEye热点。
略看了一下,感觉太复杂,要配置的东西太多,因此在这里写出一种更简洁的方法。
?
要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务器即可共享SESSION了。
?
你可以自己写tomcat的扩展来保存SESSION到memcached。
这里推荐使用memcached-session-manager这个开源项目(http://code.google.com/p/memcached-session-manager/),下面简称msm。
如何安装nginx、memcached、tomcat这些就不多说了。
先说明一下测试环境:
tomcat1、nginx、memcached安装在192.168.1.11
tomcat2安装在192.168.1.101
下面分步实现基于nginx的tomcat负载均衡和集群配置
?
一,tomcat集群
??? 1,先下载msm及其依赖包
??? http://memcached-session-manager.googlecode.com/files/memcached-session-manager-1.3.0.jar
?
??? http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-jodatime-1.3.0.jar
?
http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-cglib-1.3.0.jar
?
http://spymemcached.googlecode.com/files/memcached-2.4.2.jar
http://memcached-session-manager.googlecode.com/files/javolution-5.4.3.1.jar
?
2,将这5个包放到$TOMCAT_HOME/lib目录下
3,修改$TOMCAT_HOME/conf/server.xml
?
pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>set page</title>
</head>
<body>
<br/>
<%
session.setAttribute("id", request.getParameter("id"));
%>
<%
System.out.println("set id to " + request.getParameter("id"));
%>
set id to <%=request.getParameter("id")%>
</body>
</html>
get.jsp
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>get page</title>
</head>
<body>
get id is
<%=session.getAttribute("id")%>
<%
System.out.println(session.getAttribute("id"));
%>
</body>
</html>
先对一个tomcat打开set.jsp页面,跟上参数id=1 ,即 http://.../set.jsp?id=1
然后分别打开两个tomcat的get.jsp页面,即 http://.../get.jsp
可以看到session中的值是一样的
接着再对一个tomcat打开set.jsp页面,跟上参数id=2 ,即 http://.../set.jsp?id=2
然后分别打开两个tomcat的get.jsp页面,即 http://.../get.jsp
可以发现一个输出的是1,一个输出的是2
请问这种情况如何解决? pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>set page</title>
</head>
<body>
<br/>
<%
session.setAttribute("id", request.getParameter("id"));
%>
<%
System.out.println("set id to " + request.getParameter("id"));
%>
set id to <%=request.getParameter("id")%>
</body>
</html>
get.jsp
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>get page</title>
</head>
<body>
get id is
<%=session.getAttribute("id")%>
<%
System.out.println(session.getAttribute("id"));
%>
</body>
</html>
先对一个tomcat打开set.jsp页面,跟上参数id=1 ,即 http://.../set.jsp?id=1
然后分别打开两个tomcat的get.jsp页面,即 http://.../get.jsp
可以看到session中的值是一样的
接着再对一个tomcat打开set.jsp页面,跟上参数id=2 ,即 http://.../set.jsp?id=2
然后分别打开两个tomcat的get.jsp页面,即 http://.../get.jsp
可以发现一个输出的是1,一个输出的是2
请问这种情况如何解决?
大哥 看看主题 你这完全违背了楼主的意思 都用memcached缓存了 都是在它上面取 怎么就不一致了 27 楼 dongcb678 2012-05-14 楼主在吗?请教个问题,今天没事测试了一下,遇到了和25楼同样的问题,session不能及时共享,要重启tomcat才行。望解答...
cheng888qi 写道我用lz方法在tomcat-6、nginx-0.8.51
memcache-session-manager用的lz给出的jar包,测试session不能及时共享,tomcat重启时才行。
请问下lz配置成功的环境是什么?是否是tomcat6?