2024年3月27日发(作者:)

电脑编程技巧与维护 

TomCat与Apache集成的研究 

孙仁鹏 

(南京信息职业技术学院计算机与软件学院,南京210046) 

摘要:为了提升网站的访问速度和提高稳定性,提出了将Tomcat与Apache集成和集群的解决方案。详细分析了 

方案的工作原理,阐述了方案的具体配置方法和实现细节。 

关键词:Tomcat;Apache;集成;集群 

Research of Tomcat and Apache Integration 

SUN Renpeng 

(Institute of Computer&Software,Nanjing College of Information Technology,Nanjing 210046) 

Abstract:In order tO improve site access speeds and stability,proposed to Tomcat and Apache integration and clustering 

solutions.Detailed analysis of the program works,describes the specific configuration of the program and the implementation 

details. 

Key words:Tomcat;Apache;Integration;Cluster 

既然Tomcat本身已经提供了HTFP服务,为什么还要引 

人与Apache或者其他的一些专门的H,I’I’P服务器集成呢?原 

因: 

AlP是为Tomcat与HTrP服务器之间通信而制定的协议。 

(2)Tomcat服务器通过Connector连接器组件与客户程序 

建立连接,并负责接收客户请求和响应结果。一个连接器是 

H 丌 连接器,负责建立HTI?P连接,这时Tomcat作为独立进 

提升对静态文件的处理性能。 

利用Web服务器来做负载均衡以及容错。 

程内的Servlet容器;一个是AJP连接器,负责与其他HTYP 

服务器建立连接。 

无缝地升级应用程序。 

这三点对一个Web网站来说是非常之重要的,希望网站 

不仅是速度快,而且要稳定,不能因为某个Tomcat宕机或者 

是升级程序导致用户访问不了,而能完成这几个功能的、最 

好的瑚=11P服务器就是Apache,它跟Tomcat的结合是最紧密 

(3)当Apache接收到客户端请求时,会转交给JK插件, 

插件读取相关配置信息,决定是否应把请求转发给Tomcat服 

务器处理。若是,则使用AJP协议进行Apache和Tomcat的 

通信。 

和可靠的。Apache负责静态资源处理,Tomcat负责JSP和 

Servlet等动态资源的处理,因为Tomcat处理静态资源的能力 

不如Apache服务器。 

2 集成方法 

这里假定Apache和Tomcat在同一台机器上,所以监听的 

端口号不能相同。 

(1)环境说明。 

JDK:jdk1.6.o_l0 

Apache:apache2.0.63-win32-x86-noss1.msi 

1 Apache与Tomcat集成原理 

当Tomcat与其他HTTP服务器集成时,Tomcat服务器的 

工作模式为进程外的Servlet容器,与其他HTrP服务器的通 

_

信通过专门的插件来完成,其工作原理如图l所示。 

Tomcat,apache-tomcat-6 0 16,z 

ModjK:mod_ik一1.2.27一httpd一2.0.63.SO 

(2)安装Tomcat。安装JDK,解压Tomcat压缩文件,假 

定解压后的目录为C:\Tomcat。在操作系统中创建两个系统环 

境变量JAVA HOME和CATALINA—HOME,值分别为JDK的 

安装目录和Tomcat的安装目录。 

(3)安装Apache Web服务器。如果不能安装,使用 

netstat—anb指令查看80端口号是否已经被占用,并将有关进 

程关闭。若安装成功,输入http://localhost可以看到Apache的 

测试页面。 

(4)在Apache服务器的modules目录下放人JK插件文 

图1 Tomcat与Apache集成原理 

说明: 

作者简介:孙仁鹏(1972一),男,硕士,讲师,研究方向: 

Web技术、分布式技术和数据库技术。 

收稿日期:2011-05—06 

(1)Tomcat提供了专门的JK插件来负责Tomcat与HTFP 

服务器通信,需要把JK插件安装在对方的H啊P服务器上。 

SOFrWARE DEVELOPMENT AND DESIGN 

件,改名为mod_jk…SO 

(5)创建workers.properties文件。该文件主要用于配置 

Apache与Tomcat的集成要用到的Tomcat实例以及负载均衡 

分发控制器等通信的参数,存放在conf目录下,内容如下: 

worker.1ist=workerl舟指定连接的Tomcat名单,多个用逗 

号分割 

worker.worker1.port=8009#Tomca使用的AJP工作端口 

worker.worker1.host=localhost#Tomcat服务器的地址 

worker.worker1.type=ajp13 ffFomcat与Apache之间的通信 

协议类型 

worker.worker1.1bfactor-=I#负载平衡因数 

(6)修改Apache服务器的配置文件httpd.conf。该文件用 

来加载JK模块以及指定JK配置文件信息,在末尾加入以下 

内容: 

LoadModule jk_module modules/mod_ik.SO 

#加载JK插件 

JkWorkersFile conf/workers.properties 

#指定JK 作的文件 

JkLogFile logs/orod jk.1og 

JkLogLevel debug 

