VMware vSAN Knowledge Base

Phase 7 — Networking for vSAN ⚠ Break Scenarios ✓ Fix Procedures
13
Networking Issues
7
Break Scenarios
6
Fix Procedures
Phase 7
Current Phase
61
VMkernel Adapter Misconfiguration Breaks vSAN Traffic
Wrong VMkernel adapter tagging, subnet mismatch, or missing vSAN service tag causes hosts to lose cluster membership
Impact: vSAN requires a dedicated VMkernel adapter tagged with the "vSAN" service. If this tag is missing, the adapter is on the wrong subnet, or the wrong vmk is tagged, vSAN traffic cannot flow between hosts. Objects become inaccessible, hosts show as partitioned, and the cluster enters a degraded state.
Symptoms
  • vSAN Health: "vSAN cluster members do not have vSAN network connectivity"
  • Host shows "Not connected" in vSAN cluster member list
  • Objects on the affected host show "Inaccessible"
  • VM I/O stalls for VMs with components on the disconnected host
  • esxcli vsan cluster get — shows the host is not a member
Root Causes
  • VMkernel adapter missing the "vSAN" traffic service tag
  • vSAN VMkernel on different subnet from other cluster hosts
  • Multiple VMkernel adapters with vSAN tag — only one should be tagged
  • VMkernel placed on wrong VLAN or port group
  • IP address conflict — two hosts sharing the same vSAN VMkernel IP
  • After vDS migration — VMkernel lost its service tags
1

Verify VMkernel adapter configuration on each host

# SSH to the affected ESXi host:

# List all VMkernel adapters and their service tags:
esxcli network ip interface tag get
# Look for:
#   vmk1 (or whichever is for vSAN):
#     Tags: VSAN
# If "VSAN" tag is missing — that's the problem

# List VMkernel adapter IPs and subnets:
esxcli network ip interface ipv4 get
# Verify:
#   All hosts' vSAN VMkernel IPs are on the SAME subnet
#   No IP duplicates across hosts
#   Subnet mask is consistent (e.g., all /24 or all /25)

# Check which port group the VMkernel is on:
esxcli network ip interface list
# "Portgroup" column shows the associated port group/vDS portgroup
# Verify it is the correct vSAN-designated port group
2

Add or fix the vSAN service tag

# If the vSAN tag is missing from the correct VMkernel adapter:

# Add vSAN traffic tag to vmk1:
esxcli vsan network ipv4 add -i vmk1

# Verify the tag was applied:
esxcli vsan network list
# Should show:
#   Interface: vmk1
#   VsanVmknicUuid: (a UUID)
#   IP Protocol: IP

# If the wrong VMkernel has the vSAN tag (e.g., vmk0 instead of vmk1):
# Remove from wrong adapter:
esxcli vsan network ipv4 remove -i vmk0
# Add to correct adapter:
esxcli vsan network ipv4 add -i vmk1

# From vSphere Client (non-CLI alternative):
# Host > Configure > Networking > VMkernel adapters
# Select the correct vmk > Edit > check "vSAN" under Services
# Uncheck "vSAN" from any incorrect vmk adapters
3

Verify L2/L3 connectivity between all vSAN VMkernel interfaces

# From the affected host, ping every other host's vSAN VMkernel IP:
vmkping -I vmk1 <host2-vSAN-IP> -d -s 8972
vmkping -I vmk1 <host3-vSAN-IP> -d -s 8972
vmkping -I vmk1 <host4-vSAN-IP> -d -s 8972

# -I vmk1: use the vSAN VMkernel adapter
# -d: set don't-fragment bit
# -s 8972: test jumbo frames (9000 MTU - 28 byte header)

# If ping fails:
#   Check physical switch VLAN configuration
#   Check vDS/vSS port group VLAN ID matches physical switch
#   Check physical switch port is trunking the correct VLAN
#   If L3 (routed): verify gateway and routing between subnets

# After fixing, run vSAN Health check:
# Cluster > Monitor > vSAN > Health > Retest
# "Network" section should turn green
🛈 Best Practice: Always use a dedicated VMkernel adapter (vmk1+) for vSAN — never share vmk0 (management) with vSAN traffic. Use a dedicated VLAN for vSAN. Document the VMkernel-to-VLAN-to-subnet mapping in your runbook.
62
MTU / Jumbo Frame Mismatch — Silent vSAN Performance Killer
Inconsistent MTU settings across hosts, switches, and port groups cause packet drops, retransmits, and severe latency
Impact: vSAN strongly recommends MTU 9000 (jumbo frames) for optimal performance. If ANY hop in the network path — VMkernel, vSwitch, physical switch port, inter-switch link — does not support MTU 9000, large packets are silently dropped or fragmented. The result is intermittent latency spikes, retransmits, and in severe cases, vSAN network partition events.
Symptoms
  • vSAN Health: "vSAN: MTU check (ping with large packet size)" FAILS
  • Intermittent VM latency spikes — not constant, not predictable
  • Large I/O operations (resync, migrations) are extremely slow
  • Small I/O (4KB reads) works fine — only large I/O is affected
  • esxtop: network dropped packets (DRPTX/DRPRX) > 0 on vSAN vmk
  • TCP retransmits visible in packet captures
Root Causes
  • VMkernel adapter MTU set to 9000 but physical switch port at 1500
  • vDS/vSS MTU set to 9000 but one host's physical NIC at 1500
  • Inter-switch link (ISL/uplink) between ToR switches at 1500
  • One host added later with different MTU than existing hosts
  • After switch firmware upgrade — MTU reset to defaults on some ports
  • LACP bond with mismatched member MTU
1

Test end-to-end MTU from every host to every other host

# SSH to each ESXi host and test jumbo frames to all other vSAN hosts:

# Test with 8972 byte payload (9000 MTU - 28 bytes IP+ICMP header):
vmkping -I vmk1 <host2-vSAN-IP> -d -s 8972
vmkping -I vmk1 <host3-vSAN-IP> -d -s 8972
vmkping -I vmk1 <host4-vSAN-IP> -d -s 8972

# -d = Don't Fragment flag (critical — forces end-to-end MTU validation)
# -s 8972 = payload size

# SUCCESS: "8972 bytes from x.x.x.x: ..."
# FAILURE: "PING x.x.x.x: sendto() No buffer space available"
#      or: "Request timeout" or "Packet needs to be fragmented"

