NLB健康检查异常排查方法

NLB健康检查用于探测您的后端服务器是否处于正常工作状态,当健康检查出现异常时,通常说明您的后端服务器出现了异常,但也可能是您的健康检查或后端服务器配置不正确导致,本文主要介绍网络型负载均衡NLB健康检查出现异常的解决方法。

问题描述

NLB实例的监听对应的健康检查状态显示异常

问题原因

如果您是首次配置健康检查时出现异常,推荐您优先排查健康检查配置问题。可以通过以下两类原因进行排查。

  • 健康检查参数设置错误

  • 监听端口问题

如果您是配置成功后健康检查出现异常,推荐您优先排查后端服务器问题。可以通过以下原因进行排查。

  • 安全类防护软件问题

  • 路由配置错误问题

  • 后端服务器负载过高

解决方案

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

原因一:健康检查参数设置错误

  1. 登录网络型负载均衡NLB控制台
  2. 在顶部菜单栏,选择NLB实例所属的地域。

  3. 在左侧导航栏,选择网络型负载均衡 NLB > 服务器组

  4. 服务器组页面,找到目标NLB实例挂载的服务器组,然后单击编辑健康检查

  5. 编辑健康检查对话框,检查健康检查参数设置是否正常,建议按照默认提供的健康检查参数进行设置。

原因二:监听端口问题

一、检查健康检查端口

  1. 登录网络型负载均衡NLB控制台
  2. 在顶部菜单栏,选择NLB实例所属的地域。

  3. 在左侧导航栏,选择网络型负载均衡 NLB > 服务器组

  4. 服务器组页面,找到目标NLB实例挂载的服务器组,然后单击服务器组ID。

  5. 在服务器组详情页,单击后端服务器页签,查看并记录后端服务器端口。

  6. 在服务器组详情页,单击详细信息页签,在健康检查区域单击编辑健康检查。在编辑健康检查对话框,查看并记录健康检查参数。

TCP监听场景

  1. 登录后端服务器,执行以下命令,尝试连接健康检查端口。

    关于如何登录后端服务器,请参见ECS远程连接操作指南

    telnet [$IP] [$Port]
    说明
    • [$IP]为后端服务器私网IP地址。

    • [$Port]为该服务器组设置的健康检查的探测端口,如果没有手动配置过健康检查端口,默认使用的是后端服务器端口,如果配置了健康检查端口,则使用配置的健康检查端口。

  2. 查看命令执行结果。

    命令返回类似“telnet: connect to address [$IP]: Connection refused”的信息,即系统提示无法连接到该主机,连接被拒绝,如下图所示。说明后端服务器上健康检查端口处于异常状态。image

    命令返回类似“Connected to [$IP]”的信息,如下图所示。说明后端服务器上健康检查端口处于正常工作(监听)状态。image

UDP监听场景

  1. 登录后端服务器,执行以下命令,查看健康检查端口状态。

    关于如何登录后端服务器,请参见ECS远程连接操作指南

    netstat -anu | grep [$IP]:[$Port]
    说明
    • [$IP]为后端服务器私网IP地址。

    • [$Port]为该服务器组设置的健康检查的探测端口,如果没有手动配置过健康检查端口,默认使用的是后端服务器端口,如果配置了健康检查端口,则使用配置的健康检查端口。

  2. 查看命令执行结果。

    命令返回没有[$IP]:[$Port]的条目,如下图所示。说明后端服务器上健康检查端口处于异常状态。

    image

    命令返回[$IP]:[$Port]的条目,如下图所示。说明后端服务器上健康检查端口处于正常工作(监听)状态。image

二、排查是否是相关后端服务器没有启动或后端服务器端口和健康检查端口不一致等原因,本小节以Nginx服务为例进行演示。

  1. 登录异常后端服务器,执行以下命令,查看Nginx服务状态。

    systemctl status nginx
  2. 系统显示类似如下,说明服务没有启动。

    image

  3. 执行以下命令,启动Nginx服务。

    systemctl start nginx
  4. 然后执行以下命令,查看Nginx服务状态。

    systemctl status nginx

    系统显示类似如下,说明服务是启动状态。image

  5. 登录网络型负载均衡NLB控制台,分别进行以下操作。

    1. 在左侧导航栏,选择网络型负载均衡NLB > 服务器组

    2. 服务器组页面,找到目标服务器组实例,在操作列单击编辑健康检查

    3. 编辑健康检查对话框,查看健康检查端口[$Port]。image

    4. 查看健康检查是否正常,如果不正常,执行以下命令,查看Nginx服务监听端口。

      netstat -tanp |grep nginx
  6. 系统显示类似如下,与[$Port]端口不一致。

    image

    编辑/etc/nginx/nginx.conf文件,找到并修改此listen值,将此值修改成[$Port],然后保存并退出。

    说明

    当业务场景不适合修改此listen值,可以参见NLB监听概述根据应用场景重新修改对应协议的健康检查端口。

    image

  7. 执行以下命令,重启Nginx服务,然后等待片刻,确认健康检查正常。

    systemctl restart nginx

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

原因一:安全类防护软件问题

NLB实例使用VPC网段与后端服务器通信,请确保后端服务器没有对NLB实例的该网段进行任何形式的屏蔽,包括Iptables或其他任何第三方安全策略软件。NLB实例的该网段被屏蔽会导致健康检查异常,NLB将无法正常工作。本节以Iptables为例,检查NLB使用的私网地址段屏蔽情况。

  1. 登录网络型负载均衡NLB控制台,查看NLB实例与后端服务交互使用的本地IP地址。

    image

  2. 登录异常后端服务器实例,执行以下命令,查看filter表的所有规则。

    iptables -nL

    如果返回类似以下信息,说明后端服务器禁止NLB的本地IP地址请求。

    image

  3. 执行以下命令,即可删除此规则。

    iptables -t filter -D INPUT -s 192.168.20.75 -j DROP  #IP地址仅为示例
    说明

    命令中的IP地址需要根据实际场景中NLB使用的私网地址修改。

  4. 执行以下命令,确认没有禁止NLB的私网地址段请求。

    iptables -nL

  5. 确认NLB实例的监听对应的健康检查状态显示正常

原因二:路由配置错误问题

当在后端服务器的路由配置了NLB实例使用的VPC网段,会导致NLB实例收不到健康检查探测的数据包,从而导致健康检查异常。本节以Linux下的route命令为例,检查路由配置情况。

  1. 登录网络型负载均衡NLB控制台,查看NLB实例与后端服务交互使用的本地IP地址。

    image

  2. 登录问题后端服务器,执行以下命令,检查当前系统的路由配置情况。

    route -n

    若您发现存在路由条目的Destination为NLB实例与后端服务交互使用的本地IP地址,Genmask为255.255.255.255,且Gateway没有指向对应网卡的默认网关(当Destination为0.0.0.0时,Gateway显示的信息就是默认网关),则该路由配置错误。

    image

  3. 执行以下命令,删除配置的错误路由。

    ip route del blackhole 192.168.20.75 #IP地址仅为示例
    说明

    命令中的IP地址需要根据实际场景中NLB使用的私网地址修改。

  4. 确认NLB实例的监听对应的健康检查状态显示正常

原因三:后端服务器负载过高

参见Linux实例负载高问题排查和异常处理,查看是否是后端服务器负载过高导致的问题。

相关文档

您还可以通过NLB实例诊断功能进行NLB健康检查异常排查,具体操作可参考NLB实例诊断