我有5个Web服务器(Apache / mod_perl)在Amazon EC2 Elastic Load Balancing后面,当我将代码部署到Web服务器时,我正在这样做。
我想当我的服务器closures时,ELB不会将请求分发到我的服务器,但请求仍然在服务如何?
我认为更好的方法是
但是,如何从本地服务器执行(1)和(2)? 我需要使用AWS API吗? 或者其他简单的方法来做到这一点?
谢谢。
我运行apache / mod_perl作为负载均衡的EC2实例,并按照您的说法定期进行代码升级。 我的过程是:
AWS文档将介绍如何使用您的select使用API或控制台来添加和删除实例 。 你会注意到,用我的方法,web服务器优雅地轮stream出来,所以我不担心是否有特定的用户请求被杀死。 正如@ cyberx86提到的,你可以使用命令apachectl -k graceful在每个请求被处理后closures你的apache服务器。
我有另一种方法来实现这一点,如果你有几个东西要升级在每台服务器上。 这将是非常浪费更新5服务器的相同的操作。
创build负载平衡和缩放组。确保已启用连接排空 。
有我的升级步骤。
一些指南:
负载平衡您的Auto Scaling组
连接排水
如果您的部署可以修改为支持新创build的实例通过新代码联机,那么实际上您可以从ELB中删除实例,等待60秒(之后Amazon的ELB将closures连接到后端和客户端),然后终止实例并依靠亚马逊的Auto Scaling Group为您提供新的实例。 我创build了一个开源工具,可以自动执行此过程 – 在awsmissingtools.com上可用 – 查找名为“AWS-HA-Release”的工具。