我已经在 Google Cloud 上配置了负载均衡器 https,其健康检查具有以下参数:
健康检查 :
Interval : 30 seconds
Timeout : 15 seconds
Healthy threshold: 1 success
Unhealthy threshold : 2 consecutive failures
我注意到健康检查引发了大量请求,并且服务器在没有用户实际流量的情况下扩展到 6 个虚拟机。健康检查是否引发了内部流量,从而导致服务器变慢?
答案1
通过这些设置,健康检查的行为如下:
Interval : 30 seconds
Timeout : 15 seconds
Healthy threshold: 1 success
Unhealthy threshold : 2 consecutive failures
同时为多个冗余系统配置健康检查参数。每个系统都应用间隔和超时设置。
每个健康检查探测器执行以下操作:
2a. 每 30 秒从其中一个源 IP 地址发起到后端实例的 HTTP 连接。
2b. 等待最多十五秒以获得 HTTP 200(OK)响应代码。
- 当至少一个健康检查探测系统执行以下操作时,后端被视为不健康:
3a. 未收到一次探测的 HTTP 200(OK)响应代码。例如,连接可能被拒绝,或者连接或套接字可能超时。
3b. 收到两个连续的不符合协议特定成功标准的响应。
- 当至少一个健康检查探测系统收到一个符合特定协议的成功标准的响应时,后端被视为健康。
在此示例中,每个探测器每 30 秒发起一次连接。无论超时时间长短(无论连接是否超时),探测器的两次连接尝试之间都会间隔 30 秒。换句话说,超时必须始终小于或等于间隔,并且超时永远不会增加间隔。*
在此示例中,每个探测器的计时如下所示(以秒为单位):
t=0:开始探测A。
t=15:停止探测器A。
t=30:启动探测B。
t=45:停止探测器B。
t=60:开始探测C。
t=75:停止探测C。
健康检查确定后端是否响应流量。
我建议您将这些值更改为:
超时:5秒
健康阈值:2次成功
答案2
健康检查不健康或不合格的可能原因:
- 防火墙规则阻止健康检查的源 IP 范围访问
- 实例未侦听目标端口
- 未安装客户环境
- 确认防火墙规则允许健康检查的源 IP 范围连接到实例:健康检查规则
- 确保您可以从同一网络中的另一个实例通过 telnet 连接到用于健康检查的端口:
telnet <instance-ip> <dst-port>
- 确保健康检查 IP 范围内的 TCP 段能够到达实例:
tcpdump -i any -ttn 'host <ilb-ip> and (net 130.211.0.0/22 or net 35.191.0.0/16)'
- 确保已安装来宾环境,以便将 NIC 配置为侦听 ILB IP 地址:验证客户环境
请参考以下链接:
什么是良好的自愈健康检查
防火墙规则的重要性