浅析Tomcat Web服务器基于Apache的集群与负载均衡文档格式.docx
《浅析Tomcat Web服务器基于Apache的集群与负载均衡文档格式.docx》由会员分享,可在线阅读,更多相关《浅析Tomcat Web服务器基于Apache的集群与负载均衡文档格式.docx(5页珍藏版)》请在冰豆网上搜索。
![浅析Tomcat Web服务器基于Apache的集群与负载均衡文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/21/e4cba37c-bdf2-4fb2-8819-e360c1692e99/e4cba37c-bdf2-4fb2-8819-e360c1692e991.gif)
上面的问题是在所有WEB系统开发、运行、维护过程中都会碰到的问题。
如果要解决这个问题则首先要采用:
WEB服务器系统集群技术。
采用集群技术之后解决WEB服务器容量带来的巨大挑战,服务器资源终究是有限的,大容量服务器对用户来说是一笔巨大的开支,也无法保障原来的投入,同时也解决不了根本问题。
WEB系统集群技术为系统容量、扩展问题提供了良好的途径,同时又能保护用户的投资,它能把一组服务器通过一定形式组织起来,对外提供强大的服务能力,也能在同一服务器上部署多个相同系统集群充分挖掘服务器的潜力。
这种结构具有很高的性价比和良好的可靠性,并且可以通过增加虚拟服务器与物理服务器的方式不断的扩充系统容量,因此,WEB服务器集群已经成为构建稳定可靠系统的关键技术之一。
2集群与云计算
集群是一个非常专业的学科,专业化的集群需要非常特殊的硬件与软件支持,在复杂的集群中有些几乎需要设置相同的硬件,并且运行特殊的操作系统版本才能保证他们同步。
如果在网络底层进行集群还需要使用特殊的网络适配器来保证集群计算机的高速数据同步,要把不同地区的服务器集群还需要高速专用网络的支持。
数据同步方面,在集群WEB服务器时其中最典型的一点就是服务器间的Session同步问题。
集群对各种条件要求比较高,它能实现高可用性,高稳定性,虚拟存储管理,服务器故障平滑转移及灾难恢复等复杂的应用,但是复杂的集群实现成本非常高,又难以对外提供商业化服务是阻碍其发展的重要原因。
3TOMCAT集群原理
3.1Tomcat集群组件
操作系统:
Windows;
Http服务器:
Apache;
Apache模块:
Mod_JK;
Web服务器:
Tomcat。
3.2Tomcat集群结构
Tomcat集群主要包括三大部分:
Apache、JK、Tomcat,三者之间的关系与处理过程如图1。
4安装运行环境
4.1准备安装软件
windows(本文只测试了windows环境)。
Apache版本为httpd-2.2.21-win32-x86-openssl-0.9.8r.msi,下载地址http:
//httpd.apache.org/.
Mod_JK版本为mod_jk-1.2.31-httpd-2.2.3.so,下载地址http:
//archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/。
注意下载版本JK后所注明的http服务器版本一定要与Apache版本相同或相近。
Tomcat版本这里采用Tomcat5.0.28是比较老的版本,也可以采用5.5.X或6.X等新版本,下载地址http:
//tomcat.apache.org/下载压缩版,这样便于复制安装。
4.2安装Apache
下载完成之后,运行程序安装Apache,只要按默认设置进行安装即可,安装位置可以自己选择,本文安装目录为:
D:
\ProgramFiles\ApacheSoftwareFoundation\Apache2.2。
默认安配置装的Apache是80端口为HTTP端口。
4.3安装Tomcat
本文要集群三个独立的Tomcat,所以把下载后的压缩包解压后复制三份到不同目录,本文目录为:
\Tomcat5.0_8080;
D:
\Tomcat5.0_8081;
\Tomcat5.0_8082。
4.4安装JK组件
以本文为例把JK组件包mod_jk-1.2.31-httpd-2.2.3.so复制到Apache目录D:
\ProgramFiles\ApacheSoftwareFoundation\Apache2.2\modules下。
5TOMCAT负载均衡
5.1Tomcat端口配置
安装环境之后,本文中Apache服务器要与3个Tomcat进行集成,为方便测试3个Tomcat都运行在同一台机器上,为了解决Tomcat端口冲突问题必须重新进行设置,端口分配如表1。
如果三台服务器运行在不同的电脑中则不需要修改。
找到Tomcat配置文件修改端口,Tomcat配置文件目录为Tomcat5.0\conf\server.xml.
依次修改D:
\Tomcat5.0_8080,D:
\Tomcat5.0_8081,D:
\Tomcat5.0_8082中的配置文件,用记事本打开文件直接采用查找替换方式,按上表把原来的四个端口修改成新值。
注意事项:
server.xml配置文件中proxy的8020端口内容是被注释掉的,需要去掉注释。
正常启动后,请注意各服务器的端口是不是正确的配置,如果没问题,则这部分配置顺利完成。
5.2Apache配置
(1)然后找到Apache服务器配置文件D:
\ProgramFiles\ApacheSoftwareFoundation\Apache2.2\conf\httpd.conf.
(2)用记事本打开httpd.conf文件,在最后增加一行代码:
Includeconf/mod-jk.conf.
(3)在httpd.conf文件同目录下创建mod-jk.conf文件。
(4)在httpd.conf文件同目录下创建workers.propertise文件。
完成后启动Apache在状态栏中可看到已集成JK模块,虽然已经看到集成了JK模块,但是还不知道是不是顺利完成了负载均衡配置,下面我们进行测试。
5.3平均请求测试
确保上述步骤操作正确后,接下来部署一下工程进行测试。
(1)部署一个test测试工程。
(2)编写一个jsp测试页。
在test工程的根目录新建一个test.jsp测试文件。
(3)依次启动Apache,Tomcat1,Tomcat3,Tomcat3.
访问测试页http:
//localhost/test/test.jsp,对测试页进行多次访问,本例测试访问6次,每次检查3个Tomcat服务器的控制台窗口,发现一个现象:
如果第一次访问是Tomcat1,第二次变为Tomcat2,第三次则是Tomcat3,第四次又回到Tomcat1,3个服务器是进行轮流处理请求,现在已经实现了负载均衡的目的。
现在已经完成3个WEB服务器负载均衡配置,并且3个服务器是平均分配用户请求。
5.4绑定请求测试
绑定请求方式,就是定义首次请求的服务器为最高优先分配,只要客户没有关闭IE,以后每一次请求都交给同一服务器处理。
这样做的好处是用户只需登录一次,以后都是同一服务器处理,登录Session没有改变,不需要进行再次登录。
打开server.xml找到如图中配置:
&
lt;
Enginename=“Catalina”defaultHost=“localhost”debug=“0”&
gt;
修改成:
Enginename=“Catalina”defaultHost=“localhost”debug=“0”jvmRoute=“tomcat1”&
。
测试的三个服务器的jvmRoute配置名称不能相同,请按下表修改(如表2)。
配置完成后,依次启动Apache,Tomcat1,Tomcat3,Tomcat3访问测试页http:
//localhost/test/test.jsp
注意:
Tomcat1,Tomcat3,Tomcat3的名称在必须与workers.propertise文件里的名称配对。
第一次访问如图2,SessionId与前面的不一样,在后面增加了Tomcat1的名称。
第二次访问如图3,明显可以看出是访问同一服务器,并且SessionId都相同。
经过测试,在没有关闭IE的情况下多次访问都是提交给同一服务器处理,并且SessionId保持不变,其它的服务器没有接到请求,为了验证多用户情况,又重新打开一个新的IE,发现新IE请求交给了Tomcat2处理,并且新IE多次刷新请求后,仍然是交给Tomcat2处理。
到现在Tomcat负载均衡配置已顺利完成,下面讲述怎么样把这三个独立的WEB服务器进行集群。
6TOMCAT集群
虽然上面已经完成了负载均衡,但是三个服务器还是独立工作,没有形成一个整体,他们之间没有同步数据,基本的Session也没有复制,如果其中一个服务器关闭,请求会转发到另一个活动的服务器,新的服务器是没有原来的Session数据,客户必须再次登录,这种情况不能在实际应用发生,要解决这个问题,需要用到Web服务器集群来实现Session在所有服务器上同步复制。
6.1Apache配置
在上一节中Apache基本已经配置完成,这里不需要再修改,最主要的是配置workers.propertise文件,这里只对重要的部分进行说明。
配置是否使用粘性Session的选项:
worker.controller.sticky_session。
类似帮定,指某web服务器产生的Session,在下次客户用相同Session再访问服务器时仍然转发到相同的web服务器(必须指定好web服务器路由配置才行)。
配置是否约束Session复制:
worker.controller.sticky_session_force。
两者的组合关系如表3所示。
配置session的复制后某台机器发起的session会广播给其他tomcat,每个tomcat都保留一份相同的未结束的session,此参数很耗费资源,所以web服务器之间的网络速度超快超好,尽量把服务器放置在同一个局域网内,以提高同步速度。
6.2Tomcat配置
Tomcat服务器主要是启用集群模块,打开Tomcat服务器配置文件server.xml,找到内容:
ClusterclassName=“org.apache.catalina.cluster.tcp.SimpleTcpCluster”开头的部分,打开注释以便启用集群功能,修改集群tcpListenPort端口值,如果三台服务器运行在不同的电脑中则不需要修改,下面是3个web服务器集群端口的配置值(如表4)。
6.3测试工程配置
修改测试工程下面的web.xml文件(注意:
是部署的工程中的WEB-INF\web.xml文件),在&
web-app&
节点中加入一行配置:
distributable/&
6.4集群之后测试
依次启动Apache,Tomcat1,Tomcat3,Tomcat3访问测试页http:
//localhost/test/test.jsp,访问结果如图4,这次连接的是8080端口的服务器。
假如8080端口的服务器,由于某种原因崩溃(测试时我们手动关闭8080服务器),如果再次刷新网页访问服务器,这次连接的是8082端口服务器,我们来看看测试图。
由于8080服务器已经关闭,请求转发到8082服务器,但是Session仍然是一样的!
这证明服务器实现了集群,服务器上的Session已同步复制。
经过反复测试可以确定web服务器集群配置成功。
参考文献
[1]陈菁菁.Tomcat原理与JavaWeb系统开发[M].清华大学出版社,2009,8.
[2]布里泰恩,达尔文,吴豪,等.Tomcat权威指南(第2版)[M].中国电力出版社,2009,9.
[3]帕派佐格罗(MichaelP.Papazoglou),龚玲,张云涛.Web服务:
原理和技术.
[4]顾宁,刘家茂,柴晓路.WebServices原理与研发实践.
[5]俄尔(ThomasErl),AnishKarmarkar,PriscillaWalmsley.SOAWebService合约设计与版本化.