我有一个在 Amazon 上运行的服务器实例云,使用他们的负载均衡器来分配流量。现在我正在寻找一种很好的方法来优雅地缩小网络,而不会在浏览器端造成连接错误。
据我所知,当从负载均衡器中删除时,实例的任何连接都会被粗暴地终止。
我希望有一种方法可以在实例关闭前一分钟通知我的实例,或者让负载均衡器停止向即将死亡的实例发送流量,但不终止与它的现有连接。
我的应用程序是基于 Ubuntu 运行的 node.js。我也有一些特殊的软件在上面运行,所以我不想使用许多 PAAS 提供的 node.js 托管。
感谢您的任何提示。
最佳答案
这个想法使用 ELB 的能力来检测不健康的节点并将其从池中删除,但它依赖于 ELB 的行为如以下假设中的预期。这是我一直想为自己测试但还没有时间的东西。当我这样做时,我会更新答案。
流程概览
可以在需要关闭节点时包装并运行以下逻辑。
根据您的应用程序“安全”,对于某些应用程序可能无法确定。
需要检验的假设
我们知道ELB removes unhealthy instances from it's pool我希望这是优雅的,所以:
可能的测试用例:
脚本打开关闭节点之一期间的结果
HTTP 端口。你需要尝试找到一个
允许 ELB 始终确定状态的可接受时间量
改变。
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/