排除 NSX for vSphere 6.x 控制器的故障
search cancel

排除 NSX for vSphere 6.x 控制器的故障

book

Article ID: 342493

calendar_today

Updated On:

Products

VMware NSX Networking

Issue/Introduction

本文介绍了如何确定 NSX Controller 故障的原因以及如何排除 VMware NSX for vSphere 6.x Controller 故障。


Symptoms:
免责声明: 本文为 Troubleshooting NSX for vSphere 6.x Controllers (2125767) 的翻译版本。 尽管我们会不断努力为本文提供最佳翻译版本,但本地化的内容可能会过时。 有关最新内容,请参见英文版本。


  • NSX Controller 部署失败
  • NSX Controller 无法连接群集
  • 运行 show control-cluster status 命令显示 Majority status 在以下两种状态之间摇摆不定:Connected to cluster majority Interrupted connection to cluster majority.


Environment

VMware NSX for vSphere 6.0.x
VMware NSX for vSphere 6.2.x
VMware NSX for vSphere 6.3.x
VMware NSX for vSphere 6.1.x

Cause

Resolution

验证每个故障排除步骤是否适合您的环境。每个步骤均提供相关说明或文档链接,用于消除可能的原因并采取必要的补救措施。这些步骤按照最合适的顺序排序,以隔离问题并确定正确的解决方法。

安装和部署问题

  • 验证群集中是否至少部署了 3 个控制器节点。VMware 建议使用 vSphere 中的原生反关联性规则来避免在同一个 ESXi 主机上部署多个控制器节点。
  • 确认所有 NSX Controller 都显示Connected状态。如有任一控制器节点显示Disconnected状态,请在所有控制器节点上运行命令show control-cluster status以确保以下内容一致:

    类型

    状态

    连接状态

    连接完成

    多数状态

    已连接到群集中多数节点

    群集 ID

    所有控制器节点上的信息相同


  • 另外,确保所有控制器节点上的所有角色一致:

角色

配置状态

活动状态

api_provider

已启用

已激活

persistence_server

已启用

已激活

switch_manager

已启用

已激活

logical_manager

已启用

已激活

directory_server

已启用

已激活



  • 验证vnet-controller进程是否正在运行中。在所有控制器节点上运行命令show process,确保java-dir-server服务正在运行中。
  • 验证每个控制器的系统状态和资源利用率。运行show status命令,确保所有节点的负载均为最佳负载。
  • 验证群集历史记录,确保没有主机连接抖动、VNI 加入失败以及群集成员资格异常变动的迹象。要确认上述情况,请运行show control-cluster history命令。
  • 验证 VXLAN 网络标识符 (VNI) 是否已配置。有关详细信息,请参见 VMware VXLAN Deployment Guide的“VXLAN 准备步骤”部分。
  • 验证是否已在控制器群集上启用 SSL。在每个控制器节点上运行how log cloudnet/cloudnet_java-vnet-controller*.log filtered-by sslEnabled命令。

主机连接问题:

  • 检查主机连接错误。在每个控制器节点上运行show log cloudnet/cloudnet_java-vnet-controller*.log filtered-by host_IP命令。
  • 检查任何异常错误统计信息。在每个控制器节点上运行以下命令:

    • show control-cluster core stats: overall stats
    • show control-cluster core stats-sample: latest stats samples
    • show control-cluster core connection-statsip: per connection stats
  • 验证逻辑交换机/路由器消息统计信息状况,或者验证是否出现大量消息。在每个控制器节点上运行以下命令:

    • show control-cluster logical-switches stats
    • show control-cluster logical-routers stats
    • show control-cluster logical-switches stats-sample
    • show control-cluster logical-routers stats-sample
    • show control-cluster logical-switches vni-statsvni
    • show control-cluster logical-switches vni-stats-samplevni
    • show control-cluster logical-switches connection-statsip
    • show control-cluster logical-routers connection-statsip

    有关详细信息,请参见 NSX Command Line Interface Reference Guide

  • NSX for vSphere 6.2.3 版本扩展了中央 CLI,支持在排除 NSX 故障时,使用show hosthostIDhealth-status命令检查就绪群集中的主机的运行状况。排除控制器故障时,支持执行以下运行状况检查:
    • 检查net-config-by-vsm.xml是否已同步到控制器列表。
    • 检查是否与控制器建立了套接字连接。
    • 检查是否创建了 VNI,以及配置是否正确。
    • 检查 VNI 是否连接至主控制器(如果已启用控制层面)。

控制器群集问题:


建议使用 show control-cluster status 命令,查看控制器是否已加入控制群集。

show control-cluster startup-nodes 命令的设计目的并不是显示群集中的当前所有节点。相反,它会显示某节点使用了哪些其他控制器节点,以便在控制器进程重新启动时引导群集中的成员资格。相应地,该命令输出可能会显示已关机或因任何其他原因被清除出群集的节点。

从 NSX for vSphere 6.1.5、6.2.1 和更高版本起,NSX Manager 用户界面会显示控制器群集中 NSX Controller 之间的连接状态。您可以根据相关显示内容,了解不同节点之间的连接差异。举例来说,在含有控制器 A、B 和 C 的群集中,如果 A 连接至 B 和 C,但 B 和 C 无法了解彼此的情况,用户就可以根据此控制状态发现群集中存在不完整的分区。

此外,用户也可以使用show control-cluster network ipsec status命令检查 Internet 协议安全 (IPsec) 状态。向 VMware 技术支持代表报告可疑的控制群集问题时,请提供此命令的输出和控制器日志。

有关详细信息,请参见 VMware 知识库文章 2127655,了解 NSX 控制群集的已解决问题。


控制器删除和恢复问题:

一个 NSX Controller 故障时,可能仍有两个控制器仍在工作。此时仍能形成群集多数,控制层面也会继续工作。即便如此,用户仍有必要删除全部三台控制器,然后添加新控制器,确保三节点群集完全正常工作。有关详细信息,请参见 NSX Administration Guide 中的“恢复 NSX Controller 故障”一节。

在 NSX for vSphere 6.2.3 之前的版本中,只支持通过强制移除的方式移除控制器虚拟机:
  1. 关闭节点电源。
  2. 移除控制器虚拟机。
  3. 从群集中移除控制器虚拟机身份。
  4. 释放控制器节点的 IP 地址。
NSX for vSphere 6.2.3 版本优化了控制器移除步骤,让相关操作更易于管理,同时还推出了正常移除步骤。此步骤会在移除节点前检查以下情况:
  • 没有正在执行的控制器节点升级操作。
  • 发出相关操作时,没有不活动的控制器节点。
  • 控制器群集运行正常,可以处理控制器群集 API 请求。
  • 从 vCenter Server 清单获取的主机状态显示主机已连接且已开机。
  • 移除的节点并非最后一个控制器节点。

正常移除控制器时需要遵循以下顺序:

  1. 关闭节点电源。
  2. 检查群集运行状况。
  3. 如果群集运行状况不正常,请打开控制器电源,使得移除请求失效。
  4. 如果群集运行状况正常,请移除控制器虚拟机,然后释放节点的 IP 地址。
  5. 从群集中移除控制器虚拟机的身份。

如果控制器删除操作只是部分成功,还有一个条目残留在跨 vCenter 环境的 NSX Manager 数据库中,请使用DELETE https://vsm-ip/api/2.0/vdn/controller/externalAPI。如果控制器之前是通过 NSX Manager API 导入的,请将removeExternalControllerReferenceAPI 与forceRemoval选项结合使用。

不支持在 vCenter Server 中直接删除控制器虚拟机或关闭其电源。NSX for vSphere 6.2.3 在 NSX 用户界面上会报告一个新的Out of Sync状态。单击Out of Sync状态会返回具有Resolve按钮的窗口。

netcpa(控制层面)问题:

在 NSX for vSphere 上,netcpa 起着本地代理守护程序的作用,负责与 NSX Manager 以及与控制器群集通信。有关与 netcpa 相关的已解决问题,请参见 VMware 知识库文章 21370052137011

NSX for vSphere 6.2.0 版本推出了通信通道运行状况功能,借助该功能,用户可以检查 NSX Manager 与防火墙代理、NSX Manager 与控制层面代理以及控制层面代理与控制器之间的通信状态。有关详细信息,请参见 NSX for vSphere Administration Guide 中的“检查通信通道运行状况”一节。

NSX for vSphere 6.2.3 版本强化了通信通道运行状况功能,具体表现为:

  • 提供发生通信故障期间的错误详情。
  • 在通道进入错误状态时生成事件。
  • 检测信号消息现在由 NSX Manager 生成后发送给主机。
下文显示了通道进入错误状态时的事件日志消息示例:
GET https://<vsm_host_ip>/api/2.0/vdn/inventory/host/{hostId}/connection/status
Return:
<?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>
除了UP、DOWN或NOT AVAILABLE这几个通道整体状态外,NSX for vSphere 6.2.3 还会提供通信故障期间更精细的事件代码和错误详细信息:
支持提供以下错误代码:
  • 1255601:主机证书不完整
  • 1255602:控制器证书不完整
  • 1255603:SSL 握手失败
  • 1255604:连接被拒绝
  • 1255605:保持活动状态超时
  • 1255606:SSL 异常
  • 1255607:消息错误
  • 1255620:未知错误

存储延迟问题:

确认您的环境未出现任何高存储延迟现象。存储延迟大于一秒时,Zookeeper 将记录这些消息(运行命令 show log cloudnet/cloudnet_java-zookeeper*.logfiltered-by fsync 时,请参见症状部分)。VMware 建议将一个 LUN 专用于控制群集,并且/或者依据延迟情况将存储阵列移到更靠近控制群集的位置。有关详细信息,请参见 VMware 知识库文章 21352911008205
NSX for vSphere 6.2.3 增添了磁盘 I/O 延迟监控和记录功能,更方便管理各项操作。计算读取延迟和写入延迟时会取 5 秒(默认值)移动平均值,并在其超出延迟限值时触发警示。平均延迟回落到延迟下限时,该警示会关闭。默认情况下,延迟上限设为 200 毫秒,延迟下限设为 100 毫秒。
  • nsx-controller # show disk-latency-alert config
    enabled=True low-wm=51 high-wm=150
    nsx-controller # set disk-latency-alert enabled yes
    nsx-controller # set disk-latency-alert low-wm 100
    nsx-controller # set disk-latency-alert high-wm 200
    用户也可使用 REST API 获取控制器节点的延迟警示状态。
    GET https://<VSM-IP>/api/2.0/vdn/controller/<controller-id>/systemStats
    响应:
    <?xml version="1.0" encoding="UTF-8"?>
    <controllerNodeStatus>
    <id>controller-2</id>
    <ipAddress>10.33.72.202</ipAddress>
    <syncTime>1455066817913</syncTime>
    <cpuCoreCount>4</cpuCoreCount>
    <cpuAverageLoad>
    <double>0.14</double>
    <double>0.17</double>
    <double>0.15</double>
    </cpuAverageLoad>
    <totalMemory>3926696</totalMemory>
    <usedMemory>2036432</usedMemory>
    <cachedMemory>1038076</cachedMemory>
    <totalSwap>4190204</totalSwap>
    <usedSwap>0</usedSwap>
    <systemTime>1455045226490</systemTime>
    <upTime>9132230</upTime>
    <nodeFailoverReady>false</nodeFailoverReady>
    <nodeDiskLatencyStatus>
    <deviceName>sda</deviceName>
    <refreshTime>1452365702000</refreshTime>
    <latencyType>w_await</latencyType>
    <lastLatency>0.0</lastLatency>
    <avgLatency>0.0</avgLatency>
    <alertEnabled>false</alertEnabled>
    </nodeDiskLatencyStatus>
    [省略了输出]
    现有控制器 get API 的响应包含一个标志,指示是否在控制器节点上检测到磁盘延迟警示。
    GET https://<VSM-IP>/api/2.0/vdn/controller
    响应:
    <?xml version="1.0" encoding="UTF-8"?>
    <controllers>
    <controller>
    <objectTypeName>Controller</objectTypeName>
    <revision>0</revision>
    <name>Controller-1</name>

    <diskLaterncyAlertDetected>true<diskLaterncyAlertDetected>
    </controller>
    </controllers>

    NSX Controller 日志:

    要收集 NSX Controller 日志,请执行以下操作:

    1. 使用 vSphere Web Client 登录到 vCenter Server。
    2. 单击 Networking & Security
    3. 单击左窗格上的安装链接。
    4. 单击“管理”选项卡,选择要从中下载日志的控制器。
    5. 单击下载技术支持日志

    注意:

    • 新安装的 NSX 6.2.4 会使用更新的磁盘分区部署 NSX Controller 设备,以提供更好的群集弹性。在以前版本中,日志溢出到控制器磁盘时可能会影响控制器稳定性。除了新增日志管理增强功能来防止溢出外,NSX Controller 设备还为数据和日志使用了单独的磁盘分区来防范这些事件。如果升级到 NSX 6.2.4,NSX Controller 设备会保留它们的原始磁盘布局。
    • 如果在尝试本文中的步骤后仍存在此问题,请向 VMware 支持部门提出支持请求,并在问题描述中注明本知识库文章 ID (2125767)。有关详细信息,请参见 How to Submit a Support Request


Additional Information

如果在尝试执行本文中的步骤后问题仍然存在,请参见以下内容:
  • 向 VMware 支持提出支持请求,并在问题描述中注明此知识库文章 ID (2125767)。 有关详细信息,请参见 How to Submit a Support Request
Troubleshooting NSX for vSphere 6.x Controllers