联系站长
加入收藏
会员登陆
 您的位置: 情长在线 >> 文章文献 >> 网管天地 >> [专题]服务器配置指南 >> By 情长在线(F.N.S.T)
   □  Apache+Tomcat负载平衡设置实例详解    5星级
Apache+Tomcat负载平衡设置实例详解
[作者:佚名    转贴自:Internet    点击数:    更新时间:2005-11-28    文章录入:一生情长]
【字体:

一、简介: 

每个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=www2.x.com
worker.worker2.port=8009
worker.worker2.lbfactor=3.5
worker.worker2.cachesize=10
worker.worker2.cache_timeout=600
worker.worker2.socket_keepalive=1
worker "worker2" want ajp13
connection to be dropped after 5mn 
(timeout)worker.worker2.socket_timeout=300




说明:上例中的worker要求操作系统在连接上发送KEEP-ALIVE信号。 

注意:在ajpv13协议中默认端口为8009。 
4.设置lb Worker属性: 

负载平衡类型的worker并不与Tomcat worker通讯,它负责管理这些Tomcat worker。 

其管理范围如下: 

* 初始化在web server的worker列表中定义的worker。 

* 使用worker的负载平衡权值,执行基于权值的负载平衡,将数量多的请求发送到负载平衡权值高(在web server看来就是更加健壮的)的worker。 

* 维护在同一个Tomcat worker上的同一个session的请求,使其发送到同一个Tomcat worker上。以达到Tomcat worker上的session一致性、持续性。 

* 标识已经失败的Tomcat workers,悬空发向它们的请求,在被lb worker管理的其它workers上寻找可以失败恢复的worker。 

被同一个lb worker管理多个worker之间的负载平衡的(基于它们的lbfactor和当前用户session),也可以尽量避免由于单一的Tomcat进程死掉而造成这个网站被“杀”的不良反应。 

下表说明了lb worker接受的属性: 

* balanced_workers:一个由“,”分割的worker列表,用来声明lb worker需要被管理的workers。这些workers不应出现在worker.list属性中。 

* sticky_session:表述是否将对SESSION ID的请求路由回到相同的Tomcat worker。如果属性值不为0,它将被设置为JK_TRUE,session将是粘性的,即SESSION ID的请求路由回到相同的Tomcat worker;当Tomcat正使用能够跨越多个Tomcat实例持久化session数据的Session Manager时,它将被设置为JK_FALSE。属性默认值为JK_TRUE。 

例如:worker balance1管理着两个workers:worker1、worker2: 

worker.balance1.balanced_workers=worker1, worker2 

5.高级lb Worker属性: 

JK 1.2.x版本通过增加两个新的属性:local_worker_only 和 local_worker 为lb worker增添了新的负载平衡和容错支持。 

下面让我们举一个实际的环境作为example: 

一个集群具有两个节点(worker1+worker2),一个web server与tomcat workers一前一后,一个负载平衡器(lb Worker)位于节点的前面、web server的后面。 

配置如下: 


worker.list=router# 
Define a ’local_worker’ worker using 

[1] [2]  下一页

  • 上一篇文章:ASP安全配置不完全手册
  • 下一篇文章:IIS的W3SVC服务由于性能记数器错而当机的解决办法
  • 发表评论   □ 告诉好友   □ 打印此文  □ 关闭窗口
     最新10篇热点文章
    SQL SERVER2000安全解决方…[206]
    Linux集群在银行信息化中的…[210]
    巧用Linux2.6内核新功能配…[313]
    Linux DHCP网络故障排除事…[158]
    手把手教您配置Liunx目录服…[389]
    Linux下安装和使用杀毒软件…[262]
    (MS06-007)IGMP v3 DoS Ex…[256]
    FarsiNews Remote File In…[158]
    Apple Mac OS X File Rewr…[188]
    BomberClone Buffer Overf…[267]
     
     最新10篇推荐文章
    手把手教您配置Liunx目录服…[03-25]
    Linux下安装和使用杀毒软件…[03-25]
    (MS06-007)IGMP v3 DoS Ex…[03-25]
    BomberClone Buffer Overf…[03-25]
    vBulletin ImpEx模块远程文…[03-24]
    网络安全论文专题[03-23]
    服务器、网络安全解决方案…[03-23]
    服务器常见故障的诊断与解…[02-26]
    探寻适合小型企业的网络安…[02-26]
    交换机配置中的安全性[02-26]
     
     相 关 文 章
      ◇  网友评论:(只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
     设为首页  加入收藏  关于本站  免费服务  广告服务   归档中心   站点地图  版权申明  联系站长  友情链接
    Copyright© 2001-2005 F.N.S.T Fineacer.Org .All Rights Reserved ICP备案:粤ICP备05002156号