排除 NSX Edge High Availability (HA) 问题
search cancel

排除 NSX Edge High Availability (HA) 问题

book

Article ID: 301319

calendar_today

Updated On:

Products

VMware NSX Networking

Issue/Introduction

本文提供了解 VMware NSX for vSphere 6.x Edge 上的 High Availability (HA) 及开展故障排除所需的信息。

概览

NSX for vSphere 6.x Edge 上的 High Availability (HA)

High Availability (HA) 可确保 NSX Edge 设备提供的服务即使在硬件或软件故障将单个设备呈现为不可用时也可用。Edge HA 已与其他 HA 功能(例如,vSphere HA 或 MSCS)内联在一起,但它并非设计用于提供零停机,因为设备之间的故障切换可能要求重新启动某些服务。

NSX Edge HA 设计用于最大程度缩短故障切换停机时间。例如,它可以同步有状态防火墙的连接跟踪器或负载平衡器保留的有状态信息。但是,使所有服务恢复正常工作所需的时间并不等于零。服务重新启动造成的已知影响的示例包括启用了静态路由(如果 Edge 设备用作路由器)时的非零停机。
在某些情况下,两个 Edge HA 设备无法彼此通信,并且会单方面决定变为活动状态。这是预期行为,设计用于在备用 Edge 不可用时保持活动 Edge 服务的可用性。此外,如果其他设备仍存在,则在重新建立通信后,两个 Edge HA 设备会立即重新协商活动和备用状态。如果无法完成该协商,并且两个设备都在重新建立连接后声明它们处于活动状态,则会观察到异常行为。这种情况称为split brain,当存在以下环境条件时,将观察到该情况:
  • 物理网络连接问题,包括网络分区。
  • Edge 上的 CPU 或内存争用。
  • 暂时性存储问题,这些问题会导致至少一个 Edge HA 虚拟机变为不可用。例如,VMware 已观察到 Edge HA 的稳定性和性能在虚拟机已从过度置备的存储中移出时有所提高。尤其是在进行持续一整晚的大型备份时,存储延迟的激增会影响 Edge HA 的稳定性。
  • 物理或虚拟网络适配器上由于数据包交换而造成的拥堵。

除了环境问题之外,当 HA 配置引擎进入错误状态或 HA 守护进程失败时,也会观察到裂脑情况。

有状态 High Availability

主 NSX Edge 设备处于活动状态,辅助设备处于备用状态。NSX Manager 会为备用设备复制主设备的配置,或者您可以手动添加两个设备。VMware 建议在不同的资源池和数据存储上创建主设备和辅助设备。如果在同一个数据存储上创建主设备和辅助设备,则数据存储会在群集中的所有主机之间进行共享,以便能够将 HA 设备对部署到不同 ESXi 主机上。如果数据存储为本地存储,则两个虚拟机都会部署在同一个主机上。

所有 NSX Edge 服务都运行在活动设备上。主设备负责维护其与备用设备的检测信号,并会通过内部接口发送服务更新。

如果在指定时间(默认值为 15 秒)内未能从主设备收到检测信号,则会声明主设备失效。此时备用设备会切换至活动状态,接管主设备的接口配置,并启动之前在主设备上运行的 NSX Edge 服务。切换发生时,“设置和报告”的“系统事件”选项卡上会显示系统事件。负载平衡器和 VPN 服务将与 NSX Edge 重新建立 TCP 连接,因此服务会短暂中断。由于逻辑交换机连接和防火墙会话会在主设备和备用设备之间同步,因此切换期间不会造成服务中断。

如果 NSX Edge 设备出现故障并报告状态问题,HA 会强行同步出现故障的设备,以便使其恢复。恢复后,它会获取当前处于活动状态的设备的配置,并保持备用状态。如果 NSX Edge 设备已停止运行,请删除该设备并添加新设备。

NSX Edge 可确保两个 HA NSX Edge 虚拟机不在同一个 ESX 主机上,即便使用了 DRS 和 vMotion(除非使用 vMotion 将它们手动迁移到同一个主机)。两个虚拟机会与配置的设备一样,部署到相同资源池和数据存储中的 vCenter 上。本地链路 IP 会分配给 NSX Edge HA 中的 HA 虚拟机,确保它们能相互通信。您可以指定管理 IP 地址,替代本地链路。

有关详细信息,请参见 NSX Administration Guide 中的“关于 High Availability”部分。另请参见 VMware NSX for vSphere Network Virtualization Design Guide 中的“有状态活动/备用 HA 模型”部分。

NSX for vSphere 6.2.3 中的 High Availability 增强功能

通过以下更改改进了此版本中 High Availability 的稳定性:

NSX Manager

  • 为 NSX Edge 预留 CPU/内存资源。
  • 支持专用的 High Availability 界面。

