环境配置:
App应用服务器apache-tomcat-6.0.36
web服务器:apache的httpd-2.2.19
java环境:jdk1.6
系统环境:winxp系统
首先配置web应用服务器配置tomcat-A配置
1:修改tomcat的server.xml文件增加如下内容
1、修改IP地址,如果是不同一台服务器注意修改IP地址
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
2、端口修改
<Server port="9005" shutdown="SHUTDOWN">
<Connector port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8444" /><Connector port="8082" protocol="AJP/1.3" redirectPort="8444" />
注意每个tomcat的port都不能设置为一个,如果是不同的机器,可以设置为上面相同的参数,但是一个server里面不能出现相同的端口
备注:
1) App应用服务器tomcat-B配置和tomcat-A基本相同,但需要注意的是两台服务器如果在一个电脑上就需要注意端口的冲突问题,比如:tomcat-A的端口是8080,那么tomcat-B就是8081或者其他,其他的以此类推
我这里这里的端口配置如下:
tomcat-A:serverport:7777 ajp/1.3connector:8019 httpconnector:8444
receverport:4001
tomcat-B:serverport:8888 ajp/1.3connector:8009 httpconnector:8443
receverport:4002
2) 然后就是新建一个web应用测试一下,在新建应用的web.xml里面需要加上
<distributable/>
3) 新建web应用,web.xml配置文件里面需要添加如下内容来配合实现session共享:
<distrbutable/>
然后将应用分别部署到两台服务器,启动两台应用服务器进行测试:
注:由于jsp自带session对象,所以在测试的时候最好把页面自带的session对象关闭后再测试,关闭代码<%@ page session="false"%>
Tomcat-A index.jsp代码:
<body>
This is my JSP page.tomcat-A <br>
<%
HttpSessionmysession = request.getSession(false);
if(mysession==null){
mysession= request.getSession(true);
mysession.setAttribute("appname","value-A");
out.println("newsession:"+mysession.getId());
}else{
out.println("oldsession:"+mysession.getId());
}
out.println("appname="+mysession.getAttribute("appname"));
%>
</body>
Tomcat-B index.jsp代码:
<body>
This is my JSP page.tomcat-B<br>
<%
HttpSessionmysession = request.getSession(false);
if(mysession==null){
mysession= request.getSession(true);
mysession.setAttribute("appname","value-A");
out.println("newsession:"+mysession.getId());
}else{
out.println("oldsession:"+mysession.getId());
}
out.println("appname="+mysession.getAttribute("appname"));
%>
</body>
5) 分别访问两台服务器:http://localhost:7777/mycluster
和http://localhost :8888/mycluster分别访问得到结果如下就证明配置可以了。
6) web服务器配置
首先安装apache的web服务器:
apache服务器和tomcat的连接方法其实有三种:mod_JK、http_proxy和ajp_proxy。本文主要介绍最简单的http_proxy方式的配置,其他的可以自行尝试。
1:找到安装目录的conf文件夹,修改httpd.conf里面
去掉这3行的注释,没有就需要新添加上。
2:在该文件里新增如下内容,有的话就直接修改即可
ProxyRequestsOff
ProxyPass/cluster balancer://mycluster lbmethod=byrequests stickysession=jsessionid nofailover=Off timeout=5 maxattempts=3
<!—这里需要注意,没有这句话session就不能共享,网上很多方法都不能解决该问题-->
ProxyPassReverseCookiePath / /cluster
ProxyPassReverse/ balancer://mycluster/
<Proxybalancer://mycluster>
BalancerMemberhttp://172.23.1.46:8081/mycluster smax=10 max=10 ttl=5 timeout=5 acquire=3 loadfactor=1
BalancerMemberhttp://127.23.1.46:8082/mycluster smax=10 max=10 ttl=5 timeout=5 acquire=3 loadfactor=2
</Proxy>
<Location/balancer-manager>
SetHandlerbalancer-manager
Order Deny,Allow
Deny from all
Allow from all
</Location>
<Location/server-status>
SetHandlerserver-status
Order Deny,Allow
Deny from all
Allow from all
</Location>
其中BalancerMember的路径是app应用服务器访问的路径和端口,该web服务器会根据实际访问情况根据自己的一套hash算法把请求分发到配置的两台应用服务器上去。由于这里都是在一个电脑上使用,所以ip相同,但是端口肯定要不一样。
对于apache服务有默认的80端口,如果没有其他应用就可以直接用该端口,有的话可以在httpd.conf文件里面对其进行修改。