amazon-web-services - 当 AWS ElasticBeanstalk 扩展到另一台服务器时,它似乎在准备就绪之前就使其可用?

标签 amazon-web-services amazon-elastic-beanstalk

当我的 Java 应用程序部署到 Elastic-Beanastalk 上的 Tomcat 时,需要一段时间(11 分钟),因为它必须从 S3 复制大型数据文件并解压缩它们,但这没关系,因为这一切都是在 .ebextensions 中完成的,在完成之前,实例不会报告自己已准备好。

但是,我已将其配置为自动缩放,并且似乎当它决定需要启动新实例时,在下一个实例完全部署之前有一段时间,Elastic-Beanstalk 会将一些应用程序请求定向到此新服务器,当然,因为它还没有准备好,所以会返回 503 错误。

但是肯定所有调用都应该只转到原始实例,直到第二个实例准备好为止,有其他人注意到这一点吗?

最佳答案

请求是否定向到新实例由弹性负载均衡器 (ELB) 决定。您的自动缩放实例位于 ELB 后面,ELB 对您的 EC2 实例执行定期运行状况检查,以确定流量是否流向您的实例。默认情况下,健康检查是在端口 80 上进行 TCP 连接。因此,如果 ELB 可以与 Tomcat 服务器上的端口 80 建立连接,那么它甚至会在实例真正“准备好”之前就开始向实例发送流量。

解决方案是使用自定义 HTTP 运行状况检查而不是默认的 TCP 检查。将您的 Web 应用程序设置为在“/health_ping”等特殊路径上返回 200 OK。然后将“应用程序运行状况检查 URL”选项配置为“/health_ping”。您可以使用以下 ebextension 来完成此操作。

在您的应用源中创建一个名为 .ebextensions/01-health-check.config 的文件,其中包含以下内容。然后将其部署到您的环境中。

option_settings:
   - namespace: aws:elasticbeanstalk:application
     option_name: Application Healthcheck URL
     value: /health_ping

了解有关此选项设置的更多信息 here .

您还可以在 Web 控制台中或使用 aws cli 进行配置。

关于amazon-web-services - 当 AWS ElasticBeanstalk 扩展到另一台服务器时,它似乎在准备就绪之前就使其可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25697620/

相关文章:

python - 无法在 Elastic Beanstalk 上用 Bottle 加载静态文件

amazon-web-services - AWS Cloudfront 将表单发布重定向到原点

amazon-web-services - AWS - 无法通过 443 端口访问 EC2 实例

php - Imagick 调整大小的图像内容直接上传到 ECS 服务器 - PHP

php - 如何在 Amazon Elastic Beanstalk 上安装 PHP IMAP 扩展

java - Hibernate 无法从 https 域连接

amazon-web-services - AWS ELB 自动扩展 CPU 利用率 > 90% - 不断创建/终止实例

python - 使用 Python 关闭没有特定标签的 EC2 实例

node.js - 具有两个回调的 AWS Lambda 函数

python - 使用 Boto 3 显示 EC2 实例名称