JkMount/*.jsp workerl 

JkMount/studentManager/*workerl 

JkMount/studentManager workerl 

芹配置哪些URL请求应转发给workerl处理 

(7)测试。重启Tomcat服务器和Apache服务器,输入 

http://localhost/index.jsp,若出现Tomcat默认首页,则说明集 

成成功。 

3 Tomcat集群原理 

当网站的访问量非常大,为了更好地提高访问速度,可 

以将多个Tomcat服务器与Apache服务器集成,让多个 

Tomcat服务器共同分担运行服务器端组件,多个Tomcat服务 

器构成了一个集群系统,工作原理如图2所示。 

广——] Tomcat 

IE Il I Ap 。h I 服务器 _。 _1对 回 

J IJK插件 l 

J Tomeat2 

}u 映射信息l U 园 

图2集群工作原理 

(1)多个Tomcat轮流交替工作,服务请求的比例由负载 

平衡因子系数决定。 

(2)需要会话同步配置。 

(3)高性能:多个服务器共同承担请求任务,充分利用 

服务器的软件和硬件资源,性能大大提高。 

(4)负载均衡:请求的压力可以根据合理的算法,分配 

软件开发与设计 

到不同性能的服务器上,减轻了单个服务器的压力。 

(5)高可靠性:当一台服务器发生故障,集群系统会自 

动把 【作任务转交给别的服务器,对用户提供透明不间断的 

服务。 

4 Tomcat集群方法 

(1)Apache的负载均衡配置。配置wo ̄ers.properties文 

件,内容如下: 

#指定分发控制器,由多个Tomcat实例组成,注意不要 

放tomcat实例 

worker.1ist=loadbalancer 

#Tomc ̄实例配置这里要和Tomcm配置文件Service.xml 

的ivmRoute保持一致 

worker.worker1.port=8009 

worker.worker1.host=localhost worker.worker1.type=ajpl3 

worker.worker1.1bfactor=lO0 

#Tomcat2实例配置 

worker.worker2.port=8019 worker.worker2.host=localhost 

worker.worker2.type=ajpl3 

worker.worker2.1bfactor=-lO0 

#负载均衡分发控制器 

wor ̄r.1oadbalancer.type=lb 

worker.1oadbalancer.balanced

_

workers=workerl,worker2 

worker.1oadbalancer.sticky

session=false 

worker.1oadbalancer.sticky

sessionforce=false 

如果sticky—session的值为true,表示一次会话中的所有 

HTfP请求始终只会让同一个Tomcat来处理,这时, 

sticky

session

force也应设为true。否则,如果该Tomcat服务 

器出现故障,则负载平衡器会把请求转发给集群系统中的其 

他Tomcat服务器,丢失会话信息服务器端处理没有意义。 

(2)配置httpd.conf文件。将JkMount路由的URL请求转 

交给loadbalancer平衡器,不再是单个的Tomcat。 

(3)配置会话同步。修改Tomcat的配置文件server.xml, 

如图3所示。DeltaManager会话管理器会把一个服务器节点的 

会话信息复制到集群系统中的所有其他服务器,增大了网络 

通信负荷。对于规模很大的集群系统,可以采用 

BackupManager会话管理器,它只会把一个服务器节点中的会 

话信息备份到集群系统中的其他单个服务器节点,HTrP请求 

的负载依然由集群系统中所有的Tomcat服务器按workers. 

properties文件中的算法共同承担。 

(4)复制原来的Tomcat,重命名为Tomcat2,集群 

Receiver节点Tcp监听t端口Por分别配置为4000和4001。 

(5)修改Tomcat2中的关闭端口、HTTP监听端口及AJP 

连接器的端口,如下: 

<Server port=”8015”shutdown=”SHUTDOWN”> 

<Connector port:’’8019”protocol=” AJP/1.3” 

redirectPort=”8443”/> 

<Connector port=”8082”protocol=”HTTP/1.1” 

connectionTimeou仁”20000” 

redirectPort=”8443”URIEncoding=”UTF-8”,> 

<Connector port=”8019”protocol=” AJP/1.3” 

redirectPoft=”8443” /> 

潞 

电脑编程技巧与维护 

《Ci ¥# r 0l∞搴l{ org. aeh ̄,catalina_惦. c≯tSlmpit Ci【船 ef 

eh柏地lS ∞ ‘i0描 0 > 

£el”蜊^擀"org. 踟.ca:if n& n.辣¥¥10 n祁 Ba r 

∞clf l,eeIIer , ic丑cl曲 ccue ) 

0 

<Cbemm ̄i el姑sN蛳 cr a ac ・e 舂上l眦.H埔e, 0坤G<0 # n l > 

< ergh l 积ames p 蜘, £ l±协tribe ̄州曲 r n》 :g 

bind, ∞ 0 0 i 

re50 :∞ 0 0 

0n S S4 

fre w ¥∞ 

dropTl胖 ∞。。 ,> 

<Receive ̄cj”5鼬M 口r口a辑0 - at 【1n tr曲曩。c 6 ≯0 艇0tH 0 e0 坩r” 

ad s nt 

∞牲 蝣瓣 

0tim i∞ 

se c吼ti脯 辅∞ 

黼 re#曲 5 ,) 

( 删押0j豁a ^辨 nW A滞 ,鞠 引埔 cn 0 ∞H, 雕j 舭i0 ? 删fce ) 

《№ 雄呲c 0Ja 鳙 E "org・神 

<,% } 

0l船 鳓e OW. c .catali ̄tr幽e 坤lnt 托 pt0 }.1fe3 g曲l p ;ch”Inter t > 

ca0 l触 cr be3.£f t 妒“nj0 o0jed ar j B nd , 

<ln‘er能p;O#cl"#咖麟 "ozg.a 琏。0札aH蟪. 曲 s g 0t}.1nere p≮Or5 p aijEre№tec0辩 , 

‘InLe!脚E0:

图4集群测试界面 

<,Ch 艚 > 

l cla蹦W赫 矾#.婶¥鼬 cata l .h缸^0p l1 8Ej渊 liita: > 

<Valve cj帕jN啪 0f*" lIe c#taIina .session曲m 0 e8l erv i谨 > 

(1)workers.properties中配置的连接Tomcat实例要与 

Server.xml中一致。 

< 钟lO r el删嗽e .#p he.eatMl ̄. , 

一船 l 

l0 } E B印l0 r 

cwblp 吲w teⅫ, 

髀pi0 n ,t 

粥tc i c ・ i0t# 

.特s 0n J 如u eSe¥0 0 雌l 如rkI5t ,> 

(2)JkMount要分发到负载均衡控制器,而不是Tomcat 

实例。 

呲a艟habje fal鲍 ,) 

Cl #er is e }0J托¥K拍} Orq.a a# ,聃I I酶 

l撼 i站£ r 0l锚珊 w p c抛 cataUaa酶 e5§j0 l蝣0 f#e 8j0 #c}t N ' 

<ICI ̄ r} 

(3)Server.xml配置文件的Engine节点是否配置jvmRoute, 

图3会话同步配置 

并且与worker.properties配置的名称保持一致。 

(6)分别修改两个Tomcat的server.xml文件,把它们的< 

Engine>元素的jvmRoute属性分别设为workerl和worker2,如 

下: 

<Engine name=”Catalina”defaultHost=”localhost” 

(4)会话同步Cluster节点是否设置。 

6 结语 

Tomcat与Apache的集成和集群,需使用JK插件完成通 

信,负载平衡器完成请求路由,会话管理器完成会话同步。 

集成和集群可以充分发挥多台硬件服务器的功能,可以有效 

提升访问速度、稳定性等网站性能,满足大量并发访问的需 

求。 

jvmRoute=”workerl”> 

Engi<ne nanle=”Catalina”defaultHost=”localhost” 

jvmRoute=”worker2”> 

(7)测试。修改要访问的JsP文件,加入<%system.out. 

prinfln(”call index.jsp”);%>SessionID:<%=session.getld 0% 

参考文献 

【1]孙卫琴.Tomcat与Java Web开发技术详解[M1.2版.北 

京:电子T业出版社,2009. 

>代码。关闭已经重启的Tomcat和Apache,分别重启两个 

Tomcat和Apache,当第二个tomcat启动后,第一个Tomcat就 

会感知到,控制台会输出有关信息。访问该JSP文件,多次刷 

新,客户端显示的sessionlD不变,workerl和worker2交替变 

[2】刘尚旺,何东健,等.Tomcat与IIS或Apache服务器集成 

的应用研究fJ].计算机工程与设计,2009,30(10): 

2541,2546. 

化,服务端控制台的输出交替。分别从客户端和服务端验证 

了Tomeatl和Tomcat2安装负载因子的比例轮流工作,如图4 

所示。 

[3】The Apache SoftWare Foundation.the Apache Tomcat 

Connector【CP/OL].(2010).http://tomeat.apache.ors/ 

connectors—doc/. 

关闭其中一个tomcat,另一个依然可以运行,提高了可靠 

性。 

[4】Vivek Chopra,Sing Li,等.Apache Tomcat高级编程[M】. 

北京:人民邮电出版社,2009. 

5 常见问题 

在同一台机器上,不同的服务器监听的端口号不能相同; 

(上接第5页) 

来,因为在Windows CE.NET上运行的程序要求更严,限制更 

多,因此,将Windows CE.NET程序移植到桌面所作的工作比 

反过来要少得多,笔者之前在基于Windows CE.NET 5.0平台 

参考文献 

[1]汪兵,李存斌,陈鹏,等.EVC高级编程及其应用开发. 

北京:中国水利水电出版社,2005. 

的嵌入式设备上,利用EVC4.0 SP4成功开发了一套电子设备 

信号特性数据采集分析软件,并使用Visual Studio.NET 2005 

快速实现了其PC版本,现已投入使用,反馈良好,即由此项 

[2】周毓林,宁杨,陆贵强,等.Windows CE.NET内核定制及 

应用开发.北京:电子工业出版社。2005. 

[3】Douglas Boling.Windows CE程序设计.北京:北京大学出 

版社,2001. 

目总结得来,希望对有一定Windows编程基础并需转向 

Windows CE.NET平台的开发者们有所帮助。 

焉