我们如何检查ELB **自己的**实例健康/连接?

请注意,这个问题是关于ELB本身,而不是ELB背后的EC2实例

情况

我们最近经历了以下ELB问题:

  • 50%的请求没有达到我们的后端,看来ELB本身也是如此
  • 通过AWS控制台的ELB监控没有显示任何exception(零ELB 4xx和ELB 5xx)
  • 外部检查证实我们的后端EC2实例运行良好,可以到达

我们的假设是ELB运行的EC2实例存在连接问题。 临时修复是创build新的ELB(在我们的EC2实例的同一组前面)并更改DNSlogging。

问题

  • 这是经常发生的事情吗?
  • 有没有什么工具可以快速检测到这个(我们总是认为这是我们的错,只有经过彻底的检查,我们才开始看AWS)
  • 有没有一种方法可以避免这一切发生

Route 53运行状况检查特别支持ELB实例运行状况监视和故障转移。

启用后,Route 53会自动configuration和pipe理单个 ELB节点的运行状况检查。

路由53 DNS故障转移能够评估负载均衡器的运行状况以及运行在其后面的EC2实例上的应用程序的运行状况。 换句话说,如果堆栈的任何部分出现故障,路由53将检测到故障并将stream量从故障端点发送出去。

https://aws.amazon.com/blogs/aws/amazon-route-53-elb-integration-dns-failover/

基本上,这个解决了个别ELB节点没有固定IP的问题,而事实上很难判断你的应用程序或ELB本身是否失败。

您应该可以使用它来故障转移到在同一地区的单独的ELB,或者到一个完全不同的地区。 您可以将Route53监video率设置为每10秒一次,并且Route 53别名logging上的TTL通常为60秒,这应该可以让您了解如何快速进行故障转移。

Amazon ELB是一个SaaS产品,因此在不知道底层技术的情况下提出build议是非常困难的,所以您应该真正使用Amazon支持渠道来获得这些问题的答案,

不过,我想就您实施ELB提出如下build议:

将您的后端实例分布在多个可用区域中,并且不要在没有至less一个实例的情况下保留一个AZ。 理想情况下,使用AZ平衡自动缩放。

如果您configuration了两个AZ, 并且禁用了交叉AZ平衡, 并且一个AZ的健康实例为零,则您的stream量中的50%将转到ELB实例,而没有后端。

这是因为ELB端点工作的方式(我相信)是循环的DNS。 ELB针对与ELB相关联的每个AZ具有公共IP。

通过closures交叉AZ平衡选项,您可以将ELB的每个“支路”视为特定于AZ的HAproxy实例,仅平衡与自己的AZ池的连接。 启用跨域可用性后,每个ELB实例将平衡后端池中的所有节点。

设置您的Web服务器以提供包含为请求提供服务的实例ID的X-Served-By标头。

这可以帮助诊断具有间歇性问题的潜在故障实例,并使您能够快速validationELB是否确实与所有节点平衡。

阅读有关最佳实践的Amazon文档,并考虑使用第三方监视工具(技术上针对ServerFault指南,但我build议使用StackDriver和NewRelic )。

通过深入研究Amazon文档以及CloudWatch指标,您可以学到很多东西。 亚马逊的后者界面可能令人沮丧,所以第三方工具可以提供帮助,并且还可以通过实例代理为您提供指标。