为什么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请求(即返回301
或302
响应)。
例如,如果您的端点应该是/app/health/
但您只在ELB的运行状况检查端点字段中input/app/health
(没有结尾斜杠),则不会得到200响应,因此运行状况检查将失败。