本节介绍了如何解决外部运行状况监控器问题。

NSX Advanced Load Balancer 上的外部运行状况监控器使用脚本以提供高度自定义和精细的运行状况检查。脚本可能是 Linux Shell、Python 或 Perl,它们可用于执行 wgetnetcatcurlsnmpget 等。

故障排除步骤

NSX Advanced Load Balancer UI 中未公开 NSX Advanced Load Balancer 的目录结构。只能通过访问管理 Shell 或控制台获取该目录结构。外部运行状况监控器脚本具有有限的访问权限,以免影响 NSX Advanced Load Balancer 系统正常运行。对于外部运行状况监控器脚本,CPU、内存、磁盘和其他资源是有限的。因此,建议为外部运行状况监控器设置宽松的超时时间。

使用 NSX Advanced Load Balancer CLI

在构建外部监控器时,通常会手动测试是否成功执行命令。要从 SE 中执行命令,需要切换到正确的命名空间或租户。生产外部监控器将正确使用相应的租户。

要使用 NSX Advanced Load Balancer CLI 连接到 NSX Advanced Load Balancer SE,请参见《VMware NSX Advanced Load Balancer 管理指南》中的超级用户的 SSH 访问

有关脚本参数的更多信息,请参见外部运行状况监控器

如果外部运行状况监控器脚本提供 stdout 命令输出,则表明成功执行了运行状况监控器。如果脚本未提供任何输出,则将其视为失败。

故障排除示例

检查输出是否写入到 stdout 而不是 stderr

例如,以下用法失败:

netcat -v -n -z -w 3 $IP $PORT | grep "open" 2>&1 > /dev/null

netcat 命令的输出写入到 stderrgrep 命令在 stdout 上运行。因此,在 stderr 中提供了输出数据。

您可以执行以下操作以确认这一点:

root@avi-se-iihyz:/run/hmuser# netcat -v -n -z -w 3 $IP $PORT | grep "open" 2>&1 > /dev/null
(UNKNOWN) [10.10.30.34] 80 (http) open ? still shows up.

将上述内容更改为以下内容可以解决该问题。

netcat -v -n -z -w 3 $IP $PORT 2>&1 | grep "open"

使用 Show 命令

show pool <pool-name> server hmonstat 命令提供有关失败代码、请求和响应字符串的信息。

使用 NSX Advanced Load Balancer UI

登录到 NSX Advanced Load Balancer UI 并导航到应用程序 > ,选择所需的池,然后单击事件以检查运行状况监控器日志。

脚本的错误代码

可以使用外部运行状况监控器脚本的返回代码以选择失败原因代码。有效的错误代码是:

EINTR、ETIMEDOUT

连接超时。(由 NSX Advanced Load Balancer 基础架构在脚本超时时生成)

ECONNREFUSED

已拒绝连接

ECONNRESET

已重置连接

EADDRINUSE/EADDRNOTAVAIL

地址不可用

EHOSTDOWN/EHOSTUNREACH

无法访问主机

ENETDOWN/ENETUNREACH

无法访问网络

ENOBUFS/ENOMEM

资源不足。(如果资源分配失败,NSX Advanced Load Balancer 基础架构可能会生成该代码)

所有其他错误将被视为“其他错误”。

注:
  • 脚本可以将错误写入到 $HM_NAME.$IP.$PORT.out 以帮助调试,将在上述命令的输出中提供该输出。这仅适用于激活了外部运行状况监控器调试的情况。

  • 为了运行脚本以对脚本进行故障排除,超级用户可以使用 root 特权登录到服务引擎控制台,然后以 sudo - hmuser 身份运行 /run/hmuser 目录中存储的脚本。

  • 虽然您可以在服务引擎上修改脚本以进行故障排除,但这种更改是暂时性的。在服务引擎重新启动或您修改池/运行状况监控器后,这些更改将会丢失。修改运行状况监控器配置的正确方法是,从 NSX Advanced Load Balancer UI/CLI/API 中进行修改。

数据包捕获

无法使用运维 > 数据包捕获中提供的选项捕获外部运行状况监控器数据包。从 NSX Advanced Load Balancer 控制器 Shell 提示符中,执行具有筛选器选项的 tcpdump 命令。

tcpdump -i <avi_ethX>”

上述命令的输出显示外部运行状况监控器流量。

有关基于 SSH 密钥的 NSX Advanced Load Balancer 控制器 登录的更多信息,请参见《VMware NSX Advanced Load Balancer 管理指南》中的管理员用户的基于 SSH 的无密码登录

SNAT IP 和外部运行状况监控器

不支持外部运行状况监控器上的 SNAT。因此,不支持同时配置 SNAT IP 和外部运行状况监控器。

如果为虚拟服务配置了 SNAT IP,并且还为同一虚拟服务配置了外部运行状况监控器,则内置运行状况监控器支持 SNAT 并通过 SNAT IP 启动 TCP 连接。不过,如果使用外部运行状况监控器,则不支持 SNAT IP。这是预期的行为。