vSAN 允许您检查由配置错误的 vSAN 网络引入的不同类型问题,并对这些问题进行故障排除。
vSAN 操作取决于网络配置、可靠性和性能。许多支持请求都源于网络配置错误或网络未按预期方式运行。
使用 vSAN 运行状况服务来解决这些网络问题。网络运行状况检查会引导您参考相应的知识库文章,具体取决于运行状况检查的结果。知识库文章提供了解决网络问题的说明。
网络运行状况检查
运行状况服务包括用于网络状况检查的类别。
每个运行状况检查都有一个 AskVMware 链接。如果运行状况检查失败,请单击 AskVMware 并阅读相关的 VMware 知识库文章,以获取更多详细信息以及如何解决当前问题的指导。
- vSAN:基本(单播)连接检查。此检查通过从每个其他 ESXi 主机对 vSAN 网络上的每个 ESXi 主机执行 ping 操作,来确认 vSAN 集群中所有 ESXi 主机之间存在 IP 连接。
- vMotion:基本(单播)连接检查。此检查确认已配置 vMotion 的 vSAN 集群中的所有 ESXi 主机之间存在 IP 连接。vMotion 网络上的每个 ESXi 主机都会对所有其他 ESXi 主机执行 ping 操作。
- 所有主机均已配置 vSAN vmknic。此检查可确保 vSAN 集群中的每个 ESXi 主机都已配置用于 vSAN 流量的 VMkernel 网卡。
- 所有主机均具有匹配的多播设置。此检查可确保每个主机都具有正确配置的多播地址。
- 所有主机均具有匹配的子网。此检查可测试 vSAN 集群中的所有 ESXi 主机是否均已配置,以便所有 vSAN VMkernel 网卡均位于同一 IP 子网上。
- 主机已从 VC 断开连接。此检查确认 vCenter Server 与 vSAN 集群中的所有 ESXi 主机之间存在活动连接。
- 存在连接问题的主机。此检查适用于以下情况:vCenter Server 将主机列为已连接,但从 vCenter 到主机的 API 调用失败。此检查可以突出显示主机与 vCenter Server 之间的连接问题。
- 网络延迟。此检查可对 vSAN 主机执行网络延迟检查。如果阈值超过 5 毫秒,则会显示警告。
- vMotion:MTU 检查(对较大数据包执行 Ping 操作)。此检查与基本 vMotion ping 连接检查相辅相成。增加了“最大传输单元”大小以提高网络性能。配置错误的 MTU 可能不会显示为网络配置问题,但可能会导致性能问题。
- vSAN 集群分区。此运行状况检查会检查集群以查看存在的分区数量。如果 vSAN 集群中有多个分区,则会显示错误。
- 基于其他检查的多播评估。此运行状况检查会汇总来自所有网络运行状况检查的数据。如果此检查失败,则表示多播很可能是导致网络分区问题的根本原因。
检查网络的命令
配置 vSAN 网络后,请使用以下命令检查其状态。您可以检查用于 vSAN 的 VMkernel 适配器 (vmknic) 及其包含的属性。
使用 ESXCLI 和 RVC 命令可确认网络完全正常,并对 vSAN 存在的任何网络问题进行故障排除。
您可以确认已在所有主机上正确配置用于 vSAN 网络的 vmknic、检查多播是否正常工作,并确认加入 vSAN 集群的主机彼此可以正常通信。
esxcli vsan network list
通过使用此命令,您可以确定 vSAN 网络使用的 VMkernel 接口。
下面的输出显示 vSAN 网络正在使用 vmk2。即使关闭了 vSAN,并且主机不再加入 vSAN,此命令仍然有效。
此外,还请务必检查代理组多播和主组多播。
[root@esxi-dell-m:~] esxcli vsan network list Interface VmkNic Name: vmk1 IP Protocol: IP Interface UUID: 32efc758-9ca0-57b9-c7e3-246e962c24d0 Agent Group Multicast Address: 224.2.3.4 Agent Group IPv6 Multicast Address: ff19::2:3:4 Agent Group Multicast Port: 23451 Master Group Multicast Address: 224.1.2.3 Master Group IPv6 Multicast Address: ff19::1:2:3 Master Group Multicast Port: 12345 Host Unicast Channel Bound Port: 12321 Multicast TTL: 5 Traffic Type: vsan
此项检查可提供一些有用的信息,例如,哪些 VMkernel 接口正用于 vSAN 流量。在这种情况下,该接口是 vmk1。除此之外,还会显示多播地址。即使集群以单播模式运行,也可能会显示此信息。其中包括组多播地址和端口。端口 23451 用于检测信号,主要主机会每秒发送一次检测信号,此检测信号对集群中的所有其他主机都可见。端口 12345 用于主要主机和备份主机之间的 CMMDS 更新。
esxcli network ip interface list
通过此命令,您可以验证 vSwitch 或分布式交换机等项。
使用此命令可检查已连接的 vSwitch 或分布式交换机,以及 MTU 大小,如果已在环境中配置巨型帧,则该大小可能非常有用。在这种情况下,MTU 默认为 1500。
[root@esxi-dell-m:~] esxcli network ip interface list vmk0 Name: vmk0 <<truncated>> vmk1 Name: vmk1 MAC Address: 00:50:56:69:96:f0 Enabled: true Portset: DvsPortset-0 Portgroup: N/A Netstack Instance: defaultTcpipStack VDS Name: vDS VDS UUID: 50 1e 5b ad e3 b4 af 25-18 f3 1c 4c fa 98 3d bb VDS Port: 16 VDS Connection: 1123658315 Opaque Network ID: N/A Opaque Network Type: N/A External ID: N/A MTU: 9000 TSO MSS: 65535 Port ID: 50331814
最大传输单元大小显示为 9000,因此此 VMkernel 端口是针对巨型帧配置的,因为巨型帧需要的 MTU 约为 9,000。对于巨型帧的使用,VMware 不提供任何建议。但是,支持将巨型帧与 vSAN 结合使用。
esxcli network ip interface ipv4 get –i vmk2
此命令会显示 vSAN VMkernel 接口的 IP 地址和网络掩码等信息。
借助此信息,管理员现在可以开始在命令行中使用其他可用命令来检查 vSAN 网络是否正常工作。
[root@esxi-dell-m:~] esxcli network ip interface ipv4 get -i vmk1 Name IPv4 Address IPv4 Netmask IPv4 Broadcast Address Type Gateway DHCP DNS ---- ------------ ------------- -------------- ------------ ------- -------- vmk1 172.40.0.9 255.255.255.0 172.40.0.255 STATIC 0.0.0.0 false
vmkping
vmkping
命令可验证网络上的所有其他 ESXi 主机是否响应 ping 请求。
~ # vmkping -I vmk2 172.32.0.3 -s 1472 -d PING 172.32.0.3 (172.32.0.3): 56 data bytes 64 bytes from 172.32.0.3: icmp_seq=0 ttl=64 time=0.186 ms 64 bytes from 172.32.0.3: icmp_seq=1 ttl=64 time=2.690 ms 64 bytes from 172.32.0.3: icmp_seq=2 ttl=64 time=0.139 ms --- 172.32.0.3 ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 0.139/1.005/2.690 ms
虽然该命令不验证多播功能,但它可以帮助您确定存在网络问题的恶意 ESXi 主机。您还可以检查响应时间以查看 vSAN 网络上是否存在任何异常延迟。
如果配置了巨型帧,当巨型帧 MTU 大小不正确时,此命令将不会报告任何问题。默认情况下,此命令使用的 MTU 大小为 1500。如果需要验证巨型帧是否成功以端到端方式运行,请将 vmkping 与较大数据包 (-s) 选项一起使用,如下所示:
~ # vmkping -I vmk2 172.32.0.3 -s 8972 -d PING 172.32.0.3 (172.32.0.3): 8972 data bytes 9008 bytes from 172.32.0.3: icmp_seq=0 ttl=64 time=0.554 ms 9008 bytes from 172.32.0.3: icmp_seq=1 ttl=64 time=0.638 ms 9008 bytes from 172.32.0.3: icmp_seq=2 ttl=64 time=0.533 ms --- 172.32.0.3 ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 0.533/0.575/0.638 ms ~ #
考虑将 -d 添加到 vmkping 命令,以测试是否可以在不拆分的情况下发送数据包。
esxcli network ip neighbor list
此命令有助于验证所有 vSAN 主机是否位于同一网段。
在此配置中,我们有一个四主机集群,因此此命令返回了其他三个主机的 ARP(地址解析协议)条目,包括其 IP 地址及其 vmknic(vSAN 被配置为在此集群中的所有主机上使用 vmk1)。
[root@esxi-dell-m:~] esxcli network ip neighbor list -i vmk1 Neighbor Mac Address Vmknic Expiry State Type ----------- ----------------- ------ ------- ----- ------- 172.40.0.12 00:50:56:61:ce:22 vmk1 164 sec Unknown 172.40.0.10 00:50:56:67:1d:b2 vmk1 338 sec Unknown 172.40.0.11 00:50:56:6c:fe:c5 vmk1 162 sec Unknown [root@esxi-dell-m:~]
esxcli network diag ping
此命令会检查网络上的重复项以及响应的往返时间。
为获取有关各个主机之间 vSAN 网络连接的更多详细信息,ESXCLI 提供了一个功能强大的网络诊断命令。以下是此类输出的一个示例,其中,VMkernel 接口位于 vmk1 上,网络上另一台主机的远程 vSAN 网络 IP 为 172.40.0.10
[root@esxi-dell-m:~] esxcli network diag ping -I vmk1 -H 172.40.0.10 Trace: Received Bytes: 64 Host: 172.40.0.10 ICMP Seq: 0 TTL: 64 Round-trip Time: 1864 us Dup: false Detail: Received Bytes: 64 Host: 172.40.0.10 ICMP Seq: 1 TTL: 64 Round-trip Time: 1834 us Dup: false Detail: Received Bytes: 64 Host: 172.40.0.10 ICMP Seq: 2 TTL: 64 Round-trip Time: 1824 us Dup: false Detail: Summary: Host Addr: 172.40.0.10 Transmitted: 3 Recieved: 3 Duplicated: 0 Packet Lost: 0 Round-trip Min: 1824 us Round-trip Avg: 1840 us Round-trip Max: 1864 us [root@esxi-dell-m:~]
vsan.lldpnetmap
此 RVC 命令会显示上行链路端口信息。
如果在环境中存在启用了链路层发现协议 (Link Layer Discovery Protocol, LLDP) 的非 Cisco 交换机,有一个 RVC 命令可显示上行链路 <-> 交换机 <-> 交换机端口信息。有关 RVC 的更多信息,请参阅《RVC 命令指南》。
此命令可以帮助您确定在 vSAN 集群跨越多个交换机时,将哪些主机连接到哪些交换机。如果只有集群中的一部分主机受到影响,则此命令可以帮助将问题隔离到特定交换机。
> vsan.lldpnetmap 02013-08-15 19:34:18 -0700: This operation will take 30-60 seconds ...+---------------+---------------------------+| Host | LLDP info |+---------------+---------------------------+| 10.143.188.54 | w2r13-vsan-x650-2: vmnic7 || | w2r13-vsan-x650-1: vmnic5 |+---------------+---------------------------+
此功能仅适用于支持 LLDP 的交换机。要对交换机进行配置,请登录到该交换机并运行以下命令:
switch# config t Switch(Config)# feature lldp
要验证 LLDP 是否已启用,请执行以下命令:
switch(config)#do show running-config lldp
默认情况下,LLDP 在发送和接收模式下均可运行。如果未找到物理交换机信息,请检查 vDS 属性的设置。默认情况下,系统会创建 vDS,并将发现协议设置为 CDP(Cisco 发现协议)。要解决此问题,请将发现协议设置为 LLDP,并在 vDS 上将操作设置为二者模式。
检查多播通信
多播配置可能会导致初始 vSAN 部署出现问题。
验证多播在 vSAN 环境中是否正常工作的一种最简单的方法是使用 tcpdump-uw
命令。此命令可以从 ESXi 主机的命令行中运行。
此 tcpdump-uw
命令显示主要主机是否正确发送多播数据包(端口和 IP 信息)以及集群中的所有其他主机是否接收这些数据包。
在主要主机上,此命令显示正在发送到多播地址的数据包。在所有其他主机上,可以看到相同的数据包(从主要主机传输到多播地址)。如果不显示,则说明多播未正常工作。在集群中的任意主机上运行此处显示的 tcpdump-uw
命令,即可看到来自主要主机的检测信号。在这种情况下,主要主机位于 IP 地址 172.32.0.2 上。-v(表示详细级别)是可选参数。
[root@esxi-hp-02:~] tcpdump-uw -i vmk2 multicast -v tcpdump-uw: listening on vmk2, link-type EN10MB (Ethernet), capture size 96 bytes 11:04:21.800575 IP truncated-ip - 146 bytes missing! (tos 0x0, ttl 5, id 34917, offset 0, flags [none], proto UDP (17), length 228) 172.32.0.4.44824 > 224.1.2.3.12345: UDP, length 200 11:04:22.252369 IP truncated-ip - 234 bytes missing! (tos 0x0, ttl 5, id 15011, offset 0, flags [none], proto UDP (17), length 316) 172.32.0.2.38170 > 224.2.3.4.23451: UDP, length 288 11:04:22.262099 IP truncated-ip - 146 bytes missing! (tos 0x0, ttl 5, id 3359, offset 0, flags [none], proto UDP (17), length 228) 172.32.0.3.41220 > 224.2.3.4.23451: UDP, length 200 11:04:22.324496 IP truncated-ip - 146 bytes missing! (tos 0x0, ttl 5, id 20914, offset 0, flags [none], proto UDP (17), length 228) 172.32.0.5.60460 > 224.1.2.3.12345: UDP, length 200 11:04:22.800782 IP truncated-ip - 146 bytes missing! (tos 0x0, ttl 5, id 35010, offset 0, flags [none], proto UDP (17), length 228) 172.32.0.4.44824 > 224.1.2.3.12345: UDP, length 200 11:04:23.252390 IP truncated-ip - 234 bytes missing! (tos 0x0, ttl 5, id 15083, offset 0, flags [none], proto UDP (17), length 316) 172.32.0.2.38170 > 224.2.3.4.23451: UDP, length 288 11:04:23.262141 IP truncated-ip - 146 bytes missing! (tos 0x0, ttl 5, id 3442, offset 0, flags [none], proto UDP (17), length 228) 172.32.0.3.41220 > 224.2.3.4.23451: UDP, length 200
尽管此输出可能显得有些混乱,但此处显示的输出足以说明集群中的四个主机正在从主要主机获取检测信号。必须在每个主机上运行此 tcpdump-uw 命令,以确认它们都收到了检测信号。此命令可确认主要主机正在发送检测信号,并且集群中的所有其他主机都会收到这些检测信号,即说明多播正常工作。
如果某些 vSAN 主机无法从主要主机获取时长为一秒的检测信号,则网络管理员需要检查其交换机的多播配置。
为避免出现令人讨厌的 truncated-ip – 146 bytes missing! 消息,请使用 –s0 选项执行相同的命令以停止截断数据包:
[root@esxi-hp-02:~] tcpdump-uw -i vmk2 multicast -v -s0 tcpdump-uw: listening on vmk2, link-type EN10MB (Ethernet), capture size 65535 bytes 11:18:29.823622 IP (tos 0x0, ttl 5, id 56621, offset 0, flags [none], proto UDP (17), length 228) 172.32.0.4.44824 > 224.1.2.3.12345: UDP, length 200 11:18:30.251078 IP (tos 0x0, ttl 5, id 52095, offset 0, flags [none], proto UDP (17), length 228) 172.32.0.3.41220 > 224.2.3.4.23451: UDP, length 200 11:18:30.267177 IP (tos 0x0, ttl 5, id 8228, offset 0, flags [none], proto UDP (17), length 316) 172.32.0.2.38170 > 224.2.3.4.23451: UDP, length 288 11:18:30.336480 IP (tos 0x0, ttl 5, id 28606, offset 0, flags [none], proto UDP (17), length 228) 172.32.0.5.60460 > 224.1.2.3.12345: UDP, length 200 11:18:30.823669 IP (tos 0x0, ttl 5, id 56679, offset 0, flags [none], proto UDP (17), length 228) 172.32.0.4.44824 > 224.1.2.3.12345: UDP, length 200
tcpdump 命令与 IGMP(Internet 组管理协议)成员资格相关联。主机(和网络设备)使用 IGMP 建立多播组成员资格。
vSAN 集群中的每个 ESXi 主机发出常规 IGMP 成员资格报告(加入)。
tcpdump 命令显示主机的 IGMP 成员报告:
[root@esxi-dell-m:~] tcpdump-uw -i vmk1 igmp tcpdump-uw: verbose output suppressed, use -v or -vv for full protocol decode listening on vmk1, link-type EN10MB (Ethernet), capture size 262144 bytes 15:49:23.134458 IP 172.40.0.9 > igmp.mcast.net: igmp v3 report, 1 group record(s) 15:50:22.994461 IP 172.40.0.9 > igmp.mcast.net: igmp v3 report, 1 group record(s)
输出显示正在生成 IGMP v3 报告,表明 ESXi 主机会定期更新其成员资格。如果网络管理员不确定 vSAN ESXi 主机是否会正确生成 IGMP,则可以在集群中的每个 ESXi 主机上运行此命令并显示相关跟踪信息以进行验证。
如果您具有多播通信,请使用 IGMP v3。
事实上,可以使用以下命令同时查看多播和 IGMP 流量:
[root@esxi-hp-02:~] tcpdump-uw -i vmk2 multicast or igmp -v -s0
一个常见问题是,在多个物理交换机上配置了 vSAN 集群后,虽然已在一个交换机上启用多播,但未跨交换机启用多播。在这种情况下,集群由一个分区中的两个 ESXi 主机构成,但另一个 ESXi 主机(连接到其他交换机)无法加入此集群,而是在另一个分区中构成自己的 vSAN 集群。之前介绍的 vsan.lldpnetmap
命令可帮助您确定网络配置,以及哪些主机连接到哪个交换机。
构成 vSAN 集群时,会有一些指标显示多播可能存在问题。
假定已按照子网、VLAN 和 MTU 的检查表执行了相关步骤,并且集群中的每个主机都可以对集群中的所有其他主机执行 vmkping
命令。
如果在创建集群时存在多播问题,则常见症状是每个 ESXi 主机构成各自的 vSAN 集群,并以自身作为主要主机。如果每个主机具有唯一的网络分区 ID,则此症状表示主机之间没有多播。
但是,如果一部分 ESXi 主机构成一个集群,而另一部分主机构成另一个集群,并且每个集群都具有唯一分区和各自的主要主机、备份主机甚至代理主机,则说明在交换机中启用了多播,但未跨交换机启用多播。vSAN 显示第一个物理交换机上的主机构成了其自己的集群分区,而第二个物理交换机上的主机也构成了其自己的集群分区,并且每个集群都具有自己的主要主机。如果可以确认集群中的主机连接到的交换机,并且集群中的所有主机都连接到同一交换机时,则可能就是这个问题。
检查 vSAN 网络性能
确保 ESXi 主机之间具有足够的带宽。此工具可帮助您测试 vSAN 网络是否以最佳方式运行。
要检查 vSAN 网络的性能,您可以使用 iperf
工具来测量最大 TCP 带宽和延迟。该工具位于 /usr/lib/vmware/vsan/bin/iperf.copy.
中。使用 -–help
运行该工具可查看各种选项。使用此工具可检查加入 vSAN 集群的 ESXi 主机之间的网络带宽和延迟。
VMware 知识库文章 2001003 可帮助您进行设置和测试。
在委托创建 vSAN 集群时,此功能非常有用。如果在集群已处于生产环境中时在 vSAN 网络上运行 iperf 测试,可能会影响集群中运行的虚拟机的性能。
检查 vSAN 网络限制
vsan.check.limits 命令确认未超出任何 vSAN 阈值。
> ls 0 / 1 vcsa-04.rainpole.com/ > cd 1 /vcsa-04.rainpole.com> ls 0 Datacenter (datacenter) /vcsa-04.rainpole.com> cd 0 /vcsa-04.rainpole.com/Datacenter> ls 0 storage/ 1 computers [host]/ 2 networks [network]/ 3 datastores [datastore]/ 4 vms [vm]/ /vcsa-04.rainpole.com/Datacenter> cd 1 /vcsa-04.rainpole.com/Datacenter/computers> ls 0 Cluster (cluster): cpu 155 GHz, memory 400 GB 1 esxi-dell-e.rainpole.com (standalone): cpu 38 GHz, memory 123 GB 2 esxi-dell-f.rainpole.com (standalone): cpu 38 GHz, memory 123 GB 3 esxi-dell-g.rainpole.com (standalone): cpu 38 GHz, memory 123 GB 4 esxi-dell-h.rainpole.com (standalone): cpu 38 GHz, memory 123 GB /vcsa-04.rainpole.com/Datacenter/computers> vsan.check_limits 0 2017-03-14 16:09:32 +0000: Querying limit stats from all hosts ... 2017-03-14 16:09:34 +0000: Fetching vSAN disk info from esxi-dell-m.rainpole.com (may take a moment) ... 2017-03-14 16:09:34 +0000: Fetching vSAN disk info from esxi-dell-n.rainpole.com (may take a moment) ... 2017-03-14 16:09:34 +0000: Fetching vSAN disk info from esxi-dell-o.rainpole.com (may take a moment) ... 2017-03-14 16:09:34 +0000: Fetching vSAN disk info from esxi-dell-p.rainpole.com (may take a moment) ... 2017-03-14 16:09:39 +0000: Done fetching vSAN disk infos +--------------------------+--------------------+-----------------------------------------------------------------+ | Host | RDT | Disks | +--------------------------+--------------------+-----------------------------------------------------------------+ | esxi-dell-m.rainpole.com | Assocs: 1309/45000 | Components: 485/9000 | | | Sockets: 89/10000 | naa.500a075113019b33: 0% Components: 0/0 | | | Clients: 136 | naa.500a075113019b37: 40% Components: 81/47661 | | | Owners: 138 | t10.ATA_____Micron_P420m2DMTFDGAR1T4MAX_____ 0% Components: 0/0 | | | | naa.500a075113019b41: 37% Components: 80/47661 | | | | naa.500a07511301a1eb: 38% Components: 81/47661 | | | | naa.500a075113019b39: 39% Components: 79/47661 | | | | naa.500a07511301a1ec: 41% Components: 79/47661 | <<truncated>>
从网络角度而言,RDT 关联 (Assocs) 和套接字计数非常重要。在 vSAN 6.0 及更高版本中,每个主机具有 45,000 个关联。RDT 关联用于跟踪 vSAN 内的对等网络状态。系统会调整 vSAN 的大小,以便它不会用尽 RDT 关联。vSAN 还会限制允许使用的 TCP 套接字数量,并且系统会调整 vSAN 大小,使其永不会用尽 TCP 套接字的分配量。每个主机具有 10,000 个套接字的限制。
vSAN 客户端表示 vSAN 集群中的对象访问权限。客户端通常表示在主机上运行的虚拟机。客户端和对象可能不在同一主机上。虽然没有硬性定义的限制,但显示的此衡量指标可帮助了解客户端如何在主机之间实现均衡。
对于给定的 vSAN 对象,只有一个 vSAN 所有者,通常与访问此对象的 vSAN 客户端位于同一个位置。vSAN 所有者会协调所有对 vSAN 对象的访问权限,并实施镜像和条带化等功能。虽然没有硬性定义的限制,但再次显示的此衡量指标可帮助了解所有者如何在主机之间实现均衡。