2011-12-01 55 views
4

我使用apache http和mod_jk进行负载平衡。当使用粘性会话时,如果其中一个tomcat实例死亡,请求被成功重定向到其他节点。如果由于某种原因应用程序死了,但是tomcat仍然活着,那么这些请求就会继续到有死应用程序的节点。任何想法如何解决这个问题?Apache Http使用mod_jk进行负载平衡故障转移

下面你可以罚我的worker.properties文件。

worker.list=myworker 

worker.myworker1.port=8009 
worker.myworker1.host=host1 
worker.myworker1.type=ajp13 
worker.myworker1.lbfactor=1 

worker.myworker2.port=8009 
worker.myworker2.host=host2 
worker.myworker2.type=ajp13 
worker.myworker2.lbfactor=1 

worker.myworker.type=lb 
worker.myworker.balance_workers=myworker1,myworker2 
worker.myworker.sticky_session=True 

谢谢!

回答

1

mod_jk无法ping通心跳URL来决定节点的健康状况。

一个解决方案是使用一个外部脚本,它会为你做,如果应用程序不活动,它应该重新启动tomcat实例。

2

通常,当tomcat仍在运行时应用程序不可用时,会出现404错误。我认为有一个工作人员指令要处理,并且fail_on_status,你可以使用这个404错误,并且可能不需要包含503错误代码,这可能意味着tomcat停止,并且它是mod_jk的故障转移工作到其他工作节点。尝试下面的workers.properties(每个工作人员附加的一行)也用逗号分隔的其他错误代码。

worker.list=myworker 

worker.myworker1.port=8009 
worker.myworker1.host=host1 
worker.myworker1.type=ajp13 
worker.myworker1.lbfactor=1 
#worker.myworker1.fail_on_status=-404,503 
worker.myworker1.fail_on_status=-404 

worker.myworker2.port=8009 
worker.myworker2.host=host2 
worker.myworker2.type=ajp13 
worker.myworker2.lbfactor=1 
#worker.myworker2.fail_on_status=-404,503 
worker.myworker2.fail_on_status=-404 

worker.myworker.type=lb 
worker.myworker.balance_workers=myworker1,myworker2 
worker.myworker.sticky_session=True 
worker.myworker.sticky_session_force=True