设为首页 收藏本站
查看: 615|回复: 0

[经验分享] Apache+Tomcat负载平衡设置实例详解 (2)

[复制链接]

尚未签到

发表于 2017-1-11 11:06:28 | 显示全部楼层 |阅读模式
使用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的配置:

<ccid_nobr></ccid_nobr>

<ccid_code></ccid_code>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的后面。

配置如下:



<ccid_nobr></ccid_nobr>

<ccid_code></ccid_code>worker.list=router#
Define a 'local_worker' worker using
ajp13worker.worker1.port=8009
worker.worker1.host=node1.domain.org
worker.worker1.type=ajp13
worker.worker1.lbfactor=1
worker.worker1.local_worker=1#
Define another 'local_worker'
worker using ajp13worker.worker2.port=8009
worker.worker2.host=node2.domain.org
worker.worker2.type=ajp13
worker.worker2.lbfactor=1
worker.worker2.local_worker=0#
Define the LB workerworker.router.type=lb
worker.router.balanced_workers=
worker1,worker2worker.
router.local_worker_only=1


  

在worker1和worker2上的local_worker标志告诉lb_worker哪个连接属于本地worker。

如果local_worker值为非0,则它将被设置为JK_TRUE,用来标记“local worker”,而JK_FALSE的情况则相反。如果至少一个worker被标记为local worker,则lb_worker将工作于local worker模式。这种模式下,所有的local workers将被移到在lb_worker中的内部worker列表的头部。

这意味着一个带有session id的请求到达lb_worker时,相应的worker(根据权值排序,权值最大的那个worker)将被确定作为此请求的接受/处理者。如果这个worker死掉/当机,请求将被发送到处于非错误状态的第一个local worker;如果一个没有session id的请求到达lb_worker时,此请求将被路由到第一个local worker。

如果所有的local worker均处于错误状态,则这时“local_worker_only”标志显得尤其重要。如果local_worker_only的属性值为非0,则它被设置为 JK_TRUE,否则被设置为 JK_FALSE。

当它被设置为 JK_TRUE时,这个没有session id的请求将得到一个错误作为回应,否则lb_worker将尝试将请求路由到其它的被管理的worker上。如果其中的一个worker处于错误状态,并且恢复会话的工作并没有任何改变,local worker将查找这个没有session id的请求(因为在local worker中保存有这个请求的session),而其它的worker只能查找带有session id的请求。

注意:local_worker默认值是0,local_worker_only默认值也是0。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-326997-1-1.html 上篇帖子: 详解Apache下.htaccess文件的8个用法 下篇帖子: Apache Cassandra Learning Step by Step (4): Data Modeling
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表