Tomcat集群使一组局域网上的Tomcat实例(称为集群),在用户看起来是单一的服务器,使不同的服务器之间能分布的工作。这就叫负载平衡。集群的实现,可以处理更多的请求,带来更好的性能体验。当然,他还有很多好处,这儿不在详说,本文主要介绍如何简单的搭建一个集群。
下面来看看怎样简单地搭建一个集群。
操作系统:win7 32位
Apache : httpd-2.2.25-win32-x86
mod_jk :mod_jk.so (注意一定要与Apache版本相对应,否则组件加载不成功)
Tomcat:Tomcat7.0.63
总体架构:
Apache web服务器负责处理用户的静态请求(html/jpeg 资源);当用户请求动态资源时,apache通过mod_jk组件,将请求传递给Tomcat实例处理。
具体安装步骤:
(1)Tomcat的安装:
1)新建Tomcat实例3个,其目录结构见图,该文件夹我新建在F盘
2)为3个tomcat实例分别建立自己的启动/停止批处理文件 ,放置于bin目录中。
①Tomcat1实例的start1.bat,具体内容如下:
set CATALINA_BASE = F:\cluster\tomcat1
call startup
Tomcat1实例的stop1.bat ,具体内容如下:
CATALINA_BASE = F:\cluster\tomcat1
call shutdown
②另外两个实例将tomcat1换为2和3 ,即可。
3)更改server.xml文件 ,我的具体配置如下:
server ajp jvmRoute cluster receiver port
==================================================================================================
tomcat1 8005 8109 jvmRoute="tomcat1" 4200
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tomcat2 8105 8209 jvmRoute="tomcat2" 4300
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tomcat3 8205 8309 jvmRoute="tomcat3" 4400
注意:在同一台机器中部署多个tomcat实例时,不能在环境变量中配置CATALINA_BASE属性 ,这样启动时会首先读取该值,导致只能启动一个tomcat实例。
4)启动看能否成功,3个实例同时启动,如下:(注意图中CATALINA_BASE和CATALINA_HOME的目录,正是3个实例的目录)
5 为了能实现负载均衡,还要在 F:\cluster\tomcat1\webapps\examples\WEB-INF (换成自己的目录)目录下的web.xml中添加属性<distributable/>
位置如下:
<display-name>Servlet and JSP Examples</display-name>
<distributable/>
<!-- Define example filters -->
<filter>
<filter-name>Timing filter</filter-name>
<filter-class>filters.ExampleFilter</filter-class>
<init-param>
<param-name>attribute</param-name>
<param-value>filters.ExampleFilter</param-value>
</init-param>
</filter>
(2)Apache的安装:
1)通过镜像文件安装apache,安装后的目录结构如下(无法上传图片,不知咋回事),然后将mod_jk.so组件复制到Modules文件夹中
2)将http_jk.conf 和 workers.propertise 放置在conf文件夹下,并在httpd.conf文件末添加上如下语句:
Include conf/httpd-jk.conf
3)配置http_jk.conf文件
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkMount /examples/jsp/* balancer
4)配置workers.propertise文件
worker.list=balancer
worker.balancer.type=lb
==============
worker.balancer.balance_workers=tomcat1
worker.tomcat1.reference=worker.template
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.port=8109
worker.tomcat1.activation=A
==============
worker.balancer.balance_workers=tomcat2
worker.tomcat2.reference=worker.template
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.port=8209
worker.tomcat2.activation=A
========================
worker.balancer.balance_workers=tomcat3
worker.tomcat3.reference=worker.template
worker.tomcat3.host=localhost
worker.tomcat3.type=ajp13
worker.tomcat3.port=8309
worker.tomcat3.activation=A
(3)测试
1)编写test.jsp 文件,如下:
Tomcat1的:
<html>
<body>
<h1> <font color="red">Session serviced by tomcat1 </font></h1>
<table align="center" border="1">
<tr>
<td>Session ID</td>
<td><%= session.getId() %></td>
<% session.setAttribute("abc","abc");%>
</tr>
<tr>
<td>Created on </td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
tomcat2 的:
<html>
<body>
<h1> <font color="green">Session serviced by tomcat2 </font></h1>
<table align="center" border="1">
<tr>
<td>Session ID</td>
<td><%= session.getId() %></td>
<% session.setAttribute("abc","abc");%>
</tr>
<tr>
<td>Created on </td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
tomcat3的:
<html>
<body>
<h1> <font color="blue">Session serviced by tomcat3 </font></h1>
<table align="center" border="1">
<tr>
<td>Session ID</td>
<td><%= session.getId() %></td>
<% session.setAttribute("abc","abc");%>
</tr>
<tr>
<td>Created on </td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
【注意它们的文件名都相同】
2)文件放置说明
测试文件放置在每个tomcat实例的webapps/examples/jsp 文件夹下
[同时也可利用该文件夹下的index.html文件来测试是否成功]
该目录与httpd-jk.conf 中JkMount /examples/jsp/* balancer 配置的是一样的。否则会出错
测试时,先依次启动各个Tomcat实例,在启动Apache服务器
浏览器中输入:http://localhost/examples/jsp/test.jsp
http://localhost/examples/jsp/test1.jsp
http://localhost/examples/jsp/index.html
测试成功界面:(图片还是不能上传,晕..........)
1)同一个IE浏览器访问,维持同一个会话id ,都在Tomcat2
2)在打开一个google浏览器,会话id为 ,tomcat1
3)不断关掉google浏览器,再次访问,有几次变为了tomcat3