如何排查七层(HTTP/HTTPS)健康检查异常问题

免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

问题描述

SLB产品的健康检查用于探测您的后端ECS实例是否处于正常工作状态,当健康检查出现异常时,通常说明您的后端ECS实例出现了异常,但也可能是您的健康检查配置不正确导致,本文主要介绍七层(HTTP/HTTPS)健康检查异常的排查步骤。

问题原因

首次配置健康检查出现异常的主要原因是健康检查配置问题,可以通过以下两类问题进行检查。

配置成功后健康检查出现异常的主要原因是后端ECS实例出现问题,可以通过以下两类问题进行检查。

解决方案

首次配置健康检查出现异常

健康检查参数设置错误

  1. 登录负载均衡控制台,单击目标SLB实例的ID,然后单击监听,再单击修改监听配置
  2. 在配置监听页面单击下一步,再次单击下一步,检查负载均衡健康检查参数设置是否正常,建议按照默认提供的健康检查参数进行设置,详情请参见配置健康检查

监听端口问题

  1. 登录后端ECS实例,确认后端ECS实例上没有对SLB地址段进行过任何形式的屏蔽,包括Iptables或其他任何第三方安全策略软件。因为SLB通过内部保留地址段中的IP地址与后端ECS实例通信,如被屏蔽则会导致健康检查异常,SLB将无法正常工作。
  2. 从后端ECS实例发起访问,确保后端ECS实例上的HTTP服务正常工作。
    1. 登录负载均衡控制台,单击目标SLB实例的ID,然后单击监听,再单击修改监听配置
    2. 在配置监听页面单击下一步,查看并记录后端ECS实例端口。
    3. 在配置监听页面单击下一步,再次单击下一步,查看以下健康检查配置。
    4. 登录后端ECS实例,使用nc或curl命令对后端ECS实例进行探测,本文以nc命令为例,命令如下所示。
      echo -e "[$Method] [$PATH] HTTP/1.0\r\nHost: [$Domain]\r\n\r\n" | nc -t [$IP] [$Port]
      注:
      • [$Method]为上一步查看的健康检查方法。
      • [$PATH]为上一步查看的健康检查路径。
      • [$Domain]为上一步查看的健康检查域名,如果该值为“-----”,说明默认使用各后端ECS实例的内网IP为域名,可以使用[$IP]代替。
      • [$IP]为后端ECS实例内网IP地址。
      • [$Port]为上一步查看的健康检查端口,如果没有手动配置过健康检查端口,默认使用的是后端ECS实例端口,如果配置了健康检查端口,则使用配置的健康检查端口。
    5. 查看命令执行结果的状态码,确认状态码不在第三步查看的健康状态返回码范围内。根据业务场景,如果认为返回的状态码是正常情况,您可以在控制台修改健康状态返回码的范围。如果认为返回的状态码是异常情况,请确认健康检查方法、健康检查端口、健康检查域名和健康检查路径是否配置正确,健康检查的配置详情可以参见配置健康检查

配置成功后健康检查出现异常

安全类防护软件问题

确认后端ECS实例上没有对SLB内网地址段100.64.0.0/10进行过任何形式的屏蔽,包括Iptables或其他任何第三方安全策略软件。因为SLB通过内部保留地址段中的IP地址与后端ECS实例通信,如被屏蔽则会导致健康检查异常,SLB将无法正常工作。本小节以Iptables为例进行演示。

  1. 登录问题后端ECS实例,执行以下命令,查看filter表的所有规则。
    iptables -nL
    系统显示类似如下,说明后端ECS实例禁止SLB内网地址段请求。
  2. 可以参见以下命令,删除此规则即可。
    iptables -t filter -D INPUT -s 100.64.0.0/10 -j DROP
  3. 执行以下命令,确认没有禁止SLB内网地址段请求。
    iptables -nL

后端ECS实例负载过高

参见Linux实例系统负载的查询及分析步骤,查看是否是服务器负载导致的问题。

相关文档

适用于

  • 负载均衡SLB