负载均衡健康检查使用的误区和最佳实践

发布时间 : 星期一 文章负载均衡健康检查使用的误区和最佳实践更新完毕开始阅读

负载均衡健康检查的使用误区和最佳实践

本文章来自于阿里云云栖社区

分析用户提交的负载均衡(简称 SLB)工单,我们发现很多SLB异常问题与不合理的健康检查策略相关。例如:

?

健康检查间隔设置过长,SLB无法及时准确发现后端ECS出现服务不可用,造成实际业务中断。

? 使用HTTP模式健康检查,未合理配置后端日志记录模块,导致后端日志内容记录大量健康检查HEAD日志,造成磁盘负载压力。

原理要点

SLB服务通过健康检查机制检测后端云服务器池中ECS的健康状态,自动隔离异常状态的ECS,从而解决了单台ECS的单点问题,同时提高了应用的整体服务能力。关于健康检查的原理,详情请参考官网知识点,

? 负载均衡健康检查原理浅析 文章重点阐述了如下几个方面:

? 健康检查处理过程 ? 健康检查策略配置说明 ? 健康检查机制说明 ? 健康检查状态切换时间窗

总结要点如下:

1、4层TCP协议的健康检查通过TCP 3次握手检查后端ECS 端口是否处于监听转台。与常规TCP连接使用TCP FIN方式销毁不同,健康检查的TCP连接在3次握手建立成功后,发起方以TCP Reset方式主动将连接断开。

2、7层HTTP协议的健康检查通过HTTP HEAD 请求检查指定URL路径的返回值,如果返回值与自定义的健康检查成功返回值相匹配,则判定检查成功。

3、SLB使用4层TCP 协议监听时,健康检查方式可选 TCP协议或 HTTP协议。

4、4层UDP协议的健康检查是通过ICMP Port Unreachable消息来判断,可能存在服务真实状态与健康检查不一致的问题,我们后续会持续产品改进解决该问题。

5、健康检查机制的引入,有效提高了承载于SLB的业务服务的可用性。但是,为了避免频繁的健康检查失败引发的切换,对系统可用性带来的冲击,健康检查只有在【连续】多次检查成功或失败后,才会进行状态切换(判定为健康检查成功或失败)。

使用误区

如下是通过工单梳理总结的健康检查常见的理解和使用误区。

误区1 : 怀疑SLB健康检查形成DDoS攻击,导致服务器性能下降。

例如,有用户误认为SLB使用上百台机器进行健康检查,大量高频次的TCP请求会形成DDoS攻击,造成后端 ECS性能低下。但实际上,无论是4层TCP/UDP或7层HTTP协议的健康检查,都根本无法形成DDoS攻击。

原理上,SLB集群会利用多台机器(假定M,个位数级别)对后端 ECS 的每个服务监听端口 (假定N) ,按照配置的检查间隔(假定O秒,一般建议最少2秒)进行健康检查。以4层TCP协议为例,每秒的TCP连接建立数为:M*N/O。

因此,健康检查带来的每秒TCP并发数,主要取决于创建的监听端口数量。除非监听端口达到巨量,否则健康检查对后端ECS的TCP并发连接请求根本无法达到SYN Flood的攻击级别,实际对后端ECS的网络压力极低。

误区2 : 用户为了避免SLB健康检查的影响,将健康检查间隔设置很长。

该配置会导致当后端ECS出现异常时,SLB需要较长时间才能侦测到后端ECS不可用。尤其当后端ECS间断不可用时,由于SLB需要【连续】检测失败时才会移除异常ECS,这会导致SLB集群可能根本无法发现后端ECS不可用。

举一个实际案例: 背景信息:

用户使用后端有2台ECS的1个4层 TCP协议的公网SLB,对外提供服务,TCP协议的健康检查间隔设置为50秒。某天用户做了应用代码改进后,发布到1台测试ECS,而后将该ECS加入SLB。但是由于应用问题以及不合理的健康检查的设置,出现了连续2次的业务不可用。下图\失败连接数趋势\代表SLB转发到后端ECS但无法建立连接的TCP3次握手失败的连接数。在SLB正常工作时其值应该为0。

图示. 失败连接数趋势

从图中可以看到,出现了2次SLB转发失败,业务间断不可用的情况。 阶段1: 15:29 - 16:44:该问题由于应用代码的原因导致。

阶段2: 17:12起 : 该问题由于ECS内核参数的配置错误,单台ECS无法承担业务量导致。

如下是复盘的详细过程:

【15:26】用户创建ECS机器(假定名称i-test),部署最新的应用代码,加入SLB集群中。 【15:29】由于新应用代码的问题,SLB将请求转发至该ECS后,其CPU飙升至100%。

图示. ECS CPU

前图\失败连接数趋势\显示15:30分SLB的TCP转发失败连接数开始飙升,原因就是新加入的ECS i-test机器在CPU 100%的情况下出现业务不可用。15:34分开始,后端的ECS健康检查日志中出现健康检查失败的信息。但由于健康检查的间隔为50秒,而后端ECS i-test也不是完全不响应,偶尔的TCP 三次握手健康检查还可以成功,因此未出现【连续】健康检查失败,所以该SLB的监听端口未报出异常状态。

联系合同范文客服:xxxxx#qq.com(#替换为@)