使用 mod_jk 的 Apache Http 负载平衡故障转移

Apache Http Load balancing failover with mod_jk

我正在使用 apache http 和 mod_jk 进行负载平衡。如果其中一个 tomcat 实例死亡,则使用粘性会话时,请求将成功重定向到另一个节点。如果由于某种原因应用程序死亡但 tomcat 还活着,那么请求会继续发送到具有死亡应用程序的节点。任何想法如何解决这个问题?

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

谢谢!


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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

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

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