amazon-ec2 – 如何从ELB组中正常关闭或删除AWS实例

我有一个服务器实例云运行在亚马逊使用他们的负载均衡器来分发流量。现在我正在寻找一种很好的方式来优化网络规模,而不会在浏览器端造成连接错误。

据我所知,当从负载平衡器中删除时,实例的任何连接将被粗鲁地终止。

我希望有一种方式可以在关闭之前一分钟通知我的实例,或者让负载平衡器停止向垂死的实例发送流量,但是不会终止与它的现有连接。

我的应用程序是在Ubuntu上运行的node.js。我也有一些特殊的软件运行在它,所以我宁可不使用很多PAAS提供的node.js托管。

感谢任何提示。

这个想法使用ELB的能力来检测不健康的节点并将其从池中删除,但是它依赖于ELB在下面的假设中的行为。这是我自己测试的一些东西,但还没有时间。我会更新答案。

流程概述

在节点需要关闭时,可以包装和运行以下逻辑。

>阻止到nodeX的新HTTP连接,但是继续允许现有的连接
>等待现有的连接流失,通过监控与应用程序的现有连接或允许“安全”的时间量。
>使用EC2 API直接或抽象脚本在nodeX EC2实例上启动关闭。

根据您的应用“安全”,这可能无法为某些应用程序确定。

假设需要测试

我们知道ELB removes unhealthy instances from it’s pool我会期望这是优雅的,所以:

>与最近关闭的端口的新连接将被正确地重定向到池中的下一个节点
>当节点被标记为Bad时,已经建立到该节点的连接不受影响。

可能的测试用例:

>在ELB上Fire HTTP连接(例如从卷曲脚本)登录
在脚本打开一个节点的关闭期间的结果
HTTP端口你需要尝试找到一个
允许ELB始终确定状态的可接受的时间量
更改。
>保持较长的HTTP会话(例如文件下载),同时阻止新的
HTTP连接,长期会话应该希望继续。

1.如何阻止HTTP连接

在nodeX上使用本地防火墙来阻止新会话,但继续允许已建立的会话。

例如IP表:

iptables -A INPUT -j DROP -p tcp --syn --destination-port <web service port>
http://stackoverflow.com/questions/7665358/how-to-gracefully-shut-down-or-remove-aws-instances-from-an-elb-group

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:amazon-ec2 – 如何从ELB组中正常关闭或删除AWS实例