# If ANY host pair fails — there is an MTU mismatch on that path
# You must test EVERY combination: host1→host2, host1→host3, etc.
# A single broken link can be between specific switch ports only
2

Audit MTU at every layer — end to end

# Layer 1: Physical NIC MTU on each ESXi host:
esxcli network nic list
# Shows: Name, MTU, Link Status, Speed
# Every NIC carrying vSAN traffic must show MTU: 9000

# Layer 2: vSwitch / vDS MTU:
esxcli network vswitch dvs vmware list
# Check: MTU per vDS — must be 9000
# For standard vSwitch:
esxcli network vswitch standard list
# Check: MTU per vSS — must be 9000

# Layer 3: VMkernel adapter MTU:
esxcli network ip interface list
# Check: MTU for vmk1 (vSAN) — must be 9000

# Layer 4: Physical switch (from switch CLI):
# Cisco: show interface <port> | include MTU
# Arista: show interfaces <port> | include MTU
# Dell: show interfaces <port> status
# Verify EVERY port connected to ESXi hosts AND inter-switch links

# Common miss: inter-switch link / spine-leaf uplink at default 1500
# This breaks jumbo frames between hosts on different switches
3

Fix MTU — set 9000 end-to-end

# Fix VMkernel adapter MTU (if wrong):
# vSphere Client > Host > Configure > Networking > VMkernel adapters
# Select vmk1 > Edit > set MTU to 9000

# Fix vDS MTU:
# vSphere Client > Networking > select vDS > Configure > Settings
# Edit > MTU: 9000

# Fix standard vSwitch MTU (from ESXi Shell):
esxcli network vswitch standard set -v vSwitch1 -m 9000

# Fix physical switch (example Cisco NX-OS):
# interface Ethernet1/1
#   mtu 9216
#   (use 9216 on physical switches — slightly larger for L2 headers)

# After fixing all layers, retest:
vmkping -I vmk1 <host2-vSAN-IP> -d -s 8972

# Then rerun vSAN Health:
# Cluster > Monitor > vSAN > Health > Retest
# "Network > vSAN: MTU check" should turn green

# IMPORTANT: If you cannot set 9000 everywhere, set ALL to 1500
# Mixed MTU is worse than consistent 1500 MTU everywhere
Critical Rule: MTU must be consistent end-to-end: VMkernel adapter, vSwitch/vDS, physical NIC, every physical switch port, and every inter-switch link. A single device at 1500 on the path silently kills jumbo frame performance. For ESA clusters with 25GbE+, jumbo frames provide up to 20% throughput improvement.
63
NIC Teaming & Failover — Best Practices for vSAN Traffic
Configuring uplink teaming policies to maximize vSAN bandwidth, ensure failover, and avoid split-brain scenarios
🛈 Context: vSAN traffic is bandwidth-intensive and latency-sensitive. The NIC teaming policy determines how vSAN traffic is distributed across physical uplinks and how failover occurs. A wrong teaming policy can cause asymmetric bandwidth, traffic black-holes during failover, or even vSAN network partitions.
Recommended Policies
  • Route based on originating virtual port (default): Each VMkernel binds to one uplink. Simple, predictable. vSAN uses ONE uplink at a time, failover to second.
  • Route based on IP hash (with LACP): Distributes traffic across uplinks based on IP src/dst hash. Requires LACP on physical switch. Can use both uplinks simultaneously.
  • Route based on physical NIC load (vDS only): Dynamically balances VMkernel traffic across uplinks based on utilization. Best for vSAN on vDS.
Avoid These for vSAN
  • Route based on source MAC hash: vSAN VMkernel has ONE MAC — all traffic goes to one uplink. No load balancing. Failover only.
  • Explicit failover order: Same as active/standby — no load balancing. Acceptable only if you have dedicated vSAN NICs.
  • Beacon probing without physical switch support: Can cause false failovers and flapping.
1

Check current teaming policy for vSAN port group

# For vDS (Distributed Switch):
# vSphere Client > Networking > vDS > Port Groups
# Select the vSAN port group > Edit Settings > Teaming and Failover

# Shows:
#   Load Balancing: (current policy)
#   Network Failure Detection: Link status / Beacon probing
#   Failover Order: Active / Standby uplinks

# From ESXi Shell (for vSS):
esxcli network vswitch standard policy failover get -v vSwitch1
# Shows: Load Balancing Policy, Active/Standby NICs

# Verify which physical NIC is currently carrying vSAN traffic:
esxcli network vswitch dvs vmware lacp status get
# Or check via esxtop (press 'n' for network view):
# Look at MbTX/s and MbRX/s per uplink — the active one has traffic
2

Configure recommended teaming for vSAN on vDS

# Option A: Route based on physical NIC load (RECOMMENDED for vDS):
# vDS > vSAN Port Group > Edit Settings > Teaming and Failover
# Load Balancing: "Route based on physical NIC load"
# Network Failure Detection: "Link status only"
# Failover Order: Both uplinks Active

# This dynamically moves VMkernel port bindings between uplinks
# based on 30-second utilization sampling — best bandwidth utilization

# Option B: LACP (requires switch configuration):
# vDS > Configure > LACP
# New LAG > 2 ports > Mode: Active > Hash: L3+L4
# vSAN Port Group > Teaming: "Route based on IP hash"
# Failover Order: LAG1 Active, individual uplinks Unused

# Physical switch (Cisco NX-OS example):
# interface port-channel10
#   switchport mode trunk
#   switchport trunk allowed vlan 100
#   mtu 9216
#   vpc 10
# interface Ethernet1/1-2
#   channel-group 10 mode active

# IMPORTANT: LACP requires both sides configured simultaneously
# Misconfigured LACP causes complete traffic loss
3

Test failover behavior

# After configuring teaming, test NIC failover:

# 1. Start a continuous ping from another host to verify connectivity:
# (On host2):
vmkping -I vmk1 <host1-vSAN-IP> -c 100 -i 1

# 2. On host1, simulate uplink failure by disabling one NIC:
esxcli network nic down -n vmnic2

# 3. Verify traffic fails over:
# Ping should see 1-3 lost packets, then resume
# If more than 5 seconds of loss — failover is too slow

# 4. Re-enable the NIC:
esxcli network nic up -n vmnic2

# 5. Verify failback:
# Traffic should return to original distribution

# Check vSAN Health after test:
# Cluster > Monitor > vSAN > Health > Network
# All checks should be green

