【发布时间】:2016-04-11 16:26:14
【问题描述】:
首先了解一下我的设置:
- 1 ELB
- 4 个 EC2 实例
- 2 个网络服务器
- 1 运行迁移、队列 (beanstalkd) 和调度程序
- 1 个“服务”服务器(socket.io 实例等)
- RDS 上的 MySQL
- Elasticache 上的 Redis
- 用于用户资产的 S3
每天晚上 10:55,用户报告出现白屏和 502 Bad Gateway 错误。 ELB 报告说这两个 EC2 实例都是 OutOfService,但我通过 SSH 连接到它们并且完全能够通过绕过 ELB 来使用该站点。 RDS 和 Elasticache 维护时段不在此期间,并且这两个实例也未处于负载状态。我在 ELB 访问日志中找不到任何内容,实例端的 nginx 日志中没有任何内容,Laravel 应用程序日志中没有任何内容。 Laravel 调度程序中也没有任何东西在此时运行。
我发现的唯一一件事是,在我的 CloudWatch 指标中,ELB 延迟峰值高达大约 5-10 秒。所有这些导致每天同一时间大约有 5-15 分钟的停机时间。我似乎找不到任何导致问题的原因。
对于导致这种情况发生的原因,我 100% 感到困惑。任何帮助表示赞赏。
【问题讨论】:
-
ELB 实例是 OutOfService - 这是最大的线索。 ELB健康检查是如何配置的?您需要开始查看该健康检查页面以及健康检查页面如何返回状态 200 或 4xx 或 5xx。这就是问题所在。
-
Ping 目标:HTTP:80/,超时:10 秒,间隔:30 秒,不健康阈值:6,健康阈值:10。然后在 CloudWatch 中,它是一堆 HTTP 5xx 和 ELB 5xx 状态当时。即使我可以绕过 ELB 直接访问该站点,这就是为什么它对我没有任何意义。
-
您的意思是,您可以在 5 到 15 分钟的停机时间内通过以下方式访问 Web 应用程序。绕过 ELB 并命中 EC2 实例?
-
是的,这就是我的意思,如果我没有说清楚,对不起。在监视
top时,我还通过 SSH 连接到这两个实例,而且我从来没有断开连接或任何事情。 -
CPU、NetworkIn、NetworkOut、StatusCheck_Failed 这两个实例的最大统计图是什么样的?
标签: amazon-web-services nginx amazon-ec2 amazon-elb