健康检查概述
GWLB通过健康检查来判断后端服务器的业务可用性。开启健康检查功能后,当某台后端服务器健康检查出现异常时,GWLB会自动将新的请求分发到其他健康检查正常的后端服务器上;而当该后端服务器恢复正常运行时,GWLB会将其自动恢复到GWLB服务中进行流量转发。
健康检查状态
后端服务器的健康检查状态如下所示:
状态 | 说明 |
初始化中 | GWLB实例配置了健康检查,健康检查后端服务器列表初始化中。 |
正常 | 后端服务器运行状态正常。 |
异常 | 后端服务器未响应健康检查或未通过健康检查,表示存在异常状态的后端服务器。 |
未使用 | 后端服务器没有被使用。 |
未开启 | 关闭健康检查。 |
健康检查工作原理
在GWLB的健康检查过程中,请求报文不会通过Geneve协议进行封装。
TCP健康检查
为了提高健康检查效率,健康检查通过定制的TCP探测来获取状态信息,如下图所示。
TCP健康检查的检查机制如下:
GWLB集群中的服务器根据监听的健康检查配置,向后端服务器的私网IP+【健康检查端口】发送TCP SYN数据包。
后端服务器收到请求后,如果相应端口正在正常监听,则会返回SYN+ACK数据包。
如果在【响应超时时间】之内,GWLB集群中的服务器没有收到后端服务器返回的数据包,则认为服务无响应,判定健康检查失败,并向后端服务器发送RST数据包中断TCP连接。
如果在【响应超时时间】之内,GWLB集群中的服务器成功收到后端服务器返回的数据包,则认为服务正常运行,判定健康检查成功,而后向后端服务器发送RST数据包中断TCP连接。
HTTP健康检查
HTTP健康检查通过GET探测来获取状态信息,如下图所示。
HTTP健康检查机制如下:
GWLB集群中的服务器根据监听的健康检查配置,向后端服务器的私网IP+【健康检查端口】+【检查路径】发送HTTP GET请求(包含设置的【域名】)。
后端服务器收到请求后,根据相应服务的运行情况,返回HTTP状态码。
如果在【响应超时时间】之内,GWLB集群中的服务器没有收到后端服务器返回的信息,则认为服务无响应,判定健康检查失败。
如果在【响应超时时间】之内,GWLB集群中的服务器成功接收到后端服务器返回的信息,则将该返回信息与配置的状态码进行比对。如果匹配则判定健康检查成功,反之则判定健康检查失败。
健康检查时间窗
健康检查机制的引入,有效提高了业务服务的可用性。但是,为了避免频繁的健康检查失败引起的切换对系统可用性的冲击,只有在健康检查时间窗内连续多次检查成功或失败后,才会进行状态切换。健康检查时间窗由以下三个因素决定:
健康检查间隔(每隔多久进行一次健康检查)
响应超时时间 (等待服务器返回健康检查的时间)
检查阈值(健康检查连续成功或失败的次数)
健康检查时间窗口的计算方法如下:
健康检查失败时间窗口=响应超时时间×不健康阈值+检查间隔×(不健康阈值-1)
健康检查成功时间窗口= (健康检查成功响应时间x健康阈值)+检查间隔x(健康阈值-1)
说明健康检查成功响应时间是一次健康检查请求从发出到响应的时间。当采用TCP方式健康检查时,由于仅探测端口是否存活,因此该时间非常短,几乎可以忽略不计。当采用HTTP方式健康检查时,该时间取决于应用服务器的性能和负载,但通常都在秒级以内。
健康检查状态对请求转发的影响如下:
如果目标后端服务器的健康检查失败,新的请求不会再分发到相应后端服务器上,所以对前端访问没有影响。
如果目标后端服务器的健康检查成功,新的请求会分发到该后端服务器上,前端访问正常。
如果目标后端服务器存在异常,并且处于健康检查失败时间窗内,而健康检查还未达到检查失败判定次数(默认为三次),则相应请求还是会被分发到该后端服务器,进而导致前端访问请求失败。
健康检查响应超时和健康检查间隔示例
以如下健康检查配置为例:
响应超时时间:5秒
健康检查间隔:2秒
健康阈值:3次
不健康阈值:3次
健康检查失败时间窗口=响应超时时间×不健康阈值+检查间隔×(不健康阈值-1),5×3+2×(3-1)=19s,即以19s为一个时间窗,健康检查响应时间超过19s,健康检查状态为不健康。
从健康状态到不健康状态的检查过程如下图所示:
健康检查成功时间窗口=(健康检查成功响应时间×健康阈值)+检查间隔×(健康阈值-1),(1×3)+2×(3-1)=7s,即以7s为一个时间窗,健康检查成功响应时间低于7s,健康检查状态为健康。
健康检查成功响应时间是一次健康检查请求从发出到响应的时间。当采用TCP方式健康检查时,由于仅探测端口是否存活,因此该时间非常短,几乎可以忽略不计。当采用HTTP方式健康检查时,该时间取决于应用服务器的性能和负载,但通常都在秒级以内。
从不健康状态到健康的状态检查过程如下图所示(假设服务器响应健康检查请求需要耗时1s):
HTTP健康检查中域名的设置
当使用HTTP方式进行健康检查时,可以设置健康检查的域名,但这不是强制选项。因为有些后端服务器会对请求中的host字段做校验,即要求请求头中必须存在host字段。如果在健康检查中配置了域名,则GWLB会将域名配置到host字段中,反之,如果没有配置域名,勾选使用后端服务器内网IP,会用内网IP加端口作为host,因此健康检查请求就会被后端服务器拒绝,可能导致健康检查失败。
综上原因,如果您的后端服务器需要校验请求的host字段,那么就需要配置相关的域名,确保健康检查正常工作。