A client wanted a VMware cluster resilient to a whole-server failure, without buying an expensive external SAN. We built a hyperconverged 2-node vSAN, with a small third host as the witness. Here is the real configuration, with the commands we used.
The requirement: HA without an external SAN
Two servers to hold the VMs, with a clear rule: if a whole server fails, the applications keep running with no data loss. The budget did not allow a dedicated storage array, so we went hyperconverged with vSAN — the disks in the two servers form a single replicated pool.
In short: if a server fails completely, the other keeps all the virtual machines running — the data exists on both.
Hardware and topology
Two Dell PowerEdge R7615 (AMD EPYC, 384 GB RAM each), with tiered storage: 2x NVMe 2TB (cache) + 4x HDD 12TB (capacity) per node — hybrid vSAN. A third (smaller) ESXi host runs the vSAN Witness Appliance and vCenter. Network: 4 NICs per server, two Dell S5148F-ON (25GbE) switches.
The network: 4 NICs, 2 switches, redundancy
We linked the two S5148F-ON switches with VLT (Virtual Link Trunking) — they appear as one, so a NIC or a switch can fail without interruption. The 4 NICs per server: two dedicated to vSAN + vMotion, two for management + VM traffic, each pair with one link to each switch. Separate VLANs and jumbo frames (MTU 9000) on the vSAN network.
# dedicated vSAN vmkernel with jumbo frames (on each node)
esxcli network ip interface add -i vmk2 -p vSAN-PG
esxcli network ip interface ipv4 set -i vmk2 -I 10.10.30.11 -N 255.255.255.0 -t static
esxcli network ip interface set -i vmk2 -m 9000
esxcli vsan network ip add -i vmk2
# end-to-end MTU test (no fragmentation)
vmkping -I vmk2 -d -s 8972 10.10.30.12
ESXi + vCenter install
We installed ESXi on all 3 hosts (2 data nodes + witness). We put the vCenter Server Appliance on the third ESXi, so it does not depend on the cluster it manages. There we also deployed the vSAN Witness Appliance (a special nested ESXi that holds only metadata — not real data).
Distributed switch and port groups
A vSphere Distributed Switch (vDS) across the two nodes, with port groups on VLANs: management, vMotion, vSAN, VM. Teaming across both switches for redundancy.
# PowerCLI — vDS + vSAN port group
New-VDSwitch -Name vds-vsan -Location DC -Mtu 9000 -NumUplinkPorts 4
New-VDPortgroup -VDSwitch vds-vsan -Name vSAN-PG -VlanId 30
Add-VDSwitchVMHost -VDSwitch vds-vsan -VMHost esx01,esx02
2-node vSAN config: disk groups
On each node we created 2 disk groups, each with 1x NVMe as cache + 2x HDD as capacity. So the NVMe accelerates writes and reads, and the HDDs provide cheap capacity.
# PowerCLI — disk group (repeat for the second NVMe + next 2 HDDs)
New-VsanDiskGroup -VMHost esx01 \
-SsdCanonicalName naa.<nvme1> \
-DataDiskCanonicalName naa.<hdd1>, naa.<hdd2>
# check from ESXi
esxcli vsan storage list
esxcli vsan cluster get
Witness + storage policy
A 2-node vSAN cluster uses a witness (the third vote) to avoid split-brain. The storage policy is FTT=1 mirror: each block has a copy on each node, and the witness holds only the witness component.
# PowerCLI — attach the witness to the 2-node cluster
Set-VsanClusterConfiguration -Configuration (Get-Cluster CL01) \
-WitnessHost witness01 -WitnessDiskGroup (Get-VsanDiskGroup -VMHost witness01)
# default policy: FTT=1 (RAID-1), Force provisioning off
Get-SpbmStoragePolicy -Name 'vSAN Default Storage Policy'
Validation
Before production: vSAN Health all green, proactive tests (VM creation, network performance), and a failure simulation — we powered off one node and confirmed the VMs stay available (HA restarts them if needed).
# health + tests
Get-VsanView; Test-VsanClusterHealth -Cluster CL01
esxcli vsan health cluster list
# HA + DRS on the cluster
Set-Cluster CL01 -HAEnabled $true -DrsEnabled $true -DrsAutomationLevel FullyAutomated
Result
A hyperconverged cluster that survives a whole-server failure, without an external SAN, with ~48 TB usable (after mirror) and NVMe for speed. Management is centralized in vCenter, and vSAN Health continuously monitors state. We design it, install it and bring it into our 24/7 monitoring.