# IMPORTANT: Test failover during a maintenance window
# Do NOT test during production hours on a live vSAN cluster
ESA Recommendation: ESA clusters with 25GbE NICs should use "Route based on physical NIC load" on vDS for maximum bandwidth utilization. With 2×25GbE, this gives up to 50 Gbps aggregate vSAN bandwidth. LACP is equally valid if your switching infrastructure supports it.
64
vSAN Multicast to Unicast Migration & Troubleshooting
Understanding the transition from multicast-based to unicast-based cluster communication and resolving legacy multicast issues
🛈 Context: Prior to vSAN 6.6, cluster member discovery and heartbeats required multicast. This caused endless issues with physical switches (IGMP snooping, PIM, multicast flooding). Starting with vSAN 6.6+ (and mandatory in vSAN 7.0+), vSAN uses unicast for cluster communication. If you are on vSAN 7.0+, multicast is no longer needed — but legacy configurations may still have multicast-related switch settings causing problems.
Legacy Multicast Issues (vSAN <6.6)
  • Physical switches must support IGMP snooping — misconfigured = cluster partition
  • Multicast flooding on VLAN — excessive broadcast traffic
  • PIM configuration required for L3 vSAN networks
  • Switch firmware bugs causing multicast group drops
  • Complex troubleshooting — packet captures needed to diagnose
Unicast Benefits (vSAN 6.6+)
  • No multicast configuration on physical switches required
  • Works over L3 routed networks natively
  • Simpler switch configuration — standard unicast forwarding
  • No IGMP snooping issues
  • Better compatibility with public cloud underlay networks
  • Automatic in vSAN 7.0+ — no configuration needed
1

Check if your cluster uses multicast or unicast

# From any ESXi host in the cluster:
esxcli vsan cluster get
# Look for:
#   "Sub-Cluster Master UUID" — if present, cluster is formed
#   "Multicast" or "Unicast" in the member list type

# Check vSAN version — determines communication mode:
esxcli vsan maintenancemode cancelrecoverytask
# If vSAN 7.0+ — always unicast (multicast not used)
# If vSAN 6.6-6.7 — unicast by default, multicast as fallback

# In vSphere Client:
# Cluster > Configure > vSAN > General
# If you see "Advanced Options" with multicast address — legacy mode

# vSAN on-disk format version:
esxcli vsan storage list | grep "On-Disk Format"
# Format 10+ = vSAN 7.0+ = always unicast
# Format 6-9 = vSAN 6.x = may use multicast
2

Resolve legacy multicast issues (vSAN 6.x environments)

# If you are on vSAN 6.6+ and experiencing multicast-related partition:

# Option A: Upgrade to vSAN 7.0+ (recommended)
# This eliminates multicast entirely
# Follow standard vSAN upgrade path via vLCM

# Option B: Verify multicast on physical switches (if stuck on 6.x):
# Check IGMP snooping is enabled on the vSAN VLAN:
# Cisco: show ip igmp snooping vlan <vsan-vlan-id>
# Arista: show ip igmp snooping

# Check multicast group membership:
# Cisco: show ip igmp snooping groups vlan <vsan-vlan-id>
# The vSAN multicast address (default 224.1.2.3) should be listed

# If multicast is not working:
# Ensure IGMP querier exists on the VLAN
# Cisco: ip igmp snooping querier (on SVI for that VLAN)

# For L3 routed vSAN (across subnets):
# PIM must be configured on all L3 interfaces in the path
# This is complex — another reason to upgrade to 7.0+ for unicast
3

Post-upgrade: clean up legacy multicast switch config

# After upgrading to vSAN 7.0+ (unicast), clean up switch configs:

# 1. IGMP snooping on the vSAN VLAN is no longer needed for vSAN
#    (keep it if other services on the same VLAN use multicast)

# 2. PIM configuration for vSAN multicast group — remove:
#    no ip pim sparse-mode (on vSAN VLAN SVI)
#    no ip igmp snooping querier (if only used for vSAN)

# 3. Multicast group reservations on switches — remove:
#    no ip igmp snooping group 224.1.2.3

# Verify vSAN cluster is healthy after switch changes:
# Cluster > Monitor > vSAN > Health > Retest all
# Network checks should all be green

# IMPORTANT: Make switch changes during maintenance window
# Even though vSAN 7.0+ doesn't use multicast, removing switch config
# during production is still a change control item
Summary: If you're on vSAN 7.0+ or vSAN 8.x — multicast is NOT used. You do not need IGMP snooping, PIM, or multicast group configuration on your physical switches for vSAN. If your switches have these legacy configs, they won't hurt but can be safely removed.
65
vSAN Network Partition (Split Brain) — Detection & Recovery
Cluster splits into sub-clusters that cannot communicate — causing object inaccessibility and potential data divergence
Impact: A network partition splits the vSAN cluster into two or more sub-clusters that cannot see each other. Objects whose components span the partition lose quorum and become inaccessible. VMs with components on both sides of the partition stall with I/O errors. This is the most dangerous vSAN failure scenario.
Symptoms
  • vSAN Health: "Cluster health > Network: All hosts have vSAN vmknic configured" — some hosts missing
  • Cluster shows two sub-cluster masters (normally only one)
  • Objects show "Inaccessible" or "Reduced availability"
  • VMs freeze, BSOD, or report disk errors
  • vCenter may see some hosts as "Disconnected" (but hosts are actually running)
  • esxcli vsan cluster get — shows different member lists on different hosts
Root Causes
  • Physical switch failure — ToR switch reboot, port channel flap
  • VLAN misconfiguration — switch admin changed VLAN on vSAN ports
  • SFP/cable failure on inter-switch link
  • Spanning tree topology change isolating a switch
  • NIC firmware bug causing link flap
  • Firewall or ACL blocking vSAN traffic between subnets (L3 deployments)
1

Detect the partition — identify which hosts can see which

# SSH to each ESXi host and check cluster membership:

# On Host 1:
esxcli vsan cluster get
# Note: Sub-Cluster Master UUID and member list

# On Host 2:
esxcli vsan cluster get
# Compare member lists

# If Host1 sees {Host1, Host2} but Host3 sees {Host3, Host4}
# → You have a 2+2 partition

