在 NSX Data Center for vSphere 上,控制层面 (netcpa) 用作本地代理守护进程,从而与 NSX Manager 和控制器群集进行通信。通信通道运行状况 (Communication Channel Health)是一项运行状况检查功能,会定期向 NSX Manager 报告中央控制层面到本地控制层面的状态并显示在 NSX Manager UI 中。该报告还作为检测信号以检测 NSX Manager 到 ESXi 主机 netcpa 通道的运行状态。它在通信故障期间提供错误详细信息,在通道进入错误状态时生成事件,以及生成从 NSX Manager 到主机的检测信号消息。
问题
在控制层面代理和控制器之间出现连接问题。
原因
如果缺少任何连接,控制层面代理可能无法正常工作。
解决方案
- 使用以下 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 all 或 show 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:未知错误
- 按照以下方式确定控制层面代理关闭的原因:
- 在 ESXi 主机上运行 /etc/init.d/netcpad status 命令以检查主机上的控制层面代理状态。
[root@esx-01a:~] /etc/init.d/netcpad status netCP agent service is running
- 使用 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> ...
- 在 ESXi 主机上运行 /etc/init.d/netcpad status 命令以检查主机上的控制层面代理状态。
- 使用以下命令验证从控制层面代理到控制器的连接。输出是每个控制器一个连接。
>[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
- 运行以下命令,以验证从控制层面代理到控制器的连接是否显示 CLOSED 或 CLOSE_WAIT 状态:
esxcli network ip connection list |grep "1234.*netcpa*" | egrep "CLOSED|CLOSE_WAIT"
- 如果控制层面代理已关闭很长时间,则连接可能根本不存在。要验证连接状态,请运行以下命令。输出是每个控制器一个连接。
esxcli network ip connection list |grep "1234.*netcpa*" |grep ESTABLISHED
- 控制层面代理 (netcpa) 自动恢复机制:自动控制层面代理监控过程检测处于错误状态的控制层面代理。在控制层面代理处于错误状态时,将停止响应并随后自动尝试进行恢复。
- 在控制层面代理停止响应时,将会生成实时核心文件。您可以按以下方式查找核心文件:
ls /var/core netcpa-worker-zdump.000
- 在 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!
您可以忽略该警告。
- 在控制层面代理停止响应时,将会生成实时核心文件。您可以按以下方式查找核心文件:
- 如果未自动恢复该问题,请按以下方式重新启动控制层面代理:
- 以 root 身份通过 SSH 或控制台登录到 ESXi 主机。
- 运行 /etc/init.d/netcpad restart 命令以在 ESXi 主机上重新启动控制层面代理。