为啥我看到 ELB 运行状况检查加倍?

Posted

技术标签:

【中文标题】为啥我看到 ELB 运行状况检查加倍?【英文标题】:Why am I seeing ELB health checks doubling up?为什么我看到 ELB 运行状况检查加倍? 【发布时间】:2015-09-18 08:51:46 【问题描述】:

我有一个具有以下配置的 ELB:

可用区:ap-southeast-1a 和 ap-southeast-1b 跨区域负载平衡:已启用 连接设置:空闲超时:300 秒

健康检查详情:

Ping 目标 HTTPS:443/login 超时 15 秒 间隔 20 秒 不健康阈值 5 健康门槛 3

听众详情:

TCP 在端口 443 上,转发到实例端口 443,nginx 正在侦听并执行 ssl 终止。

我不断在 nginx 日志中看到双重健康检查调用。在同一时刻到来,至少在同一秒。

为什么?

【问题讨论】:

【参考方案1】:

在多个可用区中启动的 ELB 具有大量流量,对于配置 ELB 的每个可用区,几乎总是至少有一个活动的 ELB 节点,无论是否有任何该可用区内的实例存在或正常。

如果您检查传入运行状况检查请求的源 IP 地址,您应该会发现它们不同。特别是在启用跨区域负载平衡的情况下,您应该会看到 each ELB 节点在每个时间间隔进行一次健康检查,因为每个 ELB 节点都会向每个实例发送健康检查。

我刚才的日志中的例子:

Jul  1 19:22:25 localhost 172.17.0.251:4076 ELB-HealthChecker/1.0 "GET / HTTP/1.1" 
Jul  1 19:22:25 localhost 172.17.10.98:42667 ELB-HealthChecker/1.0 "GET / HTTP/1.1" 

请注意,172.17.*.* 在我的 VPC 中,并且这两个 IP 地址在我的两个“公共”子网上的范围内……但它们是什么?这些是 ELB 节点的内部私有 IP 地址。

请注意,ELB“节点”是一个我可能刚刚编造或未编造的术语,但它描述了 EC2 已隐形配置为充当弹性负载均衡器的虚拟机。 (ELB 显然部署在由 ELB 基础设施控制的 EC2 实例上,这些在您的 AWS 控制台中绝对不可见)。

您无需为这些机器单独付费,因此您通常不必关心有多少。它们会随着流量负载自动放大和缩小——轶事观察表明节点的实例类可能是动态的,节点的数量也是如此。每个节点理论上最多可以支持到后端服务器的 64K 连接,但在达到这样的数字之前可能会出现其他容量限制。

您可以对 ELB 主机名使用 dig 实用程序在任何给定时间了解 ELB 集群中有多少节点,如控制台中所示。

$ dig xxxxxxxx-yyyyyyyy.us-west-2.elb.amazonaws.com

; <<>> DiG 9.8.1-P1 <<>> xxxxxxxx-yyyyyyyy.us-west-2.elb.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38905
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 13, ADDITIONAL: 9

;; QUESTION SECTION:
;xxxxxxxx-yyyyyyyy.us-west-2.elb.amazonaws.com. IN A

;; ANSWER SECTION:
xxxxxxxx-yyyyyyyy.us-west-2.elb.amazonaws.com. 59 IN A 54.149.x.x
xxxxxxxx-yyyyyyyy.us-west-2.elb.amazonaws.com. 59 IN A 54.201.x.x

两个A-record 答案大概意味着两个节点。虽然 AWS 可以使用地址转换和其他网络黑客来伪装单个地址后面的多台机器,或多个地址后面的一台机器,但观察表明,您收到的响应 DNS 查询的答案数量为您提供了当前的节点数量为您的 ELB 部署。

【讨论】:

以上是关于为啥我看到 ELB 运行状况检查加倍?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Nginx/Tomcat 的 EC2/ELB 运行状况检查失败

Amazon ELB 自动运行状况检查有啥作用,它有啥期望?

AWS Elastic Beanstalk 运行状况检查偶尔失败

ELB 健康检查行为 - 健康阈值

如何在Elastic Load Balancer运行状况检查中获取302重定向的URL?

在 Elastic beanstalk 中将 ELB 设置为 Autoscaling Health Check Type