Tomcat集配置学习篇-----分布式应用
现目前基于javaWeb开发的应用系统已经比比皆是,尤其是电子商务网站,要想网站发展壮大,那么必然就得能够承受住庞大的网站访问量;大家知道如果服务器访问量过大,就会出现服应用务器崩溃的情况,这个时候怎么办,难道就只能去重启服务器吗?好,如果是一般的小型公益网站到也无所谓,但如果是比如像大型航空公司售票等电子商务网站,每天每小时都有大量的订单业务,如果这些售票系统一旦崩溃后,再去重启,这些时间和客户的损失就直接会影响到航空公司的利益,这些损失如何去避免呢。
别担心,不管是目前IBM的webSphere还是大众化的tomcat服务器,都为我们提供了一种通用的解决方式,就是多台服务器来分担访问量,这样在一个服务器上的压力就会减小很多,你可以根据自己的需求去配置任意多的服务器来支撑你的应用系统,如果一台服务崩溃了,那么另外的应用服务器依然可以继续支持应用继续服务。多应用服务器的简单流程图大致如下:
为了实现这个原理我们就需要解决两个问题:
1:如何实现多应用服务器间的session共享:(一台服务器崩溃,另外一台服务器可以继续支持)
2:如何分发请求到各个应用服务器实现压力分解:(这里的解决方案是用apache做 web服务器)
下面我们就是实际行动来看看如何实现这种实现。
环境配置:
App应用服务器tomcat6.0.16
web服务器:apache的httpd-2.2.19
java环境:jdk1.5
系统环境:winxp系统
首先配置web应用服务器配置tomcat-A配置
1:修改tomcat的l文件增加如下内容
备注:
1) App应用服务器tomcat-B配置和tomcat-A基本相同,但需要注意的是两台服务器如果在一个电脑上就需要注意端口的冲突问题,比如:tomcat-A的端口是8080,那么tomcat-B就是8081或者其他,其他的以此类推
我这里这里的端口配置如下:
tomcat-A:serverport:8082 ajp/1.3connector:8019 httpconnector:8444
receverport:4001
tomcat-B:serverport:8081 ajp/1.3connector:8009 httpconnector:8443
receverport:4002
2) 然后就是新建一个web应用测试一下,在新建应用的l里面需要加上
<distributable/>
3) 到这里就可以测试你的配置了,先启动tomcat-A,然后启动tomcat-B,如果你在两个控制台里面看到类似的如下信息
证明两台应用服务器已经配置完成了。
4) 新建web应用,l配置文件里面需要添加如下内容来配合实现session共享:
<distrbutable/>
然后将应用分别部署到两台服务器,启动两台应用服务器进行测试:
注:由于jsp自带session对象,所以在测试的时候最好把页面自带的session对象关闭后再测试,关闭代码<%@ page session="false"%>
Tomcat-A index.jsp代码:
<body>
This is my at-A <br>
<%
HttpSession mysession = Session(false);
if(mysession==null){
mysession = Session(true);
mysession.setAttribute("appname","value-A");
out.println("new session:"+Id());
}else{
out.println("old session:"+Id());
}
out.println("appname="+Attribute("appname"));
%>
</body>
Tomcat-B index.jsp代码:
<body>
This is my at-B<br>
<%
HttpSession mysession = Session(false);
if(mysession==null){
mysession = Session(true);
mysession.setAttribute("appname","value-A");
out.println("new session:"+Id());
}else{
out.println("old session:"+Id());
}
out.println("appname="+Attribute("appname"));
%>
</body>
5) 分别访问两台服务器:172.23.1.46:8081/mycluster
和172.23.1.46:8082/mycluster分别访问得到结果如下就证明配置可以了。
访问8081服务器:
服务器页面刷新后结果如下:
访问8082服务器:
页面刷新后结果如下:
到这里tomcat服务器就配置完成了,接下来就需要配置统一入口的负载均衡的web服务器,这里用的是apache 2.2.19(上可以直接下载)
6) web服务器配置
首先安装apache的web服务器:
apache服务器和tomcat的连接方法其实有三种:mod_JK、http_proxy和ajp_proxy。本文主要介绍最简单的http_proxy方式的配置,其他的可以自行尝试。
1:到安装目录的conf文件夹,修改f里面
去掉这3行的注释,没有就需要新添加上。
2:在该文件里新增如下内容,有的话就直接修改即可
ProxyRequests Off
ProxyPass /cluster balancer://mycluster lbmethod=byrequests stickysession=jsessionid nofailover=Off timeout=5 maxattempts=3
<!—这里需要注意,没有这句话session就不能共享,网上很多方法都不能解决该问题-->
ProxyPassReverseCookiePath / /cluster
ProxyPassReverse / balancer://mycluster/
<Proxy balancer://mycluster>
BalancerMember 172.23.1.46:8081/mycluster smax=10 max=10 ttl=5 timeout=5 acquire=3 loadfactor=1
BalancerMember 127.23.1.46:8082/mycluster smax=10 max=10 ttl=5 timeout=5 acquire=3 loadfactor=2
</Proxy>
<Location /balancer-manager>
SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from all
</Location>
<Location /server-status>
SetHandler server-status
Order Deny,Allow
Deny from all
Allow from all
</Location>
其中BalancerMember的路径是app应用服务器访问的路径和端口,该web服务器会根据实际访问情况根据自己的一套hash算法把请求分发到配置的两台应用服务器上去。由于这里都是在一个电脑上使用,所以ip相同,但是端口肯定要不一样。
7) 对于apache服务有默认的80端口,如果没有其他应用就可以直接用该端口,有的话可以在f文件里面对其进行修改。
8) 测试web服务器:72.23.1.46/得到结果如下表明web服务器启动成功:
9) 然后进行集成测试,测试路径:72.23.1.46/cluster/ 访问后web服务器就会根据配置,请求会分发到两个服务器中去:(这里只是配置了两个服务器,有需要可以配置多个服
务器)
10) 首先确认应用服务均能正常访问之后,然后集成测试web服务器
11) 第一次访问得到结果如下结果表明正常:
11) 刷新后如果还是访问到tomcat-A的话应该得到结果如下表明正常:
12) 不断刷新当访问到tomcat-B时会得到如下结果:
13) 后面不管怎么刷新,appname的值都不会发生改变。到这里session共享和tomcat 集配置就算完成了。
14) 如果到这里你还不信,你可以关闭一台tomcat服务器,你继续刷新,你会发现session依然是oldsession ,appname的值依然是value-A。
15) 如果第一次访问到tomcat-B的话,后面的结果也是基本上相同的。
由于没有专业的压力测试,所以当访问一次之后,不断的刷新,就会出现两台服务的访问的情况,这里我对两个应用服务器访问的首页有点不同,以便测试。好了,同一个请求就会根据压力的不同被分发到不同的应用服务器里面取了,到这里简单的tomcat集配置和session共享就完成了,以后就可以根据需要配置多台应用服务器来解决压力问题了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论