Amazon ELB自动运行状况检查有何功能以及预期结果如何?

时间:2012-04-13 09:53:11

标签: amazon-ec2 amazon-web-services amazon-elb

事情就是这样:

  1. 我们已经实现了一个C ++ RESTful API服务器,内置HTTP解析器,没有标准的HTTP服务器,如apache或类似的任何东西
  2. 在亚马逊结构中使用了几个月,使用普通和SSL通信,并且没有发现任何与亚马逊基础架构相关的问题
  3. 我们正在使用Amazon ELB部署我们的第一个后端
  4. 亚马逊ELB有一个可自定义的健康检查系统,但也是一个自动健康检查系统,如here所述
  5. 我们没有找到健康检查系统发送的数据的文档
  6. 后端简单挂起套接字读取指令,最终关闭连接
  7. 我没有找到问题的解决方案,因为后端不是基于标准的Web服务器,只是有人知道ELB健康检查系统发送了什么类型的消息,因为我们&#39 ;在任何地方都找不到关于此的文档。

    非常感谢帮助。谢谢。

2 个答案:

答案 0 :(得分:33)

  

Amazon ELB有一个可自定义的健康检查系统,但也是一个   自动的,如here所述

使用可自定义,您可能会参考可通过AWS管理控制台(请参阅Configure Health Check Settings)或通过API(请参阅ConfigureHealthCheck)配置的运行状况检查。

HealthCheck数据类型文档的 Target 字段概述了以这种方式配置健康检查的要求:

  

指定要检查的实例。协议是TCP,   HTTP,HTTPS或SSL。有效端口的范围是一(1)到   65535

     

注意

     
      
  • TCP是默认值,例如,指定为TCP:端口对   “TCP:5000”。在这种情况下,运行状况检查只是尝试打开TCP   连接到指定端口上的实例。 无法连接   在配置的超时内被认为是不健康的。

  •   
  • SSL也被指定为SSL:端口对,例如,SSL:5000。

  •   
  • 对于HTTP或HTTPS协议,情况有所不同。您必须这样做   在字符串中包含一个ping路径。 HTTP被指定为   HTTP:端口; /; PathToPing;例如,分组   “HTTP:80 /天气/美国/ WA /西雅图”。在这种情况下,HTTP GET请求是   发给给定端口和路径上的实例。 任何其他答案   超时期限内的“200 OK”被认为是不健康的。

  •   
  • HTTP ping目标的总长度需要为1024 16位   Unicode字符或更少。

  •   
     

[强调我的]

使用自动,您可能会参考Why is the health check URL different from the URL displayed in API and Console?原因中描述的运行状况检查:

  

除了为负载均衡器配置的运行状况检查外,   服务执行第二次健康检查以防止   实例在没有终止的情况下导致的潜在副作用   被取消注册。要执行此检查,负载平衡器将打开一个   配置运行状况检查的同一端口上的TCP连接   使用,然后在运行状况检查后关闭连接   完成。 [强调我的]

段落解决方案在此澄清了有效负载为零,即它类似于上面针对可配置运行状况检查所描述的非HTTP / HTTPS方法:

  

这项额外的健康检查不会影响您的表现   应用程序,因为它不会向您的后端发送任何数据   实例。您无法禁用或关闭此运行状况检查。

摘要/解决方案

假设您的 RESTful API服务器(内置HTTP解析器)应该只提供HTTP,您需要处理两项运行状况检查:

  1. 您自己配置的第一个作为HTTP:端口; /; PathToPing - 您将收到HTTP GET请求,并且必须在指定的超时内使用200 OK回答被认为是健康的时期。
  2. 服务自动配置的第二个 - 它将在上面配置的HTTP端口上打开TCP连接,不会发送任何数据,然后在运行状况检查完成后关闭连接。
  3. 总之,您的服务器似乎已经表现得非常好了,您只是对第二次健康检查的行为感到恼火 - ELB是否真的认为您的服务器不健康?

答案 1 :(得分:1)

据我所知,这只是一个寻找200 OK http响应的HTTP GET请求。