# Quick connectivity matrix — from Host1:
vmkping -I vmk1 <host2-vSAN-IP>  # Should succeed (same sub-cluster)
vmkping -I vmk1 <host3-vSAN-IP>  # Will FAIL (other sub-cluster)
vmkping -I vmk1 <host4-vSAN-IP>  # Will FAIL (other sub-cluster)

# Check vSAN health from each side:
esxcli vsan health cluster list
# Each sub-cluster thinks the other hosts are "absent"

# CRITICAL: Do NOT reboot hosts or restart services
# This makes recovery harder. Fix the network first.
2

Identify and fix the network break

# The partition is ALWAYS caused by a network issue. Find it:

# Check physical NIC link status on each host:
esxcli network nic list
# If "Link Status: Down" on vSAN NIC — cable/SFP/switch port issue

# Check switch port status (from switch CLI):
# Cisco: show interface status | include connected
# Look for err-disabled, notconnect, or down ports

# Check spanning tree:
# Cisco: show spanning-tree vlan <vsan-vlan-id>
# If a port is in "Blocking" state — STP is isolating the path

# Check inter-switch links:
# Cisco: show port-channel summary
# If the port-channel to another switch is "down" — that's the break

# Check for ACLs/firewall rules:
# If vSAN is on an L3 network, verify no firewall/ACL blocks:
#   TCP/UDP 2233 (vSAN transport)
#   TCP 443 (vSAN management)

# Common fix actions:
#   - Reseat SFP/cable on failed inter-switch link
#   - Re-enable err-disabled port: (Cisco) shut / no shut
#   - Fix VLAN trunk: switchport trunk allowed vlan add <vsan-vlan>
#   - Fix spanning tree: clear spanning-tree detected-protocols
3

Verify cluster reconvergence after network restoration

# After fixing the network break:

# 1. Verify full connectivity:
# From every host, ping every other host's vSAN VMkernel:
vmkping -I vmk1 <every-other-host-vSAN-IP>

# 2. Wait for cluster to reconverge (1-5 minutes):
esxcli vsan cluster get
# Member list should now show ALL hosts
# Sub-Cluster Master should be a single UUID

# 3. Check object health:
# Cluster > Monitor > vSAN > Health > Retest
# Objects should transition from "Inaccessible" to "Healthy"
# Resync may start for stale components — this is expected

# 4. Verify VMs are operational:
# VMs that were frozen should resume automatically
# Some VMs may need a reset if guest OS detected disk timeout

# 5. Run full vSAN Health check:
# Cluster > Monitor > vSAN > Health
# All network tests should be green

# If cluster does NOT reconverge after 10 minutes:
# Restart vSAN agent on the hosts that are not joining:
/etc/init.d/vsanmgmtd restart
# Wait 2-3 minutes and recheck
Prevention: Use redundant physical switches (dual ToR), redundant uplinks per host, and LACP or active/active NIC teaming. A single ToR switch serving all vSAN hosts is a single point of failure that can partition the entire cluster. For production, always have two independent network paths for vSAN traffic.
66
vDS Migration Pitfalls — Losing vSAN Connectivity During Switch Move
Migrating vSAN VMkernel from vSS to vDS or between vDS can drop vSAN traffic if done incorrectly
Impact: Migrating the vSAN VMkernel adapter from a vSS to a vDS (or between vDS versions) requires moving physical uplinks AND VMkernel adapters simultaneously. If the uplink is moved without the VMkernel, or the VMkernel loses its vSAN service tag during migration, the host loses vSAN connectivity and objects become inaccessible.
What Goes Wrong
  • Moving physical uplink to vDS before the VMkernel — vmk loses connectivity
  • VMkernel loses its "vSAN" service tag after migration
  • Port group VLAN ID differs between source and destination switch
  • MTU not set on the new vDS — falls back to 1500 from 9000
  • Teaming/failover policy not configured on new port group
  • Moving all uplinks at once — no rollback path if it fails
Correct Migration Order
  • Step 1: Create vDS with correct MTU (9000), port groups, and VLAN
  • Step 2: Move ONE uplink from vSS to vDS (keep one on vSS for safety)
  • Step 3: Migrate VMkernel adapter from vSS to vDS port group
  • Step 4: Verify vSAN connectivity (vmkping with jumbo frames)
  • Step 5: Move second uplink from vSS to vDS
  • Step 6: One host at a time — verify before moving to next
1

Pre-migration checklist

# Before starting migration, document current config:

# Record VMkernel config per host:
esxcli network ip interface list
esxcli network ip interface ipv4 get
esxcli network ip interface tag get
# Save: vmk name, IP, subnet, MTU, VLAN, service tags (vSAN, vMotion, etc.)

# Record vSS config:
esxcli network vswitch standard list
# Save: MTU, port groups, uplink NICs, failover policy

# Record physical switch port config:
# Document which switch port connects to which NIC on each host

# Pre-create the vDS:
# vSphere Client > Networking > New Distributed Switch
# Set MTU: 9000
# Create port groups matching vSS configuration:
#   vSAN port group — same VLAN ID as vSS vSAN port group
#   Management port group — same VLAN ID
# Set teaming policy on vSAN port group (Route based on physical NIC load)
2

Migrate one host at a time using the vDS wizard

# In vSphere Client:
# Networking > vDS > Add and Manage Hosts > Add Hosts
# Select ONE host

# Step 1 — Assign uplinks:
# Move ONLY ONE physical NIC (e.g., vmnic2) from vSS to vDS
# Leave vmnic3 on vSS as a safety net

# Step 2 — Migrate VMkernel adapters:
# Map the vSAN VMkernel (vmk1) from vSS port group → vDS vSAN port group
# The wizard preserves IP, subnet, and service tags

# Step 3 — Complete and verify:
# After migration completes:
esxcli network ip interface tag get
# Verify vmk1 still has "VSAN" tag

vmkping -I vmk1 <other-host-vSAN-IP> -d -s 8972
# Verify jumbo frame connectivity

# If connectivity fails — immediately roll back:
# Move vmk1 back to vSS port group
# Move vmnic2 back to vSS
# Investigate the issue before retrying
3

Complete migration and move second uplink

# After vmk1 is verified on vDS with one uplink:

# Move the second NIC (vmnic3) from vSS to vDS:
# vDS > Add and Manage Hosts > Manage Hosts
# Select the host > Assign vmnic3 to vDS uplink2

# Verify both uplinks are active:
esxcli network vswitch dvs vmware list
# Should show both uplinks assigned

