在 vRNI 4.2 或更高版本中启用虚拟基础架构延迟功能时,为 NSX 6.4.5 或 6.4.6 准备的 ESXi 主机将显示 Purple Screen of Death (PSOD) 诊断屏幕。

问题

当 BFD 隧道数量超过 900 时,将显示 PSOD 诊断屏幕。

原因

vRNI 中的虚拟基础架构延迟功能使用 NSX 就绪型主机上的 BFD 监控功能在主机之间建立隧道。通过控制层面代理响应详细 BFD 隧道查询时,如果 NSX 内核模块保持 BFD 会话的状态,则会出现 PSOD。

如果 BFD 隧道的数量为几百个,则不会出现 PSOD。当 BFD 隧道的数量超过 900 时,主机会出现严重错误,并变为不可操作状态。要创建 900 个以上 BFD 隧道的主机数量取决于您环境中的 VTEP 数量。

要确定环境中 BFD 隧道的数量,请使用以下公式:(N-1)*(T^2)

其中:
  • N 是主机数量。
  • T 是每个主机的 VTEP 数量。

例如,在每个主机具有两个 VTEP 的四主机群集中,每个主机可以看到的 BFD 隧道数量为:

(4-1)*(2^2)=12
在 PSOD 的堆栈跟踪中,查看类似于以下内容的条目:
#0 DLM_free (msp=0x431a455dcca0, mem=mem@entry=0x431a458cbd10, allowTrim=allowTrim@entry=1 '\001') at bora/vmkernel/main/dlmalloc.c:4924
#1 0x0000418012343ffa in Heap_Free (heap=0x431a455dc000, mem=<optimized out>, mem@entry=0x431a458cbd10) at bora/vmkernel/main/heap.c:4314
#2 0x000041801222db25 in vmk_HeapFree (heap=<optimized out>, mem=mem@entry=0x431a458cbd10) at bora/vmkernel/core/vmkapi_heap.c:250
#3 0x000041801393ca61 in __VDL2_Free (heapID=<optimized out>, data=data@entry=0x431a458cbd10) at /build/mts/release/bora-13168956/esx-datapath/modules/vdl2/vdl2.c:152
#4 0x0000418013950caf in VDL2_CPTaskFree (task=task@entry=0x431a458cbd10) at /build/mts/release/bora-13168956/esx-datapath/modules/vdl2/vdl2_ctlplane.c:164
#5 0x0000418013949415 in VDL2CPWorldProcessTask (task=0x431a458cbd10) at /build/mts/release/bora-13168956/esx-datapath/modules/vdl2/vdl2_cpworld.c:283
#6 VDL2CPWorldFunc (data=data@entry=0x0) at /build/mts/release/bora-13168956/esx-datapath/modules/vdl2/vdl2_cpworld.c:335
#7 0x0000418012308adf in vmkWorldFunc (data=<optimized out>) at bora/vmkernel/main/vmkapi_world.c:528
#8 0x00004180124c91f5 in CpuSched_StartWorld (destWorld=<optimized out>, previous=<optimized out>) at bora/vmkernel/sched/cpusched.c:10792
#9 0x0000000000000000 in ?? ()
在主机的 /var/log/vmkernel.log 文件中,查看以下条目(其指示已在主机上启用 BFD):
# cpu75:68603 opID=6616a61a)vxlan: VDL2PortsetPropSet:1036: Updating BFD VTEP config to : enable
# cpu75:68603 opID=6616a61a)BFD: BFD_CreateNewSession ENTER: localIP: a.b.c.d , remoteIP: w.x.y.z , probeInterval (in milli seconds): 12000
# cpu75:68603 opID=6616a61a)WARNING: BFD: Inserted new session: Discriminator 1471713223, localIP: a.b.c.d remoteIP: w.x.y.z
ESXi 核心转储或内存转储中,查看以下 BFD 消息(BFD 状态更改:init -> up)
less vmkernel-zdump.1
    vers:1 diag:"No Diagnostic" state:up mult:3 length:24
    flags: pol
    my_disc:0x50c322ca your_disc:0x39f2436f
    min_tx:300000us (300ms)
    min_rx:12000000us (12000ms)
    min_rx_echo:0us (0ms)(null): BFD state change: init->up "No Diagnostic"->"No Diagnostic".(null): New remote min_rx.
    vers:1 diag:"No Diagnostic" state:up mult:3 length:24
    flags: pol
    my_disc:0x5a566ae8 your_disc:0x16f3890c
    min_tx:300000us (300ms)
    min_rx:12000000us (12000ms)
    min_rx_echo:0us (0ms)(null): BFD state change: init->up "No Diagnostic"- >"No Diagnostic".(null): New remote min_rx.

解决方案

  1. 如果使用 vRNI 启用了从 NSX 就绪型主机收集延迟指标的功能,请禁用虚拟基础架构延迟功能。
    1. 在 vRNI 中,导航到设置 > 帐户和数据源
    2. 编辑 NSX Manager 数据源,然后取消选中启用虚拟基础架构延迟复选框。
    3. 单击提交以确认更改。
  2. 如果使用 NSX API 启用了延迟指标收集功能,或者 vRNI 设备不可访问,请通过运行 API 请求来禁用 BFD。
    1. 通过运行以下 GET API 来检索 BFD 全局配置详细信息,并查看是否已启用 BFD:
      GET /api/2.0/vdn/bfd/configuration/global
      API 响应示例:
      <bfdGlobalConfiguration>
          <enabled>true</enabled>
          <pollingIntervalSecondsForHost>180</pollingIntervalSecondsForHost>
          <bfdIntervalMillSecondsForHost>120000</bfdIntervalMillSecondsForHost>
      </bfdGlobalConfiguration>
    2. 通过运行以下 PUT API 请求来禁用 BFD:
      PUT /api/2.0/vdn/bfd/configuration/global
      请求正文示例:
      <bfdGlobalConfiguration>
          <enabled>false</enabled>
          <pollingIntervalSecondsForHost>180</pollingIntervalSecondsForHost>
          <bfdIntervalMillSecondsForHost>120000</bfdIntervalMillSecondsForHost>
      </bfdGlobalConfiguration>
    有关 BFD 配置参数的详细信息,请参见 NSX API 指南