CLB通过健康检查判断后端服务器可用性。开启健康检查功能,当后端服务器异常时,CLB将请求分发到其他正常服务器;当服务器恢复正常时,CLB会将其恢复到服务中。该机制提高了用户业务整体可用性,避免局部服务器异常对总体服务的影响,是保证业务高可用性的关键要素,相关原理可参考CLB健康检查。
前提条件
配置健康检查前,确保后端服务器已部署相关服务。
使用限制
配置的监听协议与健康检查协议对应关系如下:
TCP监听仅支持选择TCP、HTTP健康检查协议。
UDP监听支持选择TCP、UDP、HTTP健康检查协议。
HTTP/HTTPS监听仅支持选择HTTP健康检查协议。
配置健康检查
您可以在添加监听时配置健康检查,通常使用默认健康检查配置即可。
在顶部菜单栏,选择实例所属的地域。
在实例管理页面,找到目标实例,单击实例ID。
在实例详情页,单击监听页签,单击添加监听或在目标监听操作列单击修改监听配置。
根据配置向导完成监听配置,直至进入健康检查配置向导页面,健康检查默认开启。
单击高级配置右侧的修改,完成以下健康检查配置。
健康检查配置
说明
健康检查协议
选择健康检查协议类型。
TCP模式的健康检查是基于网络层探测,通过发送SYN握手报文来检测服务器端口是否存活。
UDP模式的健康检查通过UDP报文探测来获取状态信息。
HTTP模式的健康检查是通过发送HEAD或GET请求模拟浏览器的访问行为来检查服务器应用是否健康。
健康检查方法
(仅HTTP健康检查协议支持)
支持HEAD和GET方法,默认使用HEAD方法。
说明若HEAD方法不支持或被禁用,可使用GET方法。
使用GET方法时,Response长度超过8K会被截断,但不影响健康检查结果。
健康检查端口
健康检查服务访问后端时的探测端口。默认使用后端服务器的端口进行健康检查。
说明如果该监听配置的后端服务器组内的后端服务器的端口都不相同,则不需要配置检查端口。负载均衡系统会使用各自的后端服务器端口进行健康检查。
健康检查路径
(仅HTTP健康检查协议支持)
HTTP健康检查默认由负载均衡系统向该服务器应用配置的默认首页发起HTTP请求。
如果您用来进行健康检查的页面并不是应用服务器的默认首页,需要指定具体的检查路径。
建议使用静态页面进行健康检查。
健康检查域名(仅HTTP健康检查协议支持)
配置健康检查域名后,CLB会将该域名添加到请求头的
Host字段。未配置域名时,请求头中不会附带Host字段。部分应用服务器会校验
Host字段,未配置域名会导致请求被拒绝,健康检查失败。因此服务器需要校验Host字段,需配置健康检查域名以确保健康检查正常。说明负载均衡在执行健康检查时,不关注转发策略,而是按照监听器上配置的健康检查路径(默认使用根路径)进行检查。当您的后端服务需要根据不同的路径来响应不同的请求时,如果健康检查仍然按照默认或不匹配的路径进行,就可能导致健康检查失败。您可以根据需要在监听的转发规则中配置健康检查路径。
正常状态码
(仅HTTP健康检查协议支持)
选择健康检查正常的HTTP状态码。默认值为http_2xx和http_3xx。可选值包括 http_2xx、http_3xx、http_4xx 和 http_5xx。
CLB 健康检查默认仅将 HTTP 2XX 和 3XX 状态码视为健康状态。如果后端服务器返回 4XX(如 400、403、404)或 5XX(如 500、502、503)状态码,健康检查将判定为失败,该后端服务器将被标记为异常并停止接收流量。
警告将 4XX 或 5XX 纳入健康状态码可能导致真实故障实例无法被及时剔除。例如,当后端服务器返回 500 内部错误时,如果配置了接受 http_5xx,该异常实例仍会被判定为健康并继续接收流量。建议仅在充分评估后使用该配置,优先确保后端服务返回正确的 2XX 或 3XX 状态码。
常见导致 4XX 状态码的场景:
404 错误:健康检查路径不存在、后端服务未正确部署、域名绑定问题、HEAD 方法不支持
403 错误:后端服务拒绝访问、IP 访问限制、权限校验失败
400 错误:Host 头缺失、HTTP 协议版本不兼容、请求格式问题
健康检查响应超时时间
每次健康检查响应的最大超时时间。
如果后端服务器在指定的时间内没有正确响应,则判定为健康检查失败。
健康检查间隔时间
进行健康检查的时间间隔。
负载均衡集群内所有节点,都会独立、并行地遵循该属性对后端服务器进行健康检查。由于各节点的检查时间并不同步,所以,如果从后端某一服务器上进行单独统计,会发现来自负载均衡的健康检查请求在时间上并不会遵循上述时间间隔。
健康检查健康阈值
云服务器从失败到成功的连续健康检查成功次数。
健康检查不健康阈值
云服务器从成功到失败的连续健康检查失败次数。
健康检查请求和健康检查返回结果(仅UDP健康检查协议支持)
为UDP监听配置健康检查时,您可以在健康检查请求中输入请求的内容(例如youraccountID),在健康检查返回结果中输入预期的返回结果(例如slb123)。
同时在后端服务器的应用逻辑中加入相应的健康检查应答逻辑,如收到youraccountID的请求时,回应slb123。
此时,当负载均衡收到后端服务器发来的正确响应时,则认为健康检查成功,否则认为健康检查失败。这种方式能最大程度确保UDP健康检查的可靠性。
单击下一步直至监听配置完成。
查看健康检查状态
在顶部菜单栏,选择实例所属的地域。
在实例管理页面,找到目标实例,单击实例ID。
在实例详情页,单击监听页签,查看监听的健康检查状态。
健康检查主要包括以下状态:
初始化:表示健康检查后端服务器列表初始化中。
正常:表示不存在异常状态的后端服务器。
异常:表示存在异常状态的后端服务器。
未打开:表示健康检查未开启。
单击对应监听后的异常或者初始化,可以查看监听健康检查为异常/初始化的监听/转发策略、服务器组、云服务器/端口、健康状态和异常原因。
关闭健康检查
高频率的健康检查可能影响业务访问。建议通过降低检查频率、增大间隔等方式减少影响,但不建议关闭健康检查以保障业务持续可用。
您可以关闭健康检查功能,但关闭健康检查后,当后端某个ECS出现异常时,CLB还是会把请求转发到该异常的ECS上,造成部分业务不可访问。因此,建议一般情况下不要关闭健康检查。
在顶部菜单栏,选择实例所属的地域。
在实例管理页面,找到目标实例并单击实例ID。
在实例详情页,单击监听页签,单击添加监听或在目标监听操作列单击修改监听配置。
根据配置向导完成监听配置,直至进入健康检查配置向导页面。
关闭健康检查开关,单击下一步并提交确认。
健康检查最佳实践
为确保健康检查的准确性和可靠性,建议您遵循以下最佳实践:
创建专用健康检查端点:推荐在后端服务器上创建专用的健康检查接口(如
/health),该接口应始终返回 HTTP 200 状态码。避免使用业务路径(如/)作为健康检查路径,因为业务路径可能因权限校验、资源不存在等原因返回 4XX 状态码。优先修复后端服务问题:当健康检查返回非预期状态码时,优先排查并修复后端服务问题,确保健康检查路径返回正确的 2XX 或 3XX 状态码,而非简单地放宽健康检查的状态码判定条件。
使用 curl 命令模拟健康检查:在排查健康检查问题时,可以登录后端服务器使用以下命令模拟 CLB 的健康检查行为:
curl -Iv -X HEAD --http1.0 -H "Host: your-domain.com" http://127.0.0.1:80/health_path其中
HEAD为健康检查方法,your-domain.com为健康检查域名(如未配置可省略 -H 参数),/health_path为健康检查路径。确保 CLB 地址段未被屏蔽:CLB 使用地址段 100.64.0.0/10 与后端服务器通信进行健康检查。请确保该地址段未被 iptables 或其他防火墙规则屏蔽。
相关文档
如果您不了解CLB健康检查机制,您可参考CLB健康检查。
如果您遇到CLB健康检查相关问题,您可参考CLB健康检查FAQ进行问题定位处理。
您可通过CLB提供的健康检查日志功能,分析服务器健康检查日志数据,详情可参考存储和下载健康检查日志。