# Verify teaming is working:
# esxtop > 'n' > check both uplinks show traffic

# Repeat for each host — ONE HOST AT A TIME
# Always verify vSAN health after each host migration:
# Cluster > Monitor > vSAN > Health > Retest

# After ALL hosts are migrated:
# Remove the old vSS (if no longer needed):
# Host > Configure > Networking > Virtual switches
# Delete vSwitch1 (only if all port groups are migrated)

# Final verification:
# Cluster > Monitor > vSAN > Health > Full retest
# ALL network checks must be green
Critical: NEVER move all physical uplinks to the vDS before migrating the VMkernel. If the VMkernel is still on the vSS with no uplinks, the host loses ALL vSAN and management connectivity. Recovery requires physical console access (DCUI) to reconfigure networking.
67
vSAN over RDMA (RoCE v2) — Configuration & Requirements
Enabling RDMA-based vSAN transport for ultra-low latency using RoCE v2 network adapters and lossless Ethernet
🛈 Context: vSAN 8 ESA supports RDMA (Remote Direct Memory Access) via RoCE v2 as the network transport. RDMA bypasses the kernel TCP/IP stack, reducing CPU overhead and latency. This is optional and only applicable to ESA clusters with RDMA-capable NICs and lossless Ethernet fabric.
Hardware Requirements
  • NICs: RoCE v2 capable — Mellanox ConnectX-5/6, Broadcom P2100G (check vSAN HCL)
  • Speed: 25GbE minimum (100GbE recommended for RDMA benefit)
  • Switches: Must support lossless Ethernet: PFC (Priority Flow Control) and ECN (Explicit Congestion Notification)
  • ESXi version: vSphere 8.0 Update 1+ with ESA enabled
  • Architecture: ESA only — OSA does not support RDMA transport
Network Fabric Requirements
  • PFC: Priority Flow Control on a dedicated traffic class (e.g., TC3)
  • ECN: Explicit Congestion Notification enabled end-to-end
  • DCBX: Data Center Bridging Exchange for auto-negotiation of PFC/ETS settings
  • Lossless: The vSAN RDMA traffic class must be lossless — any packet drop causes retransmit and negates the RDMA benefit
  • Jumbo frames: MTU 9000 required
1

Verify hardware compatibility and enable RDMA on NICs

# Check if NICs support RDMA:
esxcli rdma device list
# Should show RDMA-capable devices:
#   Name: vmrdma0
#   Driver: mlx5_core (Mellanox) or bnxt_re (Broadcom)
#   State: Active

# Verify NIC firmware supports RoCE v2:
esxcli network nic get -n vmnic0
# Check firmware version against VMware HCL RDMA compatibility list

# If no RDMA devices show — NIC doesn't support it or driver is wrong
# Check VMware Compatibility Guide for the specific NIC model + firmware + driver

# Verify ESA is enabled:
# Cluster > Configure > vSAN > General
# Architecture: "Express Storage Architecture" must be active
2

Configure lossless Ethernet on physical switches

# This must be done by the network team on physical switches.
# Example: Cisco Nexus 9000 configuration for RoCE v2:

# Enable PFC on traffic class 3 (for RDMA):
# interface Ethernet1/1
#   priority-flow-control mode on
#   priority-flow-control priority 3 no-drop

# Enable ECN:
# policy-map type queuing rdma-policy
#   class type queuing c-out-8q-q3
#     bandwidth percent 50
#     random-detect minimum-threshold 150 kbytes maximum-threshold 3000 kbytes
#     congestion-control ecn

# Enable DCBX:
# interface Ethernet1/1
#   dcbx version auto

# IMPORTANT: Every switch in the path must be configured for lossless
# If any hop is lossy, RDMA performance will be worse than TCP

# Verify PFC counters (after enabling):
# show interface Ethernet1/1 priority-flow-control
# Watch for "Rx Pause" and "Tx Pause" — some pauses are normal
# High pause counts indicate congestion in the fabric
3

Enable RDMA transport in vSAN

# In vSphere Client:
# Cluster > Configure > vSAN > Services
# Network > Transport: change from "TCP" to "RDMA"

# This change is non-disruptive — vSAN switches transport protocol
# on all hosts in the cluster

# After enabling, verify RDMA is active:
esxcli vsan network list
# Look for: "Transport: RDMA"

# Check RDMA device binding:
esxcli rdma device stats get -d vmrdma0
# Should show active connections and data transfer

# Monitor RDMA performance vs TCP baseline:
# Cluster > Monitor > vSAN > Performance
# Compare latency before and after — expect:
#   TCP: 200-500µs average latency
#   RDMA: 50-150µs average latency (2-4x improvement)

# If performance does NOT improve or gets worse:
# Check for packet drops in the fabric:
esxcli rdma device stats get -d vmrdma0
# Look for "RNR Retry" or "Transport Retry" — indicates lossy fabric
Important: RDMA for vSAN is only beneficial if the ENTIRE network path is lossless. If your switching fabric cannot guarantee lossless Ethernet (PFC + ECN), stick with TCP transport. RDMA over a lossy fabric performs WORSE than TCP due to expensive retransmits at the RDMA layer.
68
vSAN Stretched Cluster Networking — Inter-Site Link Requirements
Network design, latency limits, and bandwidth sizing for stretched vSAN clusters across two data center sites
🛈 Context: A vSAN stretched cluster spans two physical sites with a witness at a third site. Every write is synchronously replicated to both sites before acknowledgment. The inter-site link (ISL) is the most critical infrastructure component — if it is undersized, too high latency, or unreliable, the entire stretched cluster suffers.
Inter-Site Link (Data ↔ Data)
  • Latency: ≤5ms RTT (recommended ≤1ms for best performance)
  • Bandwidth: Must handle: all VM writes × FTT multiplier + resync traffic
  • Minimum: 10 Gbps dedicated for vSAN (not shared with other traffic)
  • Redundancy: Dual diverse paths (separate fiber routes if possible)
  • MTU: 9000 end-to-end across the ISL (or 1500 consistently)
  • L2 stretched or L3 routed: Both supported (L3 recommended for modern deployments)
Witness Link (Data ↔ Witness)
  • Latency: ≤200ms RTT (witness carries only metadata, not data)
  • Bandwidth: 2 Mbps per vSAN host (metadata + heartbeats only)
  • Minimum: 100 Mbps is sufficient for most deployments
  • Redundancy: Recommended but not as critical as ISL
  • MTU: 1500 is sufficient (jumbo frames not needed for witness)
  • Routing: L3 routed — witness is at a separate site
