Tomcat在AWS ELB上重新启动

时间:2011-07-14 07:48:17

标签: tomcat amazon-web-services load-balancing

当人们重启Amazon Web Services Elastic Load Balancer后,人们如何阻止Tomcat尝试提供流量?

一旦部署了新软件,我们的应用程序最多需要40秒才能重新启动。这对于ELB来说太小了,因此他们在等待他们的webapps初始化时,Tomcat实例不断获得转发请求,导致用户获得500个错误页面。

这个问题有一个共同的方法吗?

2 个答案:

答案 0 :(得分:2)

Franck是对的,你应该使用健康检查机制。但是,最常见的是您可以每隔6秒运行一次健康检查。如果在重新启动或重新部署应用程序的同时,会发生这种情况?不幸的是,ELB不知道这一点,并不断向该实例发送流量。因此,在最糟糕的情况下,在(大约)6秒内,由该实例提供服务的网站访问者将收到错误消息或跟踪转储。

我已经联系了亚马逊,要求他们为每个注册ELB的实例提供PAUSE按钮,这样我们就可以告诉ELB停止向该实例发送请求了。有人喜欢这个想法,并承诺将其升级为开发人员。至少那将是一种避免获得请求的简单方法,它还没有准备好。

一个与ELB没有直接关系的建议,但是对Tomcat来说:Tomcat现在可以通过版本上传WAR。您可以上传“root ## 2012-04-30.war”文件(例如),而不是上传“root.war”文件,Tomcat将部署同一WAR的新版本。新版本不会中断正在回复请求的当前版本,并且一旦新版本准备就绪,它将开始占用流量而不是旧版本。这样,您的实例永远不会停止回复请求,因此ELB不需要停止在那里发送请求。

答案 1 :(得分:1)

您可以使用Health Check parameter: 在Tar​​get参数中设置一个特殊的html页面,如/health-check.html。 如果要关闭实例,请删除/重命名此页面,然后重新启动tomcat,当它启动并运行时,将页面重命名为/health-check.html。