PowerStore:在具有 NVMe/TCP 的 vSphere 环境中的单个 PowerStore 节点不可用时观察到 I/O 超时
摘要: 使用 vSphere 8.0U2 和 NVMe/TCP 时,在单个 PowerStore 节点不可用的情况下,可能会观察到 I/O 超时。(用户可纠正)
症状
使用 vSphere 8.0U2 和 NVMe/TCP 作为存储协议时,在单个 PowerStore 节点不可用的情况下可能会观察到 I/O 超时。
此类方案的示例:
- PowerStore NDU
- 关闭 PowerStore 节点
- 节点死机或网络中断等意外情况
在以下情况下可能会观察到此问题:
- 使用 ESXi 版本 8.0U2
- 使用 NVMe/TCP 协议
- 一个 PowerStore 节点由于某种原因变得不可用,另一个节点保持可用
- 在 ESXi 托管的虚拟机中运行的应用程序或虚拟机上安装的操作系统观察到 I/O 超时
- PowerStore I/O 指标不显示长时间运行的 I/O
只有 NVMe/TCP 受此问题的影响。NVMe/FC、iSCSI 和 FC 协议不受影响。该问题仅影响 ESXi 主机,其他类型的主机不受该问题的影响。
此问题可能表现为应用程序错误或在 ESXi 主机托管的虚拟机内运行的应用程序服务影响。它还可能导致来宾操作系统(安装在 ESXi 主机上运行的虚拟机上的操作系统)中出现错误。影响级别归因于应用程序软件处理 I/O 超时的方式。
问题是间歇性的。如果连接了多个主机,则只有其中一些主机可能会遇到此问题。
该问题同时影响 vVol 和非 vVol 数据存储区。
原因
这是由于 ESXi 8.0U2 中的问题造成的。当一个 PowerStore 节点的 NVMe/TCP 控制器由于某种原因变得不可用,而另一个节点可用并能够处理 I/O 时,路径的故障切换过程将出现延迟。延迟可能会导致 I/O 超时。
解决方案
对于使用 NVMe/TCP 的客户,我们建议不要使用 ESXi 8.0U2。
提醒:
- 早于修补程序 2 的 ESXi 8.0U1 在相同情况下存在另一个问题,也应避免。链接 VMware 知识库文章 https://kb.vmware.com/s/article/94106
- 只有 ESXi 版本很重要。可以将 vCenter 8.0U2 与 ESXi 8.0Uone 修补程序 2 或任何其他配置配合使用,只要版本兼容即可。
计划将该修复包含在即将推出的 ESXi 8.0U3 中。
VMFS 和 NFS 数据存储区的解决方法
使用经典(非 vVol)数据存储区的客户提供解决方法。解决方法是在创建 NVMe/TCP I/O 控制器时应用较低的保持活动超时。
无法更改已存在的控制器的超时。如果已创建控制器,则可以删除它们,然后使用减小的超时值重新创建。
默认超时值为 30 秒。如果所需的 I/O 故障切换时间为 N 秒,则减少的超时值不应超过 N/2 - 10 秒。例如,如果所需的故障切换时间为 60 秒,则应使用 20 秒 (60/2 - 10 = 20)
步骤 1:删除 NVMe/TCP 控制器(如果它们已经存在)
vSphere UI
- 在 vSphere UI 中选择主机
- 转至 Configure → Storage Adapters
- 选择 NVMe/TCP 适配器
- 转至适配器列表下的 Controllers 选项卡
- 选择一个控制器,然后单击“Remove”
在卸下控制器之前,请确保控制器未用于 I/O。否则,通过控制器的 I/O 可能会中断。
命令行界面 (CLI)
使用“列出控制器”esxcli nvme controller list“,然后使用”断开它们的连接”esxcli nvme fabrics disconnect'.
[root@hoABCDEF:~] esxcli nvme controller list Name Controller Number Adapter Transport Type Is Online Is VVOL ------------------------------------------------------------------------------------- ----------------- ------- -------------- --------- ------- nqn.xxx-11.com.xxxx:powerstore:00:042d0bc302a61CBF6EA0#vmhba67#xx.xxx.x.xxx:4420 4435 vmhba67 TCP true false nqn.xxx-11.com.xxxx:powerstore:00:042d0bc302a61CBF6EA0#vmhba67#xx.xxx.x.xxx:4420 4436 vmhba67 TCP true false nqn.xxx-08.org.xxxxyyy.discovery#vvol#vmhba67#xx.xxx.x.xxx:8009 4488 vmhba67 TCP true true nqn.xxx-11.com.xxxx:powerstore:00:042d0bc302a61CBF6EA0#vvol#vmhba67#xx.xxx.x.xxx 4490 vmhba67 TCP true true nqn.xxx-11.com.xxxx:powerstore:00:042d0bc302a61CBF6EA0#vvol#vmhba67#xx.xxx.x.xxx 4489 vmhba67 TCP true true nqn.xxx-08.org.xxxxyyy.discovery#vvol#xx.xxx.x.xxx:8009 4491 vmhba67 TCP true true [root@hop051108:~] esxcli nvme fabrics disconnect -a vmhba67 -n 4435
步骤 2:重新创建具有减小超时值的控制器。
创建控制器需要以下参数:
- PowerStore 群集 NQN
- PowerStore 存储 IP 地址
这些值可以在删除控制器之前从 vSphere UI 或 esxcli nvme 控制器列表输出中复制,也可以从 PowerStore Manager 中获取。
可以通过导航到“Settings”→“Properties”并复制“NVMe Qualified Name”的值来获取 NQN。
存储 IP 可在 Settings → Network IPs → Select storage network → Modify中找到。
获得这些值后,可以按如下方式创建控制器:
vSphere UI
选择主机 →配置→存储适配器→选择适配器→手动添加控制器→。
超时值应复制到“Keepalive Timeout”字段。
命令行界面 (CLI)
用 esxcli nvme fabrics connect -i <storage ip> -p 4420 -a <adapter id> -s <powerstore's NQN> -t <timeout>
[root@hoABCDEF:~] esxcli nvme fabrics connect -i 10.xxx.x.xx -p 4420 -a vmhba67 -s