Tomcat集群配置学习篇-----分布式应用css
现目前基于javaWeb开发的应用系统已经比比皆是,尤为是电子商务网站,要想网站发展壮大,那么必然就得可以承受住庞大的网站访问量;你们知道若是服务器访问量过大,就会出现服应用务器崩溃的状况,这个时候怎么办,难道就只能去重启服务器吗?好,若是是通常的小型公益网站到也无所谓,但若是是好比像大型航空公司售票等电子商务网站,天天每小时都有大量的订单业务,若是这些售票系统一旦崩溃后,再去重启,这些时间和客户的损失就直接会影响到航空公司的利益,这些损失如何去避免呢。html
别担忧,不论是目前IBM的webSphere仍是大众化的tomcat服务器,都为咱们提供了一种通用的解决方式,就是多台服务器来分担访问量,这样在一个服务器上的压力就会减少不少,你能够根据本身的需求去配置任意多的服务器来支撑你的应用系统,若是一台服务崩溃了,那么另外的应用服务器依然能够继续支持应用继续服务。多应用服务器的简单流程图大体以下:java
为了实现这个原理咱们就须要解决两个问题:web
1:如何实现多应用服务器间的session共享:(一台服务器崩溃,另一台服务器能够继续支持)apache
2:如何分发请求到各个应用服务器实现压力分解:(这里的解决方案是用apache作 web服务器)tomcat
下面咱们就是实际行动来看看如何实现这种实现。服务器
环境配置:session
App应用服务器apache-tomcat-7.0.52-1 app
web服务器:apache的apache 2.0.55负载均衡
Java环境:jdk1.6
系统环境:winxp系统
1) web服务器配置
首先安装apache的web服务器:
apache服务器和tomcat的链接方法其实有三种:mod_JK、http_proxy和ajp_proxy。
一:软件环境
1. Apache: apache 2.0.55 (由http://httpd.apache.org/进入下载)(点击下载apache 2.0.55)
2. Tomcat: apache-tomcat-7.0.52-1
3. mod_jk: 在页面 http://tomcat.apache.org/ Download 标题下找到 Tomcat Connectors 连接进入(点击下载mod_jk-apache-2.0.55.so),看起来像是个Unix/Linux下的动态库,实际应是个Win32 的 DLL 动态库,大概是为保持不一样平台配置的一致性,才用了这个扩展名。
二:负载均衡
用Apache进行分流,把请求按照权重以及当时负荷分tomcat1,tomcat2...去处理
1. 安装apache,tomcat
我把Apache安装在D:/Apache Group/Apache2
解压两分Tomcat, 分别在 D:/Apache Group/apache-tomcat-7.0.52-1,D:/Apache Group/apache-tomcat-7.0.52-1
2.修改Apache配置文件http.conf
在apache安装目录下conf目录中找到http.conf,在文件最后加上下面一句话就能够了
include conf/mod_jk.conf
3. http.conf 同目录下新建mod_jk.conf文件,内容以下
若是还要指定*.do也进行分流就再加一行
JkMount /*.do controller
若是你想对全部的请求进行分流只须要写成
JkMount /* controller
4. 在http.conf同目录下新建 workers.properties文件
5. 修改tomcat配置文件server.xml
若是你是水平集群,即在不一样电脑上安装tomcat,tomcat的安装数量为一个,能够没必要修改tomcat配置文件.我这里是在同一台电脑上安装两个tomcat,实现的是垂直集群方式,因此必须修改其中一个的设置,以免端口冲突,按照参考文章是把原来以9开头的端口号改成以9开头端口号,可是在我机器上若是以9开头的端口号,例如9080、9082会与个人WebSphere Application Server配置冲突,因此我这里采起的策略是把原来端口号的第三位改成1,如8080改成8180。
打开tomcat2/conf/server.xml文件
1) 将关闭Tomcat的监听端口改为由8005改成8105
即把
<Server port="8005" shutdown="SHUTDOWN">
改成
<Server port="8105" shutdown="SHUTDOWN">
2) 把http服务端口号由8080改成8180
找到
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<CONNECTOR port="8080"
把这里的8080改成8180
3) 把AJP端口号由8009改成8109
找到
<!-- Define an AJP 1.3 Connector on port 8009 -->
<CONNECTOR port="8009"
把这里的8009改成8109
4) 把 HTTP 代理端口从8082改成8182(这个配置默认是被注释掉的,可跳过这一步)
找到
<CONNECTOR port="8082"
把这里的8082改成8182
5) 编写一个测试 jsp
创建一个目录TestCluster,里面新建一个test.jsp,内容为
把TestCluster放到tomcat1,tomcat2的webapps下
6) 启动apache,tomcat1,tomcat2,进行测试
经过 http://localhost/TestCluster/test.jsp 访问,多刷新几回页面,查看Tomcat1和Tomcat2的窗口,你将能够看到打印了一行行"===========================",而且从统计上来讲,大约在tomcat2打印的数量是在Tomcat1中的两倍,能够看到请求会被tomcat1,tomcat2按照不一样的权重分流处理,实现了负载均衡。
做下面的集群配置,请在workers.properties把tomcat1和tomcat2的权重改成同样的,使请求较平均分配,将有便于看到实验的效果。
首先配置web应用服务器配置tomcat-A配置
1:修改tomcat的server.xml文件增长以下内容
贴出代码,方便复制:
备注:
1) App应用服务器tomcat-B配置和tomcat-A基本相同,但须要注意的是两台服务器若是在一个电脑上就须要注意端口的冲突问题,好比:tomcat-A的端口是8080,那么tomcat-B就是8081或者其余,其余的以此类推
我这里这里的端口配置以下:
tomcat-1:serverport:8081 ajp/1.3connector:8019 <Server port="8015" shutdown="SHUTDOWN">
tomcat-2:serverport:8082 ajp/1.3connector:8029 <Server port="8025" shutdown="SHUTDOWN">
2) 而后就是新建一个web应用测试一下,在新建应用的web.xml里面须要加上
<distributable/>
3) 到这里就能够测试你的配置了,先启动tomcat-1,而后启动tomcat-2,若是你在两个控制台里面看到相似的以下信息
证实两台应用服务器已经配置完成了。
4) 新建web应用,web.xml配置文件里面须要添加以下内容来配合实现session共享:
<distrbutable/>
而后将应用分别部署到两台服务器,启动两台应用服务器进行测试:
注:因为jsp自带session对象,因此在测试的时候最好把页面自带的session对象关闭后再测试,关闭代码<%@ page session="false"%>
Tomcat-A index.jsp代码:
<body>
This is my JSP page.tomcat-A <br>
<%
HttpSession mysession = request.getSession(false);
if(mysession==null){
mysession = request.getSession(true);
mysession.setAttribute("appname","value-A");
out.println("new session:"+mysession.getId());
}else{
out.println("old session:"+mysession.getId());
}
out.println("appname="+mysession.getAttribute("appname"));
%>
</body>
Tomcat-B index.jsp代码:
<body>
This is my JSP page.tomcat-B<br>
<%
HttpSession mysession = request.getSession(false);
if(mysession==null){
mysession = request.getSession(true);
mysession.setAttribute("appname","value-A");
out.println("new session:"+mysession.getId());
}else{
out.println("old session:"+mysession.getId());
}
out.println("appname="+mysession.getAttribute("appname"));
%>
</body>
5) 分别访问两台服务器:http://172.23.1.46:8081/mycluster
和http://172.23.1.46:8082/mycluster分别访问获得结果以下就证实配置能够了。
访问8081服务器:
页面刷新后结果以下:
访问8082服务器:
页面刷新后结果以下:
到这里tomcat服务器就配置完成了,接下来就须要配置统一入口的负载均衡的web服务器,这里用的是apache 2.2.19(官网上能够直接下载)