为什么Elastic Load Balancing报告“停止运行”?

时间:2011-08-18 14:23:19

标签: amazon-web-services load-balancing amazon-elb

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

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

我一直在尝试阅读所有文档并使用Google搜索,但我被卡住了。任何指向正确方向的指针或链接都将非常感激。

13 个答案:

答案 0 :(得分:20)

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

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

答案 1 :(得分:16)

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

答案 2 :(得分:9)

最后,我得到了这个工作。问题出在亚马逊安全组上,因为我已将对端口80的访问限制在我的开发区域中的少数计算机上,并且负载均衡器无法访问该实例上的apache服务器。一旦负载均衡器获得了对我的实例的访问权限,它就会在服务中

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

希望这有帮助。

答案 3 :(得分:2)

如果您的网络服务器运行正常,则表示运行状况检查会发送到不会返回200的网址。

一个适合我的技巧:继续实例,输入curl localhost:80 / pathofyourhealthcheckurl

在您可以调整您的健康检查网址后,总是有200响应。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

Go to Health Check  --> click on Edit Health Check -- > change Ping protocol from HTTPS to SSL
Ping Target SSL:443
Timeout 5 seconds
Interval    30 seconds
Unhealthy Threshold 5
Healthy Threshold   10

答案 6 :(得分:0)

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

答案 7 :(得分:0)

我正在开发有关托管网络应用的AWS Tutorial并遇到了这个问题。 Step 7b声明如下:

  

"将Ping路径设置为/。这会将查询发送到您的默认页面   它被命名为index.html或其他东西。"

他们本可以在这样的语录中加上正斜杠" /"。确保你在健康检查中有这个而不是这个" /."

答案 8 :(得分:0)

添加这个是因为我花了好几个小时试图解决这个问题......

如果您配置了运行状况检查端点,但仍然显示Out of Service,则可能是因为您的服务器正在重定向请求(即返回301302响应。

例如,如果您的端点应该是/app/health/,但您只需要在ELB上的运行状况检查端点字段中输入/app/health(没有尾部斜杠),那么您将无法获得200响应,所以健康检查会失败。

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

复制html文件后,该问题已解决。

答案 11 :(得分:0)

对于其他未看到此线程的人:

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

例如在端口3000上运行的node.js->将healthcheck指向端口3000;

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

我为此花了一个早晨。是。

答案 12 :(得分:0)

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