47

我正在尝试在 AWS 中设置Elastic Load Balancing (ELB)以在多个实例之间拆分请求。我已经基于同一个 AMI 创建了我的网络服务器的几个图像,并且我能够单独 ssh 到每个图像并通过每个不同的公共 DNS 访问该站点。

我已将我的每个实例添加到负载均衡器,但它们都返回了,Status: Out of Service因为它们未通过运行状况检查。我很困惑,因为我可以从其公共 DNS 访问每个实例,但是每当我访问负载均衡器 DNS 名称时都会超时。

我一直在尝试通读所有文档并在谷歌上搜索它,但我被卡住了。任何指向正确方向的指针或链接将不胜感激。

4

13 回答 13

24

我就同样的问题联系了 AWS 支持。显然,如果 ELB 后面的所有实例都停止了很长一段时间,他们的系统不知道如何处理这些情况。如果您立即需要,AWS 支持可以手动刷新状态。

建议修复它以从 ELB 中注销 ec2 实例,而不是仅仅停止它们并在重新启动时重新注册它们。

于 2013-04-16T04:48:33.560 回答
19

健康检查(默认情况下)通过访问负载均衡器中每个实例上的 index.html 来进行。如果实例的文档根目录中没有 index.html - 默认运行状况检查将失败。创建弹性负载均衡器时,您可以设置自定义协议、端口和路径进行健康检查。

于 2011-08-26T07:47:34.890 回答
11

最后我得到了这个工作。问题出在Amazon Security Groups上,因为我已将对端口 80 的访问限制在我的开发区域中的少数机器上,并且负载均衡器无法访问实例上的 apache 服务器。一旦负载均衡器获得对我的实例的访问权限,它就会进入In Service

我在我的实例中检查了它tail -f /var/log/apache2/access.log,以验证负载均衡器是否正在尝试访问我的服务器,并查看服务器给负载均衡器的答案。

希望这可以帮助。

于 2013-12-09T11:28:49.220 回答
3

如果您的 Web 服务器运行良好,则意味着运行状况检查在一个不返回 200 的 url 上进行。

一个对我有用的技巧:继续实例,输入 curl localhost:80/pathofyourhealthcheckurl

在您可以调整您的健康检查 URL 以始终获得 200 响应之后。

于 2017-08-07T15:27:57.997 回答
1

就我而言,分配给实例和负载均衡器的安全组规则不允许流量在两者之间传递。这导致运行状况检查失败。

于 2015-07-28T18:46:17.793 回答
1

我面临同样的问题,我将 Ping 协议从 https 更改为 ssl ..它有效!

转到健康检查 --> 单击编辑健康检查 --> 将 Ping 协议从 HTTPS 更改为 SSL
Ping 目标 SSL:443
超时 5 秒
间隔 30 秒
不健康阈值 5
健康门槛 10
于 2016-01-18T13:06:53.057 回答
0

我想为您提供解决此问题的一般方法。设置好 apache 或 nginx 等 Web 服务器后,请尝试读取访问日志文件以查看发生了什么。在我的场合,它报告401 error是因为我在 nginx 中添加了基本身份验证。当然,就像@ivankoni 提醒的那样,可能是因为您检查的文件不存在。

于 2015-06-15T07:28:15.703 回答
0

我有一个类似的问题。该问题似乎是由于我使用 HTTP 运行状况检查并使用 .htaccess 密码保护站点而引起的。

于 2018-03-04T01:42:40.707 回答
0

我也遇到了这个问题,这是由于我的负载均衡器安全组的入站和出站规则只允许端口 80 上的 HTTP 流量。我需要为端口 443 上的 HTTPS 流量添加另一个规则。

于 2020-08-04T11:23:25.973 回答
0

I was working on the AWS Tutorial on hosting a web app and ran into this problem. Step 7b states the following:

"Set Ping Path to /. This sends queries to your default page, whether it is named index.html or something else."

They could have put the forward slash in quotations like this "/". Make sure you have that in your health checks and not this "/." .

于 2015-08-07T22:57:12.050 回答
0

添加这个是因为我花了几个小时试图弄清楚......

如果您配置了健康检查端点,但它仍然Out of Service显示 ,这可能是因为您的服务器正在重定向请求(即返回一个301302响应)。

例如,如果您的端点应该是,/app/health/但您只/app/health在 ELB 上的健康检查端点字段中输入(没有尾随斜杠),您将不会收到 200 响应,因此健康检查将失败。

于 2015-11-14T19:25:36.390 回答
0

我遇到了同样的错误,在我的情况下,我必须将特定的 html 文件从 s3 存储桶复制到“/var/www/html”位置。负载均衡器路径中引用的相同 html。

复制html文件后问题解决。

于 2018-09-25T21:01:51.763 回答
0

对于看到此线程的其他人,因为未列出:

检查运行状况检查是否正在检查响应服务器正在侦听的端口。

例如 node.js 在 3000 端口上运行 -> 将健康检查指向 3000 端口;

不是端口 80 或 443。这些是您的 ALB 将使用的。

我为此花了一个上午。是的。

于 2019-08-15T11:23:31.410 回答