1

Validate inter-site link latency and bandwidth

# Test inter-site latency from ESXi host at Site A to Site B:
vmkping -I vmk1 <siteB-host-vSAN-IP> -c 100
# Average RTT should be ≤5ms
# Jitter (variation) should be <1ms — high jitter causes I/O inconsistency

# Test MTU across the ISL:
vmkping -I vmk1 <siteB-host-vSAN-IP> -d -s 8972
# Must succeed — if it fails, MTU is not 9000 end-to-end

# Test witness connectivity from both sites:
# From Site A host:
vmkping -I vmk1 <witness-vSAN-IP> -c 20
# From Site B host:
vmkping -I vmk1 <witness-vSAN-IP> -c 20
# RTT should be ≤200ms from both sites

# Bandwidth test (schedule during maintenance):
# Use vSAN Performance Service after cluster is running:
# Cluster > Monitor > vSAN > Performance > "Backend"
# Check inter-site throughput during peak I/O
2

Configure site awareness and fault domains

# In vSphere Client:
# Cluster > Configure > vSAN > Fault Domains and Stretched Cluster

# Create fault domains:
#   Preferred: Site A (hosts at primary site)
#   Secondary: Site B (hosts at secondary site)
#   Witness: Witness host at third location

# Assign hosts to their respective fault domains:
# Drag Host1, Host2, Host3 → "Site A" domain
# Drag Host4, Host5, Host6 → "Site B" domain
# Assign witness appliance → "Witness" domain

# Set site preference:
# "Preferred fault domain": Site A
# This determines which site keeps running if the ISL fails:
#   - Site A (preferred) keeps objects accessible
#   - Site B VMs become inaccessible until ISL restores

# IMPORTANT: Preferred site + witness must be able to communicate
# for quorum. If both ISL and witness link fail, all objects are lost.
3

Size inter-site bandwidth for your workload

# Formula: ISL Bandwidth = VM Write Rate × FTT Multiplier + Resync Headroom

# Step 1: Measure current VM write throughput:
# Cluster > Monitor > vSAN > Performance > "Backend"
# Peak Write Throughput: e.g., 2 GB/s aggregate across all VMs

# Step 2: Calculate ISL requirement:
#   Stretched cluster with FTT=1 (site-level mirror):
#   Every write goes to BOTH sites synchronously
#   ISL bandwidth needed = Peak Write Rate = 2 GB/s = 16 Gbps
#   + 20% resync headroom = ~20 Gbps

# Step 3: Add non-vSAN traffic if ISL is shared:
#   vMotion, replication, management traffic: add 2-4 Gbps

# Total ISL: 20 + 4 = 24 Gbps → need 25GbE or dual 10GbE bonded

# IMPORTANT: vSAN writes are SYNCHRONOUS across the ISL
# Write latency = local SSD latency + ISL RTT
# If ISL RTT = 3ms → every write adds 3ms latency
# This is why ≤1ms RTT is recommended for performance-sensitive workloads
Critical: If the inter-site link fails, only the preferred site retains data access (with witness quorum). The secondary site's VMs become inaccessible. Plan accordingly — place critical workloads on the preferred site, or use HA admission control to ensure both sites can run all VMs if needed.
69
vSAN Firewall & Port Requirements — Blocked Traffic Diagnosis
ESXi firewall rules or physical firewall/ACL blocking vSAN ports causes cluster communication failure
Impact: vSAN uses multiple TCP and UDP ports for data transport, cluster communication, and health monitoring. If ANY required port is blocked by an ESXi firewall rule, physical firewall, or switch ACL, vSAN traffic fails. Symptoms range from health check failures to complete cluster partition.
Host ↔ Host (vSAN Data Path)
  • TCP 2233: vSAN Transport (primary data traffic)
  • UDP 12321: vSAN Clustering Service (CMMDS)
  • UDP 12345: vSAN Clustering Service
  • TCP 8080: vSAN VASA vendor provider (storage policy)
  • UDP 23451: vSAN unicast agent
  • TCP 443: vSAN management (HTTPS)
Host ↔ vCenter / Witness
  • TCP 443: vCenter API (management)
  • TCP 8006: vSAN health service
  • TCP 6999: NSX + vSAN (if NSX is used)
  • TCP 2233: vSAN transport to witness (metadata only)
  • UDP 12321, 12345: CMMDS to witness
  • ICMP: Required for vSAN health MTU check (ping)
1

Check ESXi firewall rules for vSAN

# List all ESXi firewall rules related to vSAN:
esxcli network firewall ruleset list | grep -i vsan
# Should show:
#   vsanvp         true    (vSAN VASA vendor provider)
#   vsanEncryption true    (vSAN encryption KMS traffic)
#   vsanhealth     true    (vSAN health check)
#   vSAN           true    (vSAN data transport)

# If any vSAN ruleset is "false" (disabled):
esxcli network firewall ruleset set -r vSAN -e true
esxcli network firewall ruleset set -r vsanvp -e true
esxcli network firewall ruleset set -r vsanhealth -e true

# Verify firewall is allowing vSAN traffic:
esxcli network firewall ruleset rule list -r vSAN
# Should show TCP 2233 allowed

# Check if the ESXi firewall is enabled at all:
esxcli network firewall get
# "Enabled: true" is recommended (don't disable the entire firewall)
2

Test port connectivity between hosts

# Test TCP 2233 (vSAN transport) between hosts:
# From Host1, test connectivity to Host2 on port 2233:
nc -z <host2-vSAN-IP> 2233
# Or use:
esxcli network diag connection test --host=<host2-vSAN-IP> --port=2233

# If connection fails — something is blocking port 2233:
#   1. Physical firewall between hosts
#   2. Switch ACL on the vSAN VLAN
#   3. ESXi firewall on the destination host

# Test UDP 12321 (CMMDS):
nc -zu <host2-vSAN-IP> 12321

# Test from vCenter to hosts:
# Ensure vCenter can reach all hosts on TCP 443 and TCP 8006

# For stretched clusters — test ports across the ISL:
nc -z <siteB-host-vSAN-IP> 2233
nc -z <witness-IP> 2233

# If ports are blocked by physical firewall:
# Request the network team to open these ports on the vSAN VLAN/subnet
3

