TOMCAT55集群与负载均衡部署配置文档.docx
《TOMCAT55集群与负载均衡部署配置文档.docx》由会员分享,可在线阅读,更多相关《TOMCAT55集群与负载均衡部署配置文档.docx(15页珍藏版)》请在冰豆网上搜索。
TOMCAT55集群与负载均衡部署配置文档
TOMCAT5.5集群与负载均衡部署配置文档
版本V1.0
目录
1负载均衡原理和基本特点2
1.1负载技术2
1.2技术特点简介2
1.2.1集群原理2
1.2.2负载均衡与故障复原3
1.2.3SESSION复制方式3
2集群操作说明4
2.1环境说明4
2.2安装tomcat4
2.3负载均衡配置6
2.4集群配置9
2.5应用配置12
2.6测试结果13
2.6.1负载均衡测试13
2.6.2集群容错测试16
2.7备注17
2.7.11同台部署17
2.7.2开放相关端口18
1负载均衡原理和基本特点
1.1负载技术
本方案采用反向代理负载均衡(如Apache+JK2+Tomcat这种组合),就是使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的。
这种代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反向代理模式。
1.2技术特点简介
1.2.1集群原理
Tomcat中的集群原理是通过组播的方式进行节点的查找并使用TCP连接进行会话的复制。
1、集群地址:
集群由多个服务实体组成,集群客户端通过访问集群的集群地址获取集群内部各服务实体的功能。
具有单一集群地址(也叫单一影像)是集群的一个基本特征。
维护集群地址的设置被称为负载均衡器。
负载均衡器内部负责管理各个服务实体的加入和退出,外部负责集群地址向内部服务实体地址的转换。
有的负载均衡器实现真正的负载均衡算法,有的只支持任务的转换。
只实现任务转换的负载均衡器适用于支持ACTIVE-STANDBY的集群环境,在那里,集群中只有一个服务实体工作,当正在工作的服务实体发生故障时,负载均衡器把后来的任务转向另外一个服务实体。
2、内部通信:
为了能协同工作、实现负载均衡和错误恢复,集群各实体间必须时常通信,比如负载均衡器对服务实体信息、服务实体间任务执行上下文信息的通信。
具有同一个集群地址使得客户端能访问集群提供的计算服务,一个集群地址下隐藏了各个服务实体的内部地址,使得客户要求的计算服务能在各个服务实体之间分布。
内部通信是集群能正常运转的基础,它使得集群具有均衡负载和错误恢复的能力。
1.2.2负载均衡与故障复原
决定把Apachehttpd当成web服务器,而且使用mod_jk2将请求传送给Tomcat,则可以使用mod_jk2的负载均衡与容错功能。
在集群系统中,带有mod_jk2的Apachehttpd可实现以下功能:
(1)将请求分配至一个或多个Tomcat实例上你可以在mod_jk2的workers.properties文件中,设定许多Tomcat实例,并赋于每个实例一个lb_factor值,以作为请求分配的加权因子。
(2)侦测Tomcat实例是否失败当Tomcat实例的连接器服务不再响应时,mod_jk2会及时侦测到,并停止将请求送给它。
其他的Tomcat实例则会接受失效实例的负载。
(3)侦测Tomcat实例在失效后的何时恢复因连接器服务失效,而停止将请求分配给Tomcat实例之后,mod_jk2会周期性地检查是否已恢复使用性,并自动将其加入现行的Tomcat实例池中。
1.2.3SESSION复制方式
复合会话复制:
对于tomcat的集群有两种方式,这个主要是针对session而言的。
一种就是sticky模式,即黏性会话模式;另外一种就是session复制模式了。
所谓sticky模式就是说同一个用户的访问请求都被派送到同一个tomcat实例上,这样我们就无须在多台服务器之间实现session共享了,这是其好处,不好的地方就是不能实现failureover了,一旦用户访问的机器挂掉,那么其session就会丢失。
而session复制模式就可以很好的解决failureover的问题,即使某一台web服务器挂掉了,用户的请求还会被负载到其他的web服务器上,而且session也被复制了,这样对用户而言就像是在同一台机器上操作一样,不好的地方就是session复制需要系统资源和网络的开销。
针对这两种方式的弊端和好处,可以采用将两种方式结合的方式来达到更好的效果,那就是sticky+session复制模式了。
用户的请求按照sticky方式被分发到同一个web服务器上,同时tomcat在后台做异步复制(非同步)session到其他web服务器,这样我们使用sticky的简便性,同时又有了一定的容错能力。
、
2集群操作说明
2.1环境说明
(1)服务器有3台,一台安装apache和tomcat,两台安装tomcat。
都是WindowsServer2003操作系统。
(2)软件:
apache2.0.55、tomcat5.5.23、jk2.0.5、jdk1.5
(3)环境配置
序号
局域ip
操作系统
用途
应用软件
1
10.0.42.243
WindowsServer2003中文企业版
对外统一WEB服务器:
tomcat1
Apache和Tomcat服务
3
10.0.42.210
WindowsServer2003中文企业版
Tomcat服务器:
tomcat2
Tomcat服务
2
10.0.42.237
WindowsServer2003中文企业版
Tomcat服务器:
tomcat3
Tomcat服务
2.2安装tomcat
(1)在三台要安装tomcat的服务器上先安装jdk1.5
(2)配置jdk的安装路径,在环境变量path中加入jdk的bin路径,新建环境变量JAVA_HOME指向jdk的安装路径。
(3)在三台要安装tomcat的服务器上分别安装tomcat,调试三个tomcat到能够正常启动
(4)tomcat的默认WEB服务端口是8080,默认的模式是单独服务,我的三个tomcat的WEB服务端口修改为81/82/83
修改位置为tomcat的安装目录下的conf/server.xml
修改前的配置为
maxThreads="150"minSpareThreads="25"maxSpareThreads="75"
enableLookups="false"redirectPort="8443"acceptCount="100"
connectionTimeout="20000"disableUploadTimeout="true"/>
修改后的配置为
maxThreads="150"minSpareThreads="25"maxSpareThreads="75"
enableLookups="false"redirectPort="8443"acceptCount="100"
connectionTimeout="20000"disableUploadTimeout="true"/>
依次修改每个tomcat的监听端口(81/82/83)
(5)分别测试每个tomcat的启动是否正常
http:
//10.0.42.243:
81
http:
//10.0.42.237:
82
http:
//10.0.42.210:
83
(三)安全Appache服务器
(1)安装apache的服务器上安装apache2.0.55,我的安装路径为默认C:
\ProgramFiles\ApacheGroup\Apache2
(2)安装后测试apache能否正常启动,调试到能够正常启动http:
//10.0.42.243
(3)下载amod_jk-1.2.28-httpd-2.2.3.so,重命名为:
mod_jk2.so。
地址:
http:
//www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.28/mod_jk-1.2.28-httpd-2.2.3.so
(4)将解压缩后的目录中的modules目录中的mod_jk.so文件复制到apache的安装目录下的modules目录中,本文为C:
\ProgramFiles\ApacheGroup\Apache2\modules
2.3负载均衡配置
(1)分别修改三个tomcat的配置文件conf/server.xml,修改内容如下,红色标记部分。
a)修改前
--AnEnginerepresentstheentrypoint(withinCatalina)thatprocesses
everyrequest. TheEngineimplementationforTomcatstandalone
analyzestheHTTPheadersincludedwiththerequest,andpassesthem
ontotheappropriateHost(virtualhost).-->
--YoushouldsetjvmRoutetosupportload-balancingviaAJPie:
-->
--Definethetoplevelcontainerinourcontainerhierarchy-->
b)修改后
--AnEnginerepresentstheentrypoint(withinCatalina)thatprocesses
everyrequest. TheEngineimplementationforTomcatstandalone
analyzestheHTTPheadersincludedwiththerequest,andpassesthem
ontotheappropriateHost(virtualhost).-->
--YoushouldsetjvmRoutetosupportload-balancingviaAJPie:
-->
--Definethetoplevelcontainerinourcontainerhierarchy
-->
将三个Tomcat的jvmRoute="jvm1"分别修改为jvmRoute="tomcat1"和jvmRoute="tomcat2"和jvmRoute="tomcat3"
(2)然后重启三个tomcat,调试能够正常启动。
(3)修改Appach配置文件,在apache的安装目录中的conf在apache安装目录下conf目录中找到http.conf在文件最后添加:
include"C:
\ProgramFiles\ApacheGroup\Apache2\conf\mod_jk.conf"
(4)在apache的安装目录中的conf新建文件mod_jk.conf文件,内容如下
#加载mod_jkModule
LoadModulejk_modulemodules/mod_jk-apache-2.0.55.so
#指定workers.properties文件路径
JkWorkersFileconf/workers.properties
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器
JkMount/*.jspcontroller
JkMount/*.htmlcontroller
JkMount/*.actioncontroller
JkMount/*.docontroller
(5)在apache的安装目录中的conf目录下创建文件workers2.propertie,写入文件内容:
worker.list=controller,tomcat1,tomcat3,tomcat2#server列表#========tomcat1========
worker.tomcat1.port=8009#ajp13端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.host=10.0.42.243#tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1#server的加权比重,值越高,分得的请求越多
worker.tomcat2.port=8009
worker.tomcat2.host=10.0.42.210
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
worker.tomcat3.port=8009
worker.tomcat3.host=10.0.42.237
worker.tomcat3.type=ajp13
worker.tomcat3.lbfactor=1
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat3,tomcat2#指定分担请求的tomcat
worker.controller.sticky_session=1#两种方式复制会话。
(6)在三个tomcat的安装目录中的webapps建立相同的应用,我和应用目录名为LEAPClient在三个应用目录中建立相同WEB-INF目录和页面test.jsp的页面内容如下
<%@pagecontentType="text/html;charset=GBK"%>
<%@pageimport="java.util.*"%>
ClusterAppTest
ServerInfo:
<%
out.println(request.getLocalAddr()+":
"+request.getLocalPort()+"
");%>
<%
out.println("
ID"+session.getId()+"
");
//如果有新的Session属性设置
StringdataName=request.getParameter("dataName");
if(dataName!
=null&&dataName.length()>0){
StringdataValue=request.getParameter("dataValue");
session.setAttribute(dataName,dataValue);
}
out.println("Session列表
");
System.out.println("============================");
Enumeratione=session.getAttributeNames();
while(e.hasMoreElements()){
Stringname=(String)e.nextElement();
Stringvalue=session.getAttribute(name).toString();
out.println(name+"="+value+"
");
System.out.println(name+"="+value);
}
%>
名称:
值:
(10)重启apache服务器和三个tomcat服务器,到此负载均衡已配置完成。
测试负载均衡先测试apache,访问http:
//10.0.42.243/test.jsp能否正常访问,并能运行,则已建立负载均衡。
2.4集群配置
负载均衡配置的条件下配置tomcat集群
(1)分别修改三个tomcat的配置文件conf/server.xml,修改内容如下
修改前
--
managerClassName="org.apache.catalina.cluster.session.DeltaManager"
expireSessionsOnShutdown="false"
useDirtyFlag="true"
notifyListenersOnReplication="true">
className="org.apache.catalina.cluster.mcast.McastService"
mcastAddr="228.0.0.4"
mcastPort="45564"
mcastFrequency="500"
mcastDropTime="3000"/>
className="org.apache.catalina.cluster.tcp.ReplicationListener"
tcpListenAddress="auto"
tcpListenPort="4001"
tcpSelectorTimeout="100"
tcpThreadCount="6"/>
className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
replicationMode="pooled"
ackTimeout="5000"/>
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
-->
修改后
--modifybywhh-->
managerClassName="org.apache.catalina.cluster.session.DeltaManager"
expireSessionsOnShutdown="false"
useDirtyFlag="true"
notifyListenersOnReplication="tr