健康检查概述

更新时间: 2024-11-04 15:22:24

GWLB通过健康检查来判断后端服务器的业务可用性。开启健康检查功能后,当某台后端服务器健康检查出现异常时,GWLB会自动将新的请求分发到其他健康检查正常的后端服务器上;而当该后端服务器恢复正常运行时,GWLB会将其自动恢复到GWLB服务中进行流量转发。

健康检查状态

后端服务器的健康检查状态如下所示:

状态

说明

初始化中

GWLB实例配置了健康检查,健康检查后端服务器列表初始化中。

正常

后端服务器运行状态正常。

异常

后端服务器未响应健康检查或未通过健康检查,表示存在异常状态的后端服务器。

未使用

后端服务器没有被使用。

未开启

关闭健康检查。

健康检查工作原理

说明

在GWLB的健康检查过程中,请求报文不会通过Geneve协议进行封装。

TCP健康检查

为了提高健康检查效率,健康检查通过定制的TCP探测来获取状态信息,如下图所示。

image

TCP健康检查的检查机制如下:

  1. GWLB集群中的服务器根据监听的健康检查配置,向后端服务器的私网IP+【健康检查端口】发送TCP SYN数据包。

  2. 后端服务器收到请求后,如果相应端口正在正常监听,则会返回SYN+ACK数据包。

  3. 如果在【响应超时时间】之内,GWLB集群中的服务器没有收到后端服务器返回的数据包,则认为服务无响应,判定健康检查失败,并向后端服务器发送RST数据包中断TCP连接。

  4. 如果在【响应超时时间】之内,GWLB集群中的服务器成功收到后端服务器返回的数据包,则认为服务正常运行,判定健康检查成功,而后向后端服务器发送RST数据包中断TCP连接。

HTTP健康检查

HTTP健康检查通过GET探测来获取状态信息,如下图所示。

image

HTTP健康检查机制如下:

  1. GWLB集群中的服务器根据监听的健康检查配置,向后端服务器的私网IP+【健康检查端口】+【检查路径】发送HTTP GET请求(包含设置的【域名】)。

  2. 后端服务器收到请求后,根据相应服务的运行情况,返回HTTP状态码。

  3. 如果在【响应超时时间】之内,GWLB集群中的服务器没有收到后端服务器返回的信息,则认为服务无响应,判定健康检查失败。

  4. 如果在【响应超时时间】之内,GWLB集群中的服务器成功接收到后端服务器返回的信息,则将该返回信息与配置的状态码进行比对。如果匹配则判定健康检查成功,反之则判定健康检查失败。

健康检查时间窗

健康检查机制的引入,有效提高了业务服务的可用性。但是,为了避免频繁的健康检查失败引起的切换对系统可用性的冲击,只有在健康检查时间窗内连续多次检查成功或失败后,才会进行状态切换。健康检查时间窗由以下三个因素决定:

  • 健康检查间隔(每隔多久进行一次健康检查)

  • 响应超时时间 (等待服务器返回健康检查的时间)

  • 检查阈值(健康检查连续成功或失败的次数)

健康检查时间窗口的计算方法如下:

  • 健康检查失败时间窗口=响应超时时间×不健康阈值+检查间隔×(不健康阈值-1)image.png

  • 健康检查成功时间窗口= (健康检查成功响应时间x健康阈值)+检查间隔x(健康阈值-1)

    说明

    健康检查成功响应时间是一次健康检查请求从发出到响应的时间。当采用TCP方式健康检查时,由于仅探测端口是否存活,因此该时间非常短,几乎可以忽略不计。当采用HTTP方式健康检查时,该时间取决于应用服务器的性能和负载,但通常都在秒级以内。

    image.png

健康检查状态对请求转发的影响如下:

  • 如果目标后端服务器的健康检查失败,新的请求不会再分发到相应后端服务器上,所以对前端访问没有影响。

  • 如果目标后端服务器的健康检查成功,新的请求会分发到该后端服务器上,前端访问正常。

  • 如果目标后端服务器存在异常,并且处于健康检查失败时间窗内,而健康检查还未达到检查失败判定次数(默认为三次),则相应请求还是会被分发到该后端服务器,进而导致前端访问请求失败。

image

健康检查响应超时和健康检查间隔示例

以如下健康检查配置为例:

  • 响应超时时间:5秒

  • 健康检查间隔:2秒

  • 健康阈值:3次

  • 不健康阈值:3次

健康检查失败时间窗口=响应超时时间×不健康阈值+检查间隔×(不健康阈值-1),5×3+2×(3-1)=19s,即以19s为一个时间窗,健康检查响应时间超过19s,健康检查状态为不健康。

从健康状态到不健康状态的检查过程如下图所示:

image.png

健康检查成功时间窗口=(健康检查成功响应时间×健康阈值)+检查间隔×(健康阈值-1),(1×3)+2×(3-1)=7s,即以7s为一个时间窗,健康检查成功响应时间低于7s,健康检查状态为健康。

说明

健康检查成功响应时间是一次健康检查请求从发出到响应的时间。当采用TCP方式健康检查时,由于仅探测端口是否存活,因此该时间非常短,几乎可以忽略不计。当采用HTTP方式健康检查时,该时间取决于应用服务器的性能和负载,但通常都在秒级以内。

从不健康状态到健康的状态检查过程如下图所示(假设服务器响应健康检查请求需要耗时1s):

image.png

HTTP健康检查中域名的设置

当使用HTTP方式进行健康检查时,可以设置健康检查的域名,但这不是强制选项。因为有些后端服务器会对请求中的host字段做校验,即要求请求头中必须存在host字段。如果在健康检查中配置了域名,则GWLB会将域名配置到host字段中,反之,如果没有配置域名,勾选使用后端服务器内网IP,会用内网IP加端口作为host,因此健康检查请求就会被后端服务器拒绝,可能导致健康检查失败。

综上原因,如果您的后端服务器需要校验请求的host字段,那么就需要配置相关的域名,确保健康检查正常工作。

相关文档

配置和管理健康检查

上一篇: 添加和管理IP监听 下一篇: 配置和管理健康检查
阿里云首页 负载均衡 相关技术圈