NSX Edge

  • 检测信号消息交换/群集成员资格的双向转发检测 (BFD)。
  • 用于 HA 角色选举的新状态机。


Symptoms:

免责声明:本文为 Troubleshooting NSX Edge High Availability (HA) issues (2126560) 的翻译版本。尽管我们会不断努力为本文提供最佳翻译版本,但本地化的内容可能会过时。有关最新内容,请参见英文版本。



  • High Availability (HA) 服务未运行
  • 重新引导主 Edge 后故障切换至辅助 Edge 失败
  • 活动和备用 HA Edge 之间发生裂脑情况
  • VMware NSX Edge 日志含有类似以下内容的错误:

    2015-04-13T15:22:11+00:00 vse-ahs-1 ha[]: [AHS]: [daemon.warning] [1919]: WARN: Late heartbeat: Node vse-ahs-1: interval 30760 ms
    2015-04-13T15:22:11+00:00 vse-ahs-1 heartbeat: [daemon.warning] [1919]: WARN: Late heartbeat: Node vse-ahs-1: interval 30760 ms
    2015-04-13T15:22:11+00:00 vse-ahs-1 ha[]: [AHS]: [daemon.warning] [1919]: WARN: node vse-ahs-0: is dead
    2015-04-13T15:22:11+00:00 vse-ahs-1 heartbeat: [daemon.warning] [1919]: WARN: node vse-ahs-0: is dead
    2015-04-13T15:22:11+00:00 vse-ahs-1 ha[]: [AHS]: [daemon.info] [1919]: info: Link vse-ahs-0:vNic_1 dead.
    2015-04-13T15:22:11+00:00 vse-ahs-1 heartbeat: [daemon.info] [1919]: info: Link vse-ahs-0:vNic_1 dead.
    2015-04-13T15:22:11+00:00 vse-ahs-1 ha[]: [AHS]: [daemon.warning] [1919]: WARN: Deadtime value may be too small

    注意:上述日志摘录仅为示例。日期、时间和环境变量可能会因环境而有所不同。

    有关详细信息,请参见 Collecting diagnostic information for VMware NSX Edge (2079380)


Environment

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

Resolution

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

  1. 查看当前版本的发行说明,了解问题是否已在错误修复中得到解决。有关详细信息,请参见 VMware NSX for vSphere Documentation 页面。
  2. 部署 Edge 时,确认配置了至少一个内部接口,因为这是启用 HA 前所必需的。
  3. 运行 show service highavailability 命令,验证活动和备用 Edge 的健康状况是否都显示为正常。

    例如:

    EDGE-1-0> show service highavailability

    Highavailability Status: running
    Highavailability Unit Name: edge-1-0
    Highavailability Unit State: active
    Highavailability Interface(s): vNic_1
    Unit Poll Policy:
    Frequency: 3 seconds
    Deadtime: 15 seconds
    Stateful Sync-up Time: 10 seconds
    Highavailability Healthcheck Status:
    Peer host [edge-1-1 ]: good
    This host [edge-1-0 ]: good
    Highavailability Stateful Logical Status:
    File-Sync running
    Connection-Sync running
    xmit xerr rcv rerr
    21612 0 13920 0

  4. 使用 show service highavailability 命令查找对等 Edge HA IP 地址。
  5. 使用 ping <peer_ha_ip> 命令对该对等 HA IP 地址执行 ping 过程,以验证网络连接。如果无法访问,则需要先解决网络连接问题。如果可访问,则以前可能存在间歇性网络连接问题。有关详细信息,请参见 Split-brain scenario on NSX/vShield Edge configured for High Availability (HA) (2117922)

    注意:可以考虑将 Declare Dead Time 设置从默认值(15 秒)更改为更小的值。如果在指定时间内没有从活动 Edge 收到检测信号,则会声明活动 Edge 已失效。此时备用 Edge 会切换至活动状态,接管主设备的接口配置,并启动之前在主设备上运行的 NSX Edge 服务。切换发生时,“设置和报告”的“系统事件”选项卡上会显示系统事件。有关详细信息,请参见 Virtual machines lose network connectivity when redeploying a High Availability (HA) enabled VMware vCloud Networking and Security or NSX for vSphere Edge (2135309)

    要配置检测信号设置,请执行以下操作:

    1. 登录到 vSphere Web Client。
    2. 单击网络和安全,然后单击 NSX Edge
    3. 双击 NSX Edge
    4. 单击管理选项卡,然后单击设置选项卡。
    5. HA 配置面板中,单击更改
    6. 更改 HA 配置对话框中,输入声明失效时间。默认值为 15 秒。
    7. 单击确定

  6. 收集 NSX Edge 虚拟机和 ESXi 主机的 CPU、内存、网络和/或存储利用率详细信息。
  7. 运行调试数据包显示接口 <ha-interface> udp_port_694 命令,以验证是否正在发送或接收检测信号。
  8. 运行 show service highavailability internal 命令,以验证 HA 守护进程的内部状态。
    注意:此命令在 VMware NSX for vSphere 6.2.x 中受支持。对于 6.2 之前的版本,请从 root shell 中运行 crm-mon-1 命令。
  9. 收集 NSX Edge 技术支持日志。有关详细信息,请参见 Collecting diagnostic information for VMware NSX Edge (2079380)

    注意:应同时在两个 NSX Edge 虚拟机的控制台上捕获上述命令。
