apache+tomcat实现session共享
Posted laosun0204
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了apache+tomcat实现session共享相关的知识,希望对你有一定的参考价值。
tomcat1(worker2)配置
ps:在之前搭建好的apache+tomcat负载均衡的基础上来配置session共享,之前是在root目录下,用rz命令上传一个7版本的tomcat,然后解压生成一个文件夹,改名为worker2,再拷贝一个为worker3
1、进入这个页面,点击红框中的链接
弹出页面,在页面中找到如下的内容:
上图中红框里的内容要修改为虚机IP:192.168.2.199,其他默认保持不变
2、然后在worker2里面开启<Cluster>集群设置,在worker2/conf目录下vi server.xml,找到如下的内容:
默认是注释的,不做任何修改,将上图里的代码复制到它的下面,然后保存并退出,配置完之后如下:
tomcat2(worker3)配置和tomcat1(worker2)配置一样,就是有几处需要修改和注意:
address需要改为虚机IP:192.168.2.199
port要和tomcat1(worker2)的端口不一样
配置完之后保存并退出,此处无截图(和上面的差不多)
在/worker2/webapps/test1/WEB-INF文件夹下用rz上传已经创建好的web.xml文件
加入标签
<distributable/>
直接加在</web-app>之前就可以了
worker3中重复worker2的操作
做tomcat集群必须需要这一步,否则用户的session就无法正常使用
注意事项:
1、
castAddr="224.0.0.1"这主广播地址因此需要开启网卡组播功能
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0(只运行一次)
2、
测试广播:
首先将tomcat-replication.jar上传到root目录下,在root目录下先后执行下面的命令:
java -cp tomcat-replication.jar MCaster 224.0.0.1 45564 Terminal1
java -cp tomcat-replication.jar MCaster 224.0.0.1 45564 Terminal2
如果不报错则能正常广播,执行结果如下图,应该是通了
测试集群及session同步:
在root/worker2/webapps/test1目录下创建一个ss.jsp文件
文件内容如下:
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
String dataName = request.getParameter("dataName");
session.setAttribute("myname","session?");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session P±?b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="index.jsp" method="POST">
3?<input type=text size=20 name="dataName">
<br>
?:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>
<%=request.getRealPath("") %>
最后一句的意思是每次打开页面时,后台走的是哪个tomcat,把上面的代码粘贴到ss.jsp文件里,将红框里的内容替换成ss.jsp,保存并退出
在root/worker3/webapps/test1目录下也创建一个ss.jsp文件,把上面的代码粘贴到ss.jsp文件里,将红框里的内容替换成ss.jsp,保存并退出,保证两个tomcat下都有ss.jsp这个文件
重启两个tomcat,然后在Google浏览器中输入下面的地址:http://192.168.2.199/test1/ss.jsp
在浏览器中显示如下:
刷新页面,再显示如下:
ps:如果出不来上面的内容,肯定要排查apache和tomcat,尤其是apache,还是要杀掉所有进程在重新起,tomcat也要重新起,基本就可以搞定了
至此apache+tomcat负载均衡配置session共享成功
以上是关于apache+tomcat实现session共享的主要内容,如果未能解决你的问题,请参考以下文章
linux apache tomcat7集群中session共享失败
nginx+apache+redis实现负载均衡动静分离session共享