NSX Data Center for vSphere 上,控制层面 (netcpa) 用作本地代理守护进程,从而与 NSX Manager 和控制器群集进行通信。通信通道运行状况 (Communication Channel Health)是一项运行状况检查功能,会定期向 NSX Manager 报告中央控制层面到本地控制层面的状态并显示在 NSX Manager UI 中。该报告还作为检测信号以检测 NSX Manager 到 ESXi 主机 netcpa 通道的运行状态。它在通信故障期间提供错误详细信息,在通道进入错误状态时生成事件,以及生成从 NSX Manager 到主机的检测信号消息。

问题

在控制层面代理和控制器之间出现连接问题。

原因

如果缺少任何连接,控制层面代理可能无法正常工作。

解决方案

  1. 使用以下 API 请求验证在通道进入错误状态时的连接状态:
    GET https://<NSX_Manager_IP>/api/2.0/vdn/inventory/host/{hostId}/connection/status

    有关使用此 API 的更多信息,请参阅NSX API 指南》

    要查找“hostId”,您可以使用 NSX Manager CLI 或 vCenter Managed Object Browser (MOB)。
    • 要使用 vCenter MOB,请打开 Web 浏览器,然后在http://vCenter-IP-Address/mob 处输入 vCenter MOB 的 URL。请参见《NSX API 指南》中有关查找群集或主机 MOID 的说明。
    • 要使用 NSX Manager CLI,请以 admin 用户身份登录,然后运行 show cluster allshow cluster clusterID 命令。有关这些命令的详细信息,请参见NSX 命令行快速参考》

    以下是一个 API 响应的示例:

    <?xml version="1.0" encoding="UTF-8"?>
    <hostConnStatus>
      <hostName>10.161.246.20</hostName>
      <hostId>host-21</hostId>
      <nsxMgrToFirewallAgentConn>UP</nsxMgrToFirewallAgentConn>
      <nsxMgrToControlPlaneAgentConn>UP</nsxMgrToControlPlaneAgentConn>
      <hostToControllerConn>DOWN</hostToControllerConn>
      <fullSyncCount>-1</fullSyncCount>
      <hostToControllerConnectionErrors>
        <hostToControllerConnectionError>
          <controllerIp>10.160.203.236</controllerIp>
          <errorCode>1255604</errorCode>
          <errorMessage>Connection Refused</errorMessage>
        </hostToControllerConnectionError>
        <hostToControllerConnectionError>
          <controllerIp>10.160.203.237</controllerIp>
          <errorCode>1255603</errorCode>
          <errorMessage>SSL Handshake Failure</errorMessage>
        </hostToControllerConnectionError>
      </hostToControllerConnectionErrors>
    </hostConnStatus>

    支持以下错误代码:

    1255602:控制器证书不完整;1255603:SSL 握手失败;1255604:已拒绝连接;1255605:保持活动状态超时;1255606:SSL 异常;1255607:消息错误;1255620:未知错误
  2. 按照以下方式确定控制层面代理关闭的原因:
    1. 在 ESXi 主机上运行 /etc/init.d/netcpad status 命令以检查主机上的控制层面代理状态。
      [root@esx-01a:~] /etc/init.d/netcpad status
      netCP agent service is running
      
    2. 使用 more /etc/vmware/netcpa/config-by-vsm.xml 命令检查控制层面代理配置。将会列出 NSX Controller 的 IP 地址。
      [root@esx-01a:~] more /etc/vmware/netcpa/config-by-vsm.xml
      <config>
        <connectionList>
          <connection id="0000">
            <port>1234</port>
            <server>192.168.110.31</server>
            <sslEnabled>true</sslEnabled>
            <thumbprint>A5:C6:A2:B2:57:97:36:F0:7C:13:DB:64:9B:86:E6:EF:1A:7E:5C:36</thumbprint>
          </connection>
          <connection id="0001">
            <port>1234</port>
            <server>192.168.110.32</server>
            <sslEnabled>true</sslEnabled>
            <thumbprint>12:E0:25:B2:E0:35:D7:84:90:71:CF:C7:53:97:FD:96:EE:ED:7C:DD</thumbprint>
          </connection>
          <connection id="0002">
            <port>1234</port>
            <server>192.168.110.33</server>
            <sslEnabled>true</sslEnabled>
            <thumbprint>BD:DB:BA:B0:DC:61:AD:94:C6:0F:7E:F5:80:19:44:51:BA:90:2C:8D</thumbprint>
          </connection>
        </connectionList>
       ...
      
  3. 使用以下命令验证从控制层面代理到控制器的连接。输出是每个控制器一个连接。
    >[root@esx-01a:~] esxcli network ip connection list | grep 1234
    tcp     0   0  192.168.110.51:16594     192.168.110.31:1234   ESTABLISHED     36754  newreno  netcpa-worker
    tcp     0   0  192.168.110.51:46917     192.168.110.33:1234   ESTABLISHED     36754  newreno  netcpa-worker
    tcp     0   0  192.168.110.51:47891     192.168.110.32:1234   ESTABLISHED     36752  newreno  netcpa-worker
    
  4. 运行以下命令,以验证从控制层面代理到控制器的连接是否显示 CLOSEDCLOSE_WAIT 状态:
    esxcli network ip
    		connection list |grep "1234.*netcpa*" | egrep "CLOSED|CLOSE_WAIT"
  5. 如果控制层面代理已关闭很长时间,则连接可能根本不存在。要验证连接状态,请运行以下命令。输出是每个控制器一个连接。
    esxcli network ip
    		connection list |grep "1234.*netcpa*" |grep ESTABLISHED
  6. 控制层面代理 (netcpa) 自动恢复机制:自动控制层面代理监控过程检测处于错误状态的控制层面代理。在控制层面代理处于错误状态时,将停止响应并随后自动尝试进行恢复。
    1. 在控制层面代理停止响应时,将会生成实时核心文件。您可以按以下方式查找核心文件:
      ls /var/core       
       netcpa-worker-zdump.000
    2. vmkwarning.log 文件中报告 syslog 错误。
      cat /var/run/log/vmkwarning.log | grep NETCPA
      2017-08-11T06:32:17.994Z cpu1:1000044539)ALERT: Critical - NETCPA is hanged
      Taking live-dump & restarting netcpa process!
      
    注:

    如果控制层面代理监控器由于延迟的状态检查响应而遇到临时故障,则可能会在 VMkernel 日志中报告类似于以下内容的警告消息。

    Warning - NETCPA getting netcpa status failed!

    您可以忽略该警告。

  7. 如果未自动恢复该问题,请按以下方式重新启动控制层面代理:
    1. 以 root 身份通过 SSH 或控制台登录到 ESXi 主机。
    2. 运行 /etc/init.d/netcpad restart 命令以在 ESXi 主机上重新启动控制层面代理。