一、简介:
每个Tomcat worker是一个服务于web server、等待执行servlet的Tomcat实例。例如我们经常使用像Apache之类的web server转发sevlet请求给位于其后面的一个Tomcat进程(也就是前面所说的worker)。本文详细介绍了如何配置各种类型worker和loadbalance,并说明了各种类型worker的特性和loadbalance配置的原理。
二、为什么使用Tomcat workers:
上文描述了一个非常简单的结构,事实上能够配置多个Tomcat workers来处理web server转发的servlet请求。而这样配置的理由不外乎以下几种假想环境:
* 我们在开发环境中发布不同的Tomcat workers为各自不同的应用服务。当然在开发环境中的开发者共享同一个web server,但是每个Tomcat worke服务于拥有它的开发者。
* 我们在不同的Tomcat进程上定义各自的虚拟主机,这样不同的公司可以使用各自的web site,从而使他们的web site得到了合理的分割。
* 我们提供负载平衡的web site,也就意味着同时使用多个Tomcat workers,而每个Tomcat worker具有独立的主机并且在workers之间要分配通过web server转发来的请求。
当然,这些假想情况也许并不能涵盖使用多个workers的所有状况。
三、workers.properties配置说明:
定义Tomcat workers的方法是在apache的conf目录下编写一个名为“workers.properties”的属性文件。本文将详细解释如何进行配置的:
1.定义Workers列表:
定义workers的方法就是在apache的conf目录下编写一个workers.properties文件,使其作为apache的插件来发挥作用。
定义workers列表的格式:
worker.list =<使用“,”分割的worker 名字列表>
例如:
worker.list= worker1, worker2
当apache启动时,workers.properties作为插件将初始化出现在worker.list列表中的workers。
2.定义Workers的类型:
每个被命名的worker都应有一些关于其自身的附加信息。这些信息包括了worker的类型和其它相关信息。这里讨论的是JK1.2.5中定义的workers类型。
定义worker类型的格式:
worker . worker名字. type =
worker名字的命名最好遵循java的命名规范。
worker类型取值于下面的表格:
定义一个名为“local”的worker,其使用ajpv12协议与Tomcat 进程通讯:
worker.local.type=ajp12
定义一个名为“remote”的worker,其使用ajpv13协议与Tomcat 进程通讯:
worker.remote.type=ajp13
定义一个名为“fast”的worker,其使用JNI的方式与Tomcat 进程通讯:
worker.fast.type=jni
定义一个名为“loadbalancer”的worker,其作为对多个Tomcat 进程的负载平衡使用:
worker.loadbalancer.type=lb
各个类型具有不同的行为,我们在下文中会详细解释。
3.设置Worker属性:
在定义worker之后,还需要提供各个worker的属性,这些属性的定义使用下面的方式:
worker..<属性>=<属性值>
3-1 ajp12类型的Worker属性:.
ajp12类型的worker工作时使用基于TCP/IP socket的ajpv12协议转发请求给“进程外”Tomcat worker。
ajp12 worker属性如下:
host:
侦听ajp12请求的Tomcat worker主机。
port:
Tomcat worker主机的侦听端口。
lbfactor:
当此Tomcat worker被用于一个负载平衡worker使用时,此属性将被使用。它定义了此worker的负载平衡权值。
例如:下面的“worker1”定义了一个位于www.x.com 主机上的Tomcat,它使用8007端口侦听apache发来的请求,并具有2.5的负载权值
worker.worker1.host=www.x.comworker.worker1.port=8007worker.worker1.lbfactor=2.5
注意:在ajpv12协议中,针对每个请求都要一个连接建立、使用、关闭。其默认侦听端口为8007。
3-2 ajp13类型的Worker属性:
ajp13类型的worker工作时使用基于TCP/IP socket的ajpv13协议转发请求给“进程外”Tomcat worker。
ajpv13协议与ajpv12协议的主要不同:
* ajpv13具有更丰富的二进制协议,它使用将频繁使用的字符串编码为小整数的方式对请求数据进行压缩。
* ajpv13重用打开的socket并保留这些打开的socket以处理将来的请求。这在apache与Tomcat之间具有防火墙的网络环境下是必要的。
* ajpv13具有对SSL信息的处理能力,以致容器能够实现SSL的相关方法(如isSecure())。
注意:ajp13当前只能用于支持“进程外”协议的Tomcat 4.0.x, 4.1.x and 5。
下表描述了ajp13worker接受的属性:
host:
侦听ajp13请求的Tomcat worker主机。
port:
Tomcat worker主机的侦听端口。
lbfactor:
当此Tomcat worker被用于一个负载平衡worker使用时,此属性将被使用。它定义了此worker的负载平衡权值。
cachesize:
当在多线程的web server(例如apache2.0、IIS 、Netscape)中使用JK时,此属性是有效的。如果将cachesize的值设置为较高的值,这些支持多线程的web server将获得很好的处理能力。如果此属性不被设置,则连接cache特性将失效。
cache_timeout:
本属性用于声明JK在cache中保留一个打开的socket的时间,它对减少web serer的线程数有所帮助。
使用cache_timeout的原因:
周所周知,一个身背重负的web server(例如apache)建立childs/threads来处理负载,而当负载减少时它将销毁无用的childs/threads。每个child在转发请求给Tomcat时要打开一个ajp13连接,而在Tomcat那一端也将建立一个ajp13线程与之通讯。但是问题出现在一个ajp13连接建立完成后,child没有及时的释放那个ajp13连接,由于web server1将保持它的childs/threads运行已处理高负载,即使childs/threads处理快速的静态内容,在Tomcat端也将积累很多的无用ajp13线程。
socket_keepalive:
当防火墙位于web server与Tomcat之间时,防火墙将尝试断开未激活的网络连接。此属性将告诉操作系统在未激活的连接中发送KEEP_ALIVE信息(发送间隔时间依赖于操作系统的设置,一般为120秒),这样将防止防火墙切断未激活的网络连接。
但此设置并不是万能钥匙,它对于某些防火墙也无能为力。
socket_timeout:
此属性说明连接在未激活的状况下持续多久,web server将主动切断之。这是一个使Tomcat端的陈旧线程不致过多的好方法,但是也带来了在下一次请求到来时需要重新打开socket的开销。此属性与cache_timeout有类似的功效,但是它工作在non-cache模式。
connect_timeout:
web server在连接建立后将一个PING请求发送到ajp13协议的连接上。 此属性说明了web server等待PONG回应的时间(以ms为单位)。此属性在jk 1.2.6版本被增加进来,以求避免Tomcat的死机,Tomcat 3.3.2+, 4.1.28+ and 5.0.13+实现了对使用ajp13的 ping/pong的支持。此属性默认为失效的。
prepost_timeout:
web server在转发一个请求后将一个PING请求发送到ajp13协议的连接上。此属性说明了web server等待PONG回应的时间(以ms为单位)。此属性在jk 1.2.6版本被增加进来,以求避免Tomcat的死机,Tomcat 3.3.2+, 4.1.28+ and 5.0.13+实现了对使用ajp13的 ping/pong的支持。此属性默认为失效的。
reply_timeout:
此属性告诉web server在接到远端的Tomcat已死并实时的切换到集群中的另外一个Tomcat的回应之前等待一段时间。默认情况下web server将永远等待。属性值为web server要等待回应的时间(以ms为单位),所以如果具有运行时间较长的servlet时设置其值要小心。此属性在jk 1.2.6版本被增加进来,以求避免Tomcat的死机和在支持ajp13的servlet引擎上发生的问题。此属性默认为失效的。
recovery_options:
此属性说明了web server在检测到Tomcat失败后如何进行恢复工作。默认情况下,web server将转发请求给处于负载平衡模式中的另一个Tomcat。属性值为0,说明全部恢复;属性值为1,说明如果在Tomcat接到请求后出现失败状况,则不进行恢复;属性值为2,说明如果在Tomcat发送http头给客户端后出现失败状况,则不进行恢复;属性值为3,说明如果在Tomcat接到请求后出现失败状况或者在Tomcat发送http头给客户端后出现失败状况,则不进行恢复。此属性在jk 1.2.6版本被增加进来,以求避免Tomcat的死机和在支持ajp13的servlet引擎上发生的问题。此属性默认为全部恢复。
例如:一个名为“worker2”的worker的配置:
worker.worker2.host
复制本页网址和标题,发送给你QQ/Msn的好友一起分享
上一篇:Linux系统下Apache与Tomcat整合的简单方法
下一篇:详细讲解 Linux操作系统下文件解压缩的技巧