TOMCAT5.5集群与负载均衡部署配置文档

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

TOMCAT5.5集群与负载均衡部署配置文档
版本V1.0
目录
1 负载均衡原理和基本特点 (2)
1.1 负载技术 (2)
1.2 技术特点简介 (2)
1.2.1 集群原理 (2)
1.2.2 负载均衡与故障复原 (3)
1.2.3 SESSION复制方式 (3)
2 集群操作说明 (4)
2.1 环境说明 (4)
2.2 安装tomcat (4)
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.1 1同台部署 (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负载均衡与故障复原
决定把Apache httpd当成web服务器,而且使用mod_jk2将请求传送给Tomcat,则可以使用mod_jk2的负载均衡与容错功能。

在集群系统中,带有mod_jk2的Apache httpd可实现以下功能:
(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。

都是Windows Server2003操作系统。

(2)软件:apache2.0.55、tomcat5.5.23、jk2.0.5、jdk1.5
(3)环境配置
2.2 安装tomcat
(1)在三台要安装tomcat的服务器上先安装jdk1.5
(2)配置jdk的安装路径,在环境变量path中加入jdk的bin路径,新建环境变量JA V A_HOME 指向jdk的安装路径。

(3)在三台要安装tomcat的服务器上分别安装tomcat,调试三个tomcat到能够正常启动
(4)tomcat的默认WEB服务端口是8080,默认的模式是单独服务,我的三个tomcat的WEB服务端口修改为81/82/83
修改位置为tomcat的安装目录下的conf/server.xml
修改前的配置为
修改后的配置为
依次修改每个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:\Program
Files\Apache Group\Apache2
(2)安装后测试apache能否正常启动,调试到能够正常启动http://10.0.42.243
(3)下载a mod_jk-1.2.28-httpd-2.2.3.so,重命名为:mod_jk2.so。

地址:
/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:\Program Files\Apache Group\Apache2\modules
2.3 负载均衡配置
(1)分别修改三个tomcat的配置文件conf/server.xml,修改内容如下,红色标记部分。

a)修改前
b)修改后
将三个Tomcat的jvmRoute="jvm1"分别修改为jvmRoute="tomcat1"和jvmRoute="tomcat2"和jvmRoute="tomcat3"
(2)然后重启三个tomcat,调试能够正常启动。

(3)修改Appach配置文件,在apache的安装目录中的conf在apache安装目录下conf目录中找到http.conf 在文件最后添加:
(4) 在apache的安装目录中的conf 新建文件mod_jk.conf文件,内容如下
(5)在apache的安装目录中的conf目录下创建文件workers2.propertie,写入文件内容:
(6)在三个tomcat的安装目录中的webapps建立相同的应用,我和应用目录名为LEAPClient 在三个应用目录中建立相同 WEB-INF目录和页面test.jsp的页面内容如下
(10)重启apache服务器和三个tomcat服务器,到此负载均衡已配置完成。

测试负载均衡先测试apache,访问http://10.0.42.243/test.jsp能否正常访问,并能运行,则已建立负载均衡。

2.4 集群配置
负载均衡配置的条件下配置tomcat集群
(1)分别修改三个tomcat的配置文件conf/server.xml,修改内容如下
修改前
修改后
将集群配置选项的注释放开即可。

修改地址tcpListenAddress="10.0.42.243"。

三个Tomcat 都修改为自己的IP。

2、添加异步负载Session文件
在每个tomcat目录下的conf\Catalina\localhost目录下建立一个ROOT.xml文件,其内容为:<?xml version="1.0" encoding="UTF-8"?>
<Context docBase=" D:\Program Files\Apache Software Foundation\Tomcat
5.5\webapps\LEAPClient "
privileged="true" antiResourceLocking="false" antiJARLocking="false" distributable="true">
</Context>
2.5 应用配置
对于要进行负载和集群的的tomcat目录下的webapps中的应用中的WEB-INF中的web.xml文件要添加如下一句配置
<distributable/>
配置前
配置后
2.6测试结果
2.6.1负载均衡测试
1、打开三个IE窗口分别输入:http://10.0.42.243/LEAPClient/test2.jsp。

分别是访问的是三个不同的tomcat的服务器。

如图APP-01
分别输入Tomcat1的输入名称:T1,值:T1;
分别输入Tomcat2的输入名称:T2,值:T2;
分别输入Tomcat3的输入名称:T2,值:T3;
2、测试test2.jsp页面信息,如图A T-002
图A T- 002 3、三个Tomcat服务段信息
Tomcat1输出信息如图A T-003
Tomcat2输出信息如图A T-004
Tomcat2输出信息如图A T-005
图A T-003
图A T-004
图A T-05
2.6.2集群容错测试
1、关闭Tomcat1,Tomcat2,分别在三个IE 的test.jsp页面输入:分别输入Tomcat1的输入名称:RT1,值:RT1;
分别输入Tomcat2的输入名称:RT2,值:RT2;
分别输入Tomcat3的输入名称:RT2,值:RT3;
测试test2.jsp页面信息如图:图A T-05所示:
图A T-05个
2、Tomcat3输出信息如图A T-006,关闭了两个tomcat服务实例tomcat1,tomcat2(服务器), tomcat1,tomcat2的Session会话信息全部复制到tcmcat1服务实例上面,Session没有丢失。

2.7 备注
2.7.11同台部署
假设同一台机器部署两个Tomcat实例时,基本配置和上文一样:只是修改tomcat的端口就可以了:
1:. 修改apache-tomcat-5.5.25- Tomcat1的connector端口为8091,修改apache-tomcat-5.5.25- Tomcat2的connector的端口为8092,这样是为了避免在同一机器上同时启动时造成访问端口冲突;
2:.修改apache-tomcat-5.5.25- Tomcat2的Server端口为8089,与apache-tomcat-5.5.25- Tomcat1的Server端口8080不一样,也是避免两个tomcat实例启动时造成程序端口的冲突问题;
3:修改apache-tomcat-5.5.25-Tomcat2的AJP/1.3的端口为8019或其他非8009(默认)的端口,也是为了避免与apache-tomcat-5.5.25-Tomcat1的AJP/1.3端口冲突;
2.7.2开放相关端口
开放Tomcat相关访问端口:本次测试,
Tomcat1服务器开放4001,8009,81,80端口。

Tomcat2服务器开放4001,8009,82端口。

Tomcat3服务器开放4001,8009,83端口。

2.7.3中文乱码问题:
1、tomcat设置
URIEncoding='UTF-8' tomcat server.xml
<Connector port="81"
maxHttpHeaderSize="8192"
maxThreads="150"minSpareThreads="25"maxSpareThreads="75"
enableLookups="false"redirectPort="8443"acceptCount="100" connectionTimeout="20000"disableUploadTimeout="true"URIEncoding="UTF-8"/>
2、 Apache 设置
修改http.con 中的默认字体
AddDefaultCharset UTF8。

相关文档
最新文档