Ben*_*rne 3 amazon-web-services elastic-beanstalk
当我的组中的自动缩放规则触发新 EC2 实例的部署时,或者例如我更改实例大小以模拟部署节点的行为,但在应用程序准备就绪之前将其添加到负载均衡器。
部署开始,.ebextensions 中的脚本开始执行。名为 current 的文件夹是空的,因为它是第一次部署到此节点,因此访问此节点会在浏览器中显示 403 Forbidden 错误。
最终应用程序部署完成并且 ondeck 文件夹按预期移动到 current 中,此时应用程序可以工作并且 403 错误消失。
这里的问题是节点在此过程完成之前被添加到负载均衡器,因此一些流量被分配到损坏的节点。
有什么办法可以阻止这种情况发生吗?难道我做错了什么?
小智 6
一旦新 EC2 实例开始通过负载均衡器的运行状况检查,负载均衡器就会开始向该实例发送流量。我猜你的负载均衡器配置了 TCP ping 健康检查。这意味着一旦新实例开始响应端口 80 上的 ping,它就被认为是健康的并准备好接收请求。但是,就像您已经注意到的那样,这将在应用程序完全部署并实际提供良好响应之前发生。
解决方案是将您的负载均衡器配置为对 HTTP 请求执行运行状况检查,以便在您的应用程序运行并成功响应 Web 请求之前,不会认为新 EC2 实例运行状况良好。在 AWS 控制台上,找到 EC2 仪表板的负载均衡器部分,然后为您的 Elastic Beanstalk 环境选择负载均衡器。您将在负载均衡器配置面板中看到健康检查选项卡,您可以在其中编辑健康检查设置并切换到 HTTP 请求作为您的 ping 方法。
如果您的应用程序配置为仅处理通过生产主机名发送的请求,您可能会发现 HTTP 健康检查总是失败。负载均衡器将请求发送到 EC2 实例的特定 URL,如果您的应用程序以错误或 30x 重定向响应这些请求,负载均衡器将认为它不健康。在这种情况下,您需要为请求过滤添加一个例外,以允许运行状况检查请求成功,而不管主机名如何。例如,向您的应用程序添加一个静态的、空的 elbhealthcheck.html(或任何您想命名的文件)文件,并允许使用任何主机名请求该文件。然后配置负载平衡器运行状况检查以在其 HTTP ping 中使用该 URL,您就可以开始了。
| 归档时间: |
|
| 查看次数: |
913 次 |
| 最近记录: |