为什么Elastic Load Balancing报告“无法使用”?

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

我已将每个实例都添加到负载平衡器,但是他们都返回“ Status: Out of Service因为他们的健康检查失败。 我大多感到困惑,因为我可以访问其公有DNS中的每个实例,但每当访问负载均衡器DNS名称时都会收到超时。

我一直在试着读通过所有的文档和谷歌search,但我卡住了。 任何指针或正确的方向链接将不胜感激。

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

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

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

最后我得到了这个工作。 问题出在亚马逊安全组上 ,因为我已经将访问端口80限制在开发区域的几台机器上,负载平衡器无法访问实例上的Apache服务器。 一旦负载均衡器访问我的实例,它就进入服务

我在我的实例中使用了tail -f /var/log/apache2/access.log来检查它,以validation负载平衡器是否试图访问我的服务器,并查看服务器给负载平衡器的答案。

希望这可以帮助。

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

我面临同样的问题,我改变了从https协议到ssl .. 它的工作!

进入运行状况检查 - >单击编辑运行状况检查 - >将协议从HTTPS更改为SSL
 Ping目标SSL:443
超时5秒
间隔30秒
不健康的阈值5
健康的门槛10

如果您的Web服务器运行正常,那么这意味着运行状况检查将返回一个不返回200的URL。

一个适用于我的技巧:继续实例,inputcurl localhost:80 / pathofyourhealthcheckurl

你可以适应你的健康检查url,始终有一个200响应。

我想为您提供解决此问题的一般方法。 当你build立你的web服务器,如apache或nginx,尝试读取访问日志文件,看看发生了什么。 在我的情况下,它报告401 error因为我已经在nginx中添加了基本的身份validation。 当然,就像@ivankoni提醒的那样,这可能是因为你检查的文件不存在。

我正在研究托pipe一个Web应用程序的AWS教程,并遇到了这个问题。 步骤7b陈述如下:

“将Pingpath设置为/。这会将查询发送到您的默认页面,无论它是否被命名为index.html或其他东西。”

他们本可以用这个“/”来引用前面的斜杠。 确保你在健康检查中有这个,而不是这个“/”。 。

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

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

例如,如果您的端点应该是/app/health/但您只在ELB的运行状况检查端点字段中input/app/health (没有结尾斜杠),则不会得到200响应,因此运行状况检查将失败。