Resolve and verify

# After opening blocked ports:

# 1. Restart vSAN health service to re-check connectivity:
# From ESXi Shell:
/etc/init.d/vsanmgmtd restart

# 2. Run vSAN Health checks:
# Cluster > Monitor > vSAN > Health > Retest
# "Network health" section should show all green:
#   ✓ All hosts have vSAN vmknic configured
#   ✓ All hosts have matching subnets
#   ✓ vSAN MTU check (ping with large packet size)
#   ✓ vSAN cluster members network connectivity

# 3. If a host was partitioned due to blocked ports:
# After ports are opened, the host should rejoin automatically
# Check: esxcli vsan cluster get
# Member list should show all hosts

# 4. Document the required ports in your firewall change request:
# Port matrix:
#   Host ↔ Host: TCP 2233, UDP 12321, UDP 12345, UDP 23451
#   Host ↔ vCenter: TCP 443, TCP 8006
#   Host ↔ Witness: TCP 2233, UDP 12321, UDP 12345
#   ICMP: Allow between all vSAN hosts (for health checks)
🛈 Best Practice: vSAN traffic should be on a dedicated VLAN with NO firewall between hosts on the same VLAN. Firewalls should only be between vSAN and non-vSAN networks. If your security policy requires inter-host firewalling, create a specific allow-list for vSAN ports rather than blocking by default.
70
25/100GbE Network Design for vSAN ESA Clusters
Designing high-speed network infrastructure to support ESA's full NVMe throughput potential
🛈 Context: ESA clusters with NVMe storage can generate significantly more I/O throughput than OSA. A single NVMe drive can deliver 3+ GB/s — with 8 NVMe drives per host, the storage can produce 20+ GB/s aggregate throughput. If the network is only 10GbE (1.25 GB/s), it becomes the bottleneck. ESA requires 25GbE minimum, with 100GbE recommended for large clusters.
Minimum Requirements
  • ESA minimum: 2× 25GbE per host (50 Gbps aggregate)
  • ESA recommended: 2× 100GbE per host (200 Gbps aggregate)
  • OSA minimum: 2× 10GbE per host (adequate for HDD/SSD tier)
  • Dedicated vSAN traffic: At least 25 Gbps exclusively for vSAN
  • vMotion + Management: Can share the same physical NICs via port groups
Recommended Topology
  • Spine-Leaf: Preferred for ESA — non-blocking fabric, predictable latency
  • Dual ToR switches: Each host connects to BOTH leaf switches
  • Oversubscription: 3:1 or lower leaf-to-spine ratio for vSAN workloads
  • Non-blocking: Ideal — leaf uplink bandwidth ≥ total host downlink bandwidth
  • Same rack preferred: Minimize inter-switch hops for vSAN traffic
1

Select NICs from the vSAN HCL

# Check VMware Compatibility Guide for supported 25/100GbE NICs:
# https://www.vmware.com/resources/compatibility
# Filter: I/O Devices > Network > vSAN

# Popular validated NICs for ESA:
#   Mellanox ConnectX-6 Dx — 2×25GbE or 2×100GbE (supports RDMA)
#   Broadcom BCM57508 — 2×100GbE (P2100G)
#   Intel E810 — 2×25GbE or 4×25GbE

# Key selection criteria:
#   - On the vSAN HCL with your specific ESXi version
#   - RDMA support (RoCE v2) if you plan to use RDMA transport
#   - Matching firmware and driver version per HCL
#   - Dual-port minimum for redundancy

# Verify NIC after installation:
esxcli network nic list
# Check: Speed, MTU, Driver, Firmware Version
# Cross-reference with HCL entry
2

Design the physical topology

# Recommended: Spine-Leaf with dual ToR per rack

# Per-host cabling (2×25GbE example):
#   NIC Port 1 (vmnic0) → Leaf Switch A, Port X
#   NIC Port 2 (vmnic1) → Leaf Switch B, Port Y
# This gives full redundancy — either switch can fail

# Switch configuration per port:
#   MTU 9216 (jumbo frames)
#   Trunk: vSAN VLAN + Management VLAN + vMotion VLAN
#   Spanning tree: edge port (portfast)
#   Storm control: enable on access ports

# Leaf-to-Spine uplinks:
#   Minimum: 4×25GbE or 2×100GbE from each leaf to each spine
#   Oversubscription: calculate per rack:
#     40 hosts × 25 Gbps = 1000 Gbps downlink
#     Uplink to spine: 400 Gbps = 2.5:1 oversubscription (acceptable)

# vDS configuration on ESXi:
#   vDS MTU: 9000
#   vSAN Port Group: VLAN X, teaming = Route based on physical NIC load
#   vMotion Port Group: VLAN Y
#   Management Port Group: VLAN Z
3

Validate network throughput after deployment

# After cluster deployment, validate actual throughput:

# Check link speed on each host:
esxcli network nic list
# Verify: Speed = 25000 Mb/s (25GbE) or 100000 Mb/s (100GbE)
# If showing 10000 — SFP or autoneg issue

# Verify jumbo frames end-to-end:
vmkping -I vmk1 <other-host-vSAN-IP> -d -s 8972
# Must succeed on all host pairs

# Monitor actual vSAN throughput:
# Cluster > Monitor > vSAN > Performance > "Backend"
# Check:
#   Throughput: should scale beyond 10 Gbps during heavy I/O
#   If capped at ~10 Gbps with 25GbE NICs — check NIC teaming
#   If capped at ~1.2 GB/s — likely only one NIC active (teaming misconfigured)

# Check for network-related vSAN congestion:
# Cluster > Monitor > vSAN > Performance
# If congestion appears but disk latency is low → network bottleneck
# See KB #51 for congestion diagnosis

