我有两个tomcat服务器前面的apache。 这两个服务器在负载均衡器中处于活动状态。 如果我杀死了一个后端tomcat进程,那么该节点上的所有用户在下次访问服务器时都会收到一个HTTP 500。 我想避免500的用户 – 我想mod_jk看到500,只是发送请求到另一台服务器。 一旦用户得到500,如果我刷新,请求被发送到另一台服务器。 为什么mod_jk将500返回到浏览器而不是尝试另一个活动节点?
我们的应用程序是有状态的,但是我们已经在我们的应用程序中完成了保存状态和关键时间的工作。 因此,如果我们能够使故障转移更加无缝,我们将获得我们所追求的用户体验。
这是我的workers.properties文件
worker.list=router,jkstatus worker.router.type=lb worker.router.balance_workers=worker1,worker2 worker.router.method=Next worker.worker1.type=ajp13 worker.worker1.host=localhost worker.worker1.port=8009 worker.worker2.type=ajp13 worker.worker2.host=localhost worker.worker2.port=8010 worker.jkstatus.type=status
由于jk 1.2.20,你可以为worker设置属性fail_on_status 。
有关详细信息,请参阅http://tomcat.apache.org/connectors-doc/reference/workers.html 。
那么,正如你所说,你没有绑定到Apache,那么我会build议你使用像Varnish,这是一个负载平衡器以及反向代理,以及一个非常好的caching服务器。
使用相同的function甚至不会增加您的网站性能,但也会为您解决当前的问题。
在清漆中,您可以使用tomcatconfiguration2个后端。 所有的请求将会被清除,这将在2个后端tomcat服务器之间进行负载平衡。
如果任何一个tomcat服务器发生故障,那么它将不会再向该tomcat服务器发送任何查询,并将所有stream量发送到健康的后端。 在后台,它会继续检查坏tomcat服务器的健康状况,一旦恢复到正常状态,它就会开始发回tomcat服务器。
每个工人的设置redirect:
worker.worker1.type = AJP13
worker.worker1.host =本地主机
worker.worker1.port = 8009
worker.worker1.redirect = worker2
worker.worker2.type = AJP13
worker.worker2.host =本地主机
worker.worker2.port = 8010
worker.worker2.redirect = worker1