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

标签 amazon-ec2 amazon-web-services amazon-elb

我有一个在 Amazon 上运行的服务器实例云,使用他们的负载均衡器来分配流量。现在我正在寻找一种很好的方法来优雅地缩小网络,而不会在浏览器端造成连接错误。

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

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

我的应用程序是基于 Ubuntu 运行的 node.js。我也有一些特殊的软件在上面运行,所以我不想使用许多 PAAS 提供的 node.js 托管。

感谢您的任何提示。

最佳答案

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

流程概览

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

  • 阻止与 nodeX 的新 HTTP 连接但继续允许现有连接
  • 通过监视与应用程序的现有连接或允许“安全”时间来等待现有连接耗尽。
  • 直接使用 EC2 API 或抽象脚本在 nodeX EC2 实例上启动关闭。

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

    需要检验的假设

    我们知道ELB removes unhealthy instances from it's pool我希望这是优雅的,所以:
  • 与最近关闭的端口的新连接将正常重定向到池中的下一个节点
  • 当一个节点被标记为 Bad 时,与该节点已经建立的连接不受影响。

  • 可能的测试用例:
  • 在 ELB 上触发 HTTP 连接(例如从 curl 脚本)记录
    脚本打开关闭节点之一期间的结果
    HTTP 端口。你需要尝试找到一个
    允许 ELB 始终确定状态的可接受时间量
    改变。
  • 保持长时间的 HTTP session ,(例如文件下载)同时阻止新的
    HTTP 连接,长 session 有望继续。

  • 1. 如何阻止 HTTP 连接

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

    例如 IP 表:
    iptables -A INPUT -j DROP -p tcp --syn --destination-port <web service port>
    

    关于amazon-ec2 - 如何从 ELB 组正常关闭或删除 AWS 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7665358/

    相关文章:

    amazon-web-services - CloudFormation 更新支持 "Refer to Resources in Another Stack"

    amazon-web-services - 如何使用 Cloudformation 安全地将代码从 aws s3 存储桶提取到 Codecommit 存储库?

    amazon-web-services - Terraform - ELB 尝试重新创建而不是更新

    ruby-on-rails - 使用 thin 在 Rails 3 应用程序中指定环境

    amazon-web-services - 无法访问 AWS 站点上的 Elasticsearch

    amazon-web-services - 如何将 S3 存储桶挂载到 StarCluster

    amazon-web-services - 如何更改 Cloudwatch 中 SNS 的默认主题行?

    linux - AWS 亚马逊为小型实例提供 160GB 的空间。在引导 Suse linux 时,总的根分区空间是

    amazon-web-services - CloudWatch 中未找到 ELB 指标

    amazon-web-services - 连接到负载均衡器的 EC2 实例显示不健康状态