2011-07-14 56 views
0

人们如何防止Tomcat在Amazon Web Services Elastic Load Balancer后面重新启动时尝试提供流量?Tomcat在AWS上重启ELB

一旦新软件部署到他们,我们的应用程序需要40秒才能重新启动。对于ELB来说,这是一个太小的窗口,所以他们在等待他们的web应用程序初始化时,Tomcat实例不断收到转发的请求,导致用户收到500个错误页面。

是否有解决此问题的常用方法?

回答

1

您可以玩Health Check parameter: 在Target参数中设置一个特殊的html页面,如/health-check.html。 当你想关闭一个实例时,删除/重命名这个页面,然后重启你的tomcat,当它启动并运行时,将页面重命名为/health-check.html。

+0

谢谢,这是一个很好的解决方案,但对我的用法来说太过于手动。也许部署新的.wars的工具可以控制这种行为... –

2

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

我已经联系了亚马逊,要求他们针对使用ELB注册的每个实例的PAUSE按钮,所以我们可以告诉ELB停止向该实例发送请求。有人在那里喜欢这个主意,并且承诺将其升级到开发者。至少,这将是一个简单的方法来避免获取请求的准备工作尚未完成。

一个建议与ELB没有直接关系,但对于Tomcat来说:Tomcat现在有一种方法可以上传带有版本的WAR。而不是上传“root.war”文件,你可以上传“root ## 2012-04-30.war”文件(例如),Tomcat将部署相同WAR的新版本。新版本不会中断正在回答请求的当前版本,只要新版本准备就绪,它就会开始接收流量,而不是旧版本。这样,你的实例永远不会停止回应请求,所以ELB不需要停止在那里发送请求。