CRITICAL INFRA
Loading critical CVEs…
ALL EXPLOITED
Loading…

Case study: a 2-node VMware vSAN cluster (Dell R7615)

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.

S5148F-ON #1 S5148F-ON #2 VLT R7615 — nod 1AMD EPYC · 384 GB RAM2x NVMe 2TBcache4x HDD 12TBcapacitate4x placi reteaR7615 — nod 2AMD EPYC · 384 GB RAM2x NVMe 2TBcache4x HDD 12TBcapacitate4x placi reteaal 3-lea ESXivSAN Witness + vCenter trafic witness (metadata)

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.

Let's discuss your project →