如果在尝试执行本文中的步骤后问题仍然存在,请参见以下内容:


Additional Information

使用日志消息排除 NSX Edge HA 问题

以下示例日志序列显示了从临时的裂脑情况自动恢复的过程。该 HA 事件从 2016-01-16T12:21 开始,并在四秒内结束。

2016-01-16T12:21:44+00:00 vShield-edge-3-1 ha[]: [default]: [daemon.warning] [1730]: WARN: node vshield-edge-3-0: is dead
2016-01-16T12:21:44+00:00 vShield-edge-3-1 heartbeat: [daemon.warning] [1730]: WARN: node vshield-edge-3-0: is dead
2016-01-16T12:21:48+00:00 vShield-edge-3-1 crmd: [daemon.info] [1953]: info: crm_update_peer_proc: vshield-edge-3-0.ais is now online,

在以下示例日志序列中,Edge2-0 和 Edge2-1 之间的检测信号丢失。但是,该情况在两秒内自动恢复。

2016-01-16T12:50:53+00:00 vShield-edge-2-0 ha[]: [default]: [daemon.warning] [1781]: WARN: node vshield-edge-2-1: is dead
2016-01-16T12:50:53+00:00 vShield-edge-2-0 crmd: [daemon.info] [1930]: info: crm_update_peer_proc: vshield-edge-2-1.ais is now offline
2016-01-16T12:50:55+00:00 vShield-edge-2-0 ha[]: [default]: [daemon.crit] [1781]: CRIT: Cluster node vshield-edge-2-1 returning after partition.

提供的是 INFO 模式下的日志记录,但包含 DEBUG 模式下的详细信息。
  • 检测和确认裂脑

    LOGGER.debug("Attempting Split Brain recovery for edge {}, config version {}.", edgeId, configVersion);

    LOGGER.debug("Confirmed Split Brain for edge {} with vm0 state as {} and vm1 state as {}", edgeId, haState0, haState1);
    LOGGER.info("Split Brain confirmed for edge {}", edgeId);
    OR
    LOGGER.debug("No Split Brain for edge {} with vm0 state as {} and vm1 state as {}", edgeId, haState0, haState1);
    LOGGER.info("No Split Brain observed for edge {}. Returning from HaAutoHealTask without further action.", edgeId
    );

  • 已尝试裂脑恢复

    EdgeEventCodes.HA_STATE_SPLIT_BRAIN,
    logMessage = "System event: Attempt Split Brain recovery on edge id " + edgeId + ". AutoHeal Counter :" + ct.getAutoHealCount();

    LOGGER.info("Configuring deadTimeInterval to {} seconds to restart HA daemon and recover from Split Brain for edge {}", deadTimeInterval, edge);

    EdgeEventCodes.HA_STATE_SPLIT_BRAIN_RECOVERY_ATTEMPT,
    String logMessage = "Recovery from Split Brain for vShield Edge " + edgeId + " attempted with count "+ attempt;

    未尝试裂脑恢复

    LOGGER.info("Current edge version {} is not APPLIED. Not attempting HA Split Brain recovery.", edge.getEdgeVersion());

  • 已恢复裂脑

    EdgeEventCodes.HA_STATE_SPLIT_BRAIN_RECOVERED,
    String logMessage = "System event: Split Brain recovered on edge id " + edgeId + ". AutoHeal Counter :" + ct.getAutoHealCount();

  • 恢复后出现裂脑(在后退模式下引发事件后,进行了 N 次恢复尝试)

    EdgeEventCodes.HA_STATE_SPLIT_BRAIN,
    logMessage = "Raising system event for Split Brain on edge id " + edgeId + ". Event Counter :" + ct.getEventCount();

  • 重置时间间隔以重新尝试裂脑恢复

    LOGGER.info("Split Brain Recovery time interval elapsed. Reset the counter for edge {}.", edgeId);
  • 应留意的可能导致故障切换的消息

    WARN: Late heartbeat: - heartbeat is not returned in the heartbeat interval
  • 检测信号完全丢失时应留意的消息

    WARN: Deadtime value may be too small

注意:上述日志摘录仅为示例。日期、时间和环境变量可能会因环境而有所不同。

Split-brain scenario on NSX/vShield Edge configured for High Availability (HA)Troubleshooting NSX Edge High Availability (HA) issues