# Monitor NIC utilization via esxtop:
esxtop
# Press 'n' — check MbTX/s and MbRX/s per uplink
# If one NIC at 25 Gbps and other at 0 → teaming is active/standby, not load-balanced
Summary: For ESA clusters: 25GbE is the minimum, 100GbE is optimal. Use spine-leaf topology with dual ToR for redundancy. Always validate MTU 9000 end-to-end. If your ESA cluster shows congestion but NVMe latency is low, the network is your bottleneck — upgrade to higher-speed NICs or add more bandwidth.
81
NTP Clock Drift Breaks vSAN CMMDS
Time synchronization failure between hosts causes CMMDS cluster membership issues and phantom partitions
Impact: CMMDS (Cluster Monitoring, Membership, and Directory Services) relies on synchronized clocks. Clock drift >2 minutes between hosts causes CMMDS to think hosts are unreachable, triggering phantom network partitions. Objects degrade for no apparent network reason.
Symptoms
  • vSAN Health: "Network partition" despite working connectivity
  • Hosts appear to leave/rejoin the cluster randomly
  • Objects intermittently go inaccessible then recover
  • CMMDS logs show heartbeat timeout for specific hosts
  • vSAN Health: "Time is not synchronized" alarm
Root Causes
  • NTP server unreachable (firewall, DNS failure, or NTP server down)
  • Hosts configured with different NTP sources drifting apart
  • VM-based NTP server on vSAN itself (circular dependency)
  • BIOS/hardware clock drift on specific server model
  • NTP service not set to start on boot after ESXi upgrade
1

Check time sync status on all hosts

# On each ESXi host:
esxcli system time get
esxcli network firewall ruleset list --ruleset-id ntpClient

# Check NTP daemon status:
/etc/init.d/ntpd status

# Compare time across all hosts (run from vCenter via PowerCLI):
Get-VMHost | Select Name, @{N="Time";E={(Get-View $_.Id).ConfigManager |
    ForEach-Object { (Get-View $_.DateTimeSystem).QueryDateTime() }}} | Sort Time
1

Fix NTP configuration on all hosts

# Set NTP server (use at least 2 external/infrastructure NTP sources):
esxcli system ntp set --server=ntp1.corp.local --server=ntp2.corp.local
esxcli system ntp set --enabled=true

# Restart NTP service:
/etc/init.d/ntpd restart

# Force immediate sync (if drift is large):
/etc/init.d/ntpd stop
esxcli system time set --hour=HH --min=MM --sec=SS  # set manually first
/etc/init.d/ntpd start

# Set NTP to start on boot:
chkconfig ntpd on
2

Verify CMMDS recovers after time fix

# After syncing time, verify cluster membership:
esxcli vsan cluster get
# All hosts should show the SAME "Sub-Cluster Master UUID"
# and "Sub-Cluster Member Count" should equal total hosts

# If partition persists, restart vSAN clustering on the affected host:
esxcli vsan cluster leave
esxcli vsan cluster join -c <cluster-uuid>
Never place your NTP server VM on the vSAN datastore itself. If vSAN goes down, NTP goes down, creating a circular dependency that prevents recovery. Use physical NTP appliances or external NTP pools.
82
vSAN Datastore Not Visible After Reboot
vSAN datastore disappears from host inventory after reboot or network outage
Impact: VMs show as "Inaccessible" in vCenter. The vSAN datastore is missing from the datastore browser. Data is NOT lost — it's still on the physical disks — but the host can't see the vSAN cluster.
Symptoms
  • vSAN datastore missing from Datastores tab in vCenter
  • VMs show as "Inaccessible" or "Invalid"
  • esxcli vsan cluster get shows "Cluster not configured"
  • vSAN Health not available for this host
  • Disk groups exist but vSAN is not using them
Root Causes
  • vSAN VMkernel adapter lost its vSAN traffic tag during reboot
  • vSAN service didn't start on boot (startup dependency failure)
  • Host was removed from cluster in vCenter while offline
  • Boot device corruption lost vSAN configuration
  • Network config changed preventing vSAN cluster communication
1

Verify vSAN VMkernel tagging

# Check if VMkernel has vSAN traffic enabled:
esxcli vsan network list
# Should show vmk interface with "VsanVmknicUuid"

# If empty, re-tag the VMkernel:
esxcli vsan network ipv4 add -i vmk1
# (use the correct vmk interface for your setup)
2

Rejoin the vSAN cluster

# Get the cluster UUID from a working host:
# On a healthy host: esxcli vsan cluster get → note "Sub-Cluster UUID"

# On the affected host:
esxcli vsan cluster join -c <cluster-uuid>

# Verify:
esxcli vsan cluster get
# Should now show cluster membership

# Refresh vCenter:
# Right-click host → Connection → Reconnect
3

Verify datastore reappears and VMs recover

# After rejoining, vSAN datastore should appear within 1-2 minutes
# Verify disk groups are claimed:
esxcli vsan storage list

# If VMs still show "Inaccessible":
# Right-click VM → Remove from Inventory (don't delete!)
# Then: Datastore → Browse → find .vmx → Register VM
88
vSAN Data-in-Transit Encryption
Encrypt vSAN network traffic between hosts to protect data traversing the wire

Data-in-transit encryption protects vSAN network traffic between ESXi hosts. This is separate from data-at-rest encryption (which protects data on physical disks). In-transit encryption uses TLS-like encryption on the vSAN data path and is available in vSAN 7.0u1+ and all vSAN 8 releases.

1

Enable data-in-transit encryption

# vSphere Client:
# Cluster → Configure → vSAN → Services → Data-in-Transit Encryption → ON

# Three levels:
# 1. Disabled (default) — no network encryption
# 2. Preferred — encrypt when both hosts support it
# 3. Required — all vSAN traffic must be encrypted (fail if not possible)

# Note: does NOT require KMS (unlike data-at-rest)
# Uses self-signed certificates managed by vCenter

# Verify encryption is active:
esxcli vsan debug resync summary
# In-transit encrypted traffic shows in Performance Service dashboards
2

Performance impact and troubleshooting

# Performance impact:
# - Adds ~5-10% CPU overhead for encryption/decryption per host
# - Minimal latency increase (~0.1-0.3ms per I/O)
# - More noticeable during heavy resync operations
# - AES-NI acceleration reduces impact on modern CPUs

# Verify CPU supports AES-NI:
grep -c aes /proc/cpuinfo
# Any number > 0 means AES-NI is available

# If performance is a concern:
# Use "Preferred" mode instead of "Required"
# This allows resync traffic to use unencrypted path when needed

# Common issue: all hosts must be on compatible vSAN version
# If one host is too old, "Required" mode blocks communication with it
🛈 Data-at-rest + Data-in-transit = Full encryption: For maximum compliance (HIPAA, PCI-DSS, government), enable BOTH. Data-at-rest encrypts on disk (requires KMS), data-in-transit encrypts on the wire (no KMS needed). Combined, data is encrypted everywhere.