当AWS ElasticBeanstalk扩展到另一台服务器时,它似乎在它准备好之前就可用了吗?

Pau*_*lor 2 amazon-web-services amazon-elastic-beanstalk

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

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

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

Roh*_*nga 5

请求是否定向到新实例由Elastic Load Balancer(ELB)决定.您的自动调整的实例位于ELB后面,ELB会对您的EC2实例执行定期运行状况检查,以确定是否为您的实例提供流量.默认情况下,运行状况检查是端口80上的TCP连接.因此,如果ELB可以与Tomcat服务器上的端口80建立连接,则它将在实际"准备就绪"之前开始向该实例发送流量.

解决方案是使用自定义HTTP运行状况检查而不是默认TCP检查.设置您的Web应用程序以在特殊路径上返回200 OK,例如'/ health_ping'.然后将"Application Healthcheck URL"选项配置为"/ health_ping".您可以使用以下ebextension执行此操作.

.ebextensions/01-health-check.config使用以下内容创建在应用源中调用的文件.然后将其部署到您的环境中.

option_settings:
   - namespace: aws:elasticbeanstalk:application
     option_name: Application Healthcheck URL
     value: /health_ping
Run Code Online (Sandbox Code Playgroud)

在此处详细了解此选项设置.

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