Tomcat集群配置笔记 ( by quqi99 )
Tomcat集群配置笔记 ( by quqi99 )作者:张华 发表于:2011-04-06
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明
( http://blog.csdn.net/quqi99 )
h1 { margin-top: 0.6cm; margin-bottom: 0.58cm; line-height: 200%; page-break-inside: avoid; }h1.western { font-family: "Times New Roman",serif; font-size: 22pt; }h1.cjk { font-family: "Arial Unicode MS"; font-size: 22pt; font-style: normal; font-weight: bold; }h1.ctl { font-size: 22pt; font-weight: bold; }h1.样式-标题-1- + -四号-western { font-family: "Times New Roman",serif; font-size: 14pt; line-height: 150%; }h1.样式-标题-1- + -四号-cjk { font-family: "Arial Unicode MS"; font-style: normal; font-weight: bold; line-height: 150%; }h1.样式-标题-1- + -四号-ctl { font-size: 22pt; font-weight: bold; line-height: 150%; }p { margin-bottom: 0.21cm; }a:link { color: rgb(0, 0, 255); }
一.环境说明
1.服务器3台,一台安装apache服务,两台安装tomcat
2.使用到的各个组件及下载地址:
apache_2.2.11-win32-x86-no_ssl.msi
http://httpd.apache.org/download.cgi
tomcat6 压缩版
http://tomcat.apache.org/download-60.cgi
apache的JK连接器(Windows版本),作为apache的一个module,网站同时提供了配置文件的使用方法
mod_jk-1.2.28-httpd-2.2.3.so
http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.28/
3.ip配置
一台安装apache的ip为192.168.1.50,两台安装tomcat的ip分别为192.168.1.24和192.168.1.52(根据各自情况分配)
二.安装过程
1.在两台安装tomcat的机器上安装jdk6(至少jdk5)
2.配置jdk的安装路径,在环境变量path中加入jdk的bin路径,新建环境变量JAVA_HOME指向jdk的安装路径
3.安装tomcat,并测试tomcat的启动是否正常
http://192.168.1.24:8080
http://192.168.1.50:8080
三.负载均衡配置过程
1.在192.168.1.50机器上安装apache服务,我的安装路径默认为:D:/ProgramFiles/Apache Software Foundation/Apache2.2
2.安装完成后测试能否正常启动,http://192.168.1.50,如图所示:
3.将mod_jk-1.2.28-httpd-2.2.3.so拷贝到apache的modules目录下
2.修改apache的配置文件httpd.cof,在最后加上下面这段话:
LoadModulejk_module modules/mod_jk-1.2.28-httpd-2.2.3.so# 载入jk连接器
JkWorkersFileconf/workers.properties# 设置负载均衡的配置文件,即定义均衡规则
JkLogFilelogs/mod_jk.log# 指定日志文件
JkLogLeveldebug # 指定日志级别
#配置apache将哪些请求转发给JK进行均衡
JkMount/*.jsp loadbalancer
JkMount/test/* loadbalancer
3.分别修改两个tomcat的配置文件conf/server.xml文件
修改前:
<!--An Engine represents the entry point (within Catalina) that processes
everyrequest.The Engine implementation for Tomcat stand alone
analyzesthe HTTP headers included with the request, and passes them
onto the appropriate Host (virtual host).
Documentationat /docs/config/engine.html -->
<!--You should set jvmRoute to support load-balancing via AJP ie :
<Enginename="Catalina" defaultHost="localhost"jvmRoute="jvm1">
-->
<Enginename="Catalina" defaultHost="localhost">
修改后:
<!--An Engine represents the entry point (within Catalina) that processes
everyrequest.The Engine implementation for Tomcat stand alone
analyzesthe HTTP headers included with the request, and passes them
onto the appropriate Host (virtual host).
Documentationat /docs/config/engine.html -->
<!--You should set jvmRoute to support load-balancing via AJP ie : -->
<Enginename="Catalina" defaultHost="localhost"jvmRoute="node1">
<Enginename="Catalina" defaultHost="localhost" >
将其中的jvmRoute="jvm1"分别修改为jvmRoute="node1"和jvmRoute="node2"
4.在apache的conf目录下创建workers.property文件,输入以下内容:
#fine the communication channel
#定义负载均衡的所有主机名,和前面tomcat配置文件的JVMroute属性相对应
#其中的loadbalancer是虚拟的主机,负责负载均衡,姑且当成是apache本身
worker.list=node1,node2,loadbalancer
#node1使用AJP与JK通讯
worker.node1.port=8009#工作端口,若没占用则不用修改
worker.node1.host=192.168.1.24# node1的地址为localhost,如果tomcat在其他服务器则输入该服务器的地址
worker.node1.type=ajp13#类型
worker.node1.lbfactor=100#负载平衡因数
worker.node2.port=9009#工作端口,若没占用则不用修改
worker.node2.host=192.168.1.52#node2服务器的地址
worker.node2.type=ajp13#类型
worker.node2.lbfactor=100# 负载因子,值越大则JK分发到此tomcat的负荷越多
#定义loadbalancer类型为“负载均衡器(lb)”
worker.loadbalancer.type=lb
#定义loadbalancer进行负载均衡的对象
worker.loadbalancer.balanced_workers=node1,node2
worker.loadbalancer.sticky_session=false
worker.loadbalancer.sticky_session_force=false
5.在两个tomcat的安装目录中的webapps建立相同的应用,我的应用名为test,在两个应用目录中建立相同WEB-INF目录和页面test.jsp的页面内容如下
<%@pagelanguage="java"contentType="text/html;charset=ISO-8859-1"
pageEncoding="GBK"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=ISO-8859-1">
<title>helloapp</title>
</head>
<body>
<%
System.out.println("calltest.jsp"); //在Tomcat控制台上打印一些跟踪数据
%>
SessionID:<%=session.getId()%>
</body>
</html>
6.重启apache服务器和两个tomcat服务器,到此负载均衡已经配置完成,测试负载均衡:http://192.168.1.50/test/test.jsp,运行正常则已建立负载均衡
四.集群配置
1.负载均衡的条件下配置tomcat集群
2.分别修改两个tomcat的配置文件conf/server.xml,修改内容如下
修改前:
<!--
<ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
修改后:
<ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<ManagerclassName="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"notifyListenersOnReplication="true"/>
<ChannelclassName="org.apache.catalina.tribes.group.GroupChannel">
<Membership
className="org.apache.catalina.tribes.membership.McastService"
bind="192.168.1.100"address="228.0.0.4"port="45564"frequency="500"
dropTime="3000"/>
<Receiver
className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"port="4000"autoBind="100"selectorTimeout="5000"
maxThreads="6"/>
<Sender
className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport
className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor
className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor
className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve"filter=""/>
<ValveclassName="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<DeployerclassName="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"watchEnabled="false"/>
<ClusterListener
className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener
className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
注意:bind是tomcat服务器所在的机器的ip地址
3.重启两个tomcat,到此tomcat的集群配置完成
五.应用配置
对于要进行负载和集群的的tomcat目录下的webapps中的应用中的WEB-INF中的web.xml文件要添加如下一句配置
<distributable/>
配置前:
<?xmlversion="1.0"encoding="UTF-8"?>
<web-appid="WebApp_ID"version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>test</display-name>
<distributable/>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
六.测试集群
重新启动apache服务器和两个tomcat服务器,输入地址:http://192.168.1.50/test/test.jsp
运行结果如下:
如果同一个浏览器的sessionID不变,则集群配置成功
页:
[1]