Servers and virtualisation

Servers and virtualisation, from the motherboard up

Every network I design ends at a server, and most of those servers now run virtual machines (VMs). This page covers how I build and run that layer. It starts with the hardware, RAID (redundant array of independent disks) and storage, then VMware vSphere clusters, Hyper-V and KVM (Kernel based Virtual Machine), and the Windows Server services every site depends on.

  • Server hardware
  • RAID
  • VMware vSphere
  • vMotion and HA
  • Hyper-V
  • KVM
  • Active Directory
  • Linux
Two virtualisation hosts sharing storage and moving a virtual machine vCenter manages two hosts. Each host runs several virtual machines and reads and writes to shared storage. A database virtual machine moves from host A to host B over vMotion while it keeps running. vCentermanagement Host Ahypervisor Host Bhypervisor VM · web VM · app VM · database VM · web 2 VM · file arriving vMotion Shared storageVMFS or vSAN
Live view · a running VM moves between hosts
Hardware

What is inside a modern server

A server is a balance of cores, memory, input and output, and management. When one of these is out of step with the others, the host wastes money or slows the workloads on it. I size hosts by looking at all four together, not just the core count.

Inside a two socket server Two processors, each with its own local memory, joined by a processor interconnect. NVMe drives and a network card attach to processor 0 over PCIe, a second card attaches to processor 1, and a baseboard management controller connects to a separate out of band network. The views show normal memory access, a slower remote memory access across the interconnect, a network card on the wrong socket, and out of band management. Two socket server UPI or Infinity Fabric Memorylocal to 0 Memorylocal to 1 CPU 0cores and cache CPU 1cores and cache NVMe drivesPCIe to CPU 0 NIC 02 × 100G NIC 1PCIe Gen5 BMCiLO or iDRAC Data network Out of band Data network Two sockets, each with its own memory Remote memory is slower: keep VMs local Fit the card to the socket that uses it Reachable even with the server off

Swipe sideways to see the whole diagram.

The board. Each processor (CPU) has its own memory channels and its own PCIe (Peripheral Component Interconnect Express) lanes for drives and network interface cards (NICs). The two processors talk over a fast interconnect: UPI (Ultra Path Interconnect) on Intel, Infinity Fabric on AMD.

NUMA (non uniform memory access). A core can read the other socket's memory, but the request crosses the interconnect, so it is slower. I keep each virtual machine inside one NUMA node where I can, and I state the largest VM size per node in the server standard.

PCIe placement. A network card or GPU (graphics processing unit) on CPU 1 serving a workload on CPU 0 sends every packet across the interconnect. I check the slot to socket map and put fast cards on the socket that runs the workload.

Out of band management. The BMC (baseboard management controller), called iLO (Integrated Lights-Out) on HPE servers and iDRAC (integrated Dell Remote Access Controller) on Dell, gives remote power, console, sensors and firmware updates even when the operating system is down. It sits only on the out of band network, never on a user network, with central accounts, current firmware and IPMI (Intelligent Platform Management Interface) over the LAN (local area network) turned off.

Animation
Server numbers I work with
PartWhat I look atTypical values in 2026 (indicative)
ProcessorsSockets, cores, threads and clock speed. Simultaneous multithreading adds about 10 to 30 percent, not double. A running VM cannot move live between Intel and AMD hosts, so each cluster uses one processor vendor.Intel Xeon 6 up to 128 performance cores per socket, AMD EPYC 9005 up to 192 cores
MemoryEvery channel filled evenly, one DIMM (memory module) per channel for best speed, memory per core.DDR5 (double data rate 5) memory at up to 6,400 MT/s, 8 or 12 channels per socket
PCIeLanes per socket and the bandwidth each card needs. A 400G card needs a Gen5 x16 slot, and 800G needs Gen6.Gen4 x16 about 32 GB/s each way, Gen5 about 63 GB/s, Gen6 about 126 GB/s
NetworkSpeed per host and two ports to two switches. SR-IOV (single root I/O virtualisation) only where the workload needs it, because it bypasses the virtual switch and its firewall.2 × 25G for light hosts, 2 × 100G for general hosts, 400G and up for GPU nodes
StorageBoot device, local NVMe (non volatile memory express) drives for caches or vSAN, a host bus adapter (HBA) for Fibre Channel.NVMe solid state drives (SSDs), 32G or 64G Fibre Channel
OffloadSmartNICs and DPUs (data processing units), such as NVIDIA BlueField, take encryption, overlay and storage work off the host cores.Useful at scale, but one more firmware to keep current
Form factor1U for dense compute, 2U for general hosts and vSAN, 4U and larger for GPUs or many drives. Power, not space, usually limits how many fit in a rack.Two or three standard models, not a different server for every project
FirmwareBIOS (basic input output system) or UEFI (Unified Extensible Firmware Interface), Secure Boot, TPM 2.0 (Trusted Platform Module), one tested baseline per model.Managed through the BMC with Redfish, the standard REST (representational state transfer) interface

Balance the host

A host that runs out of memory long before its cores are busy wastes licences. I size cores, memory per core and network per core together, and keep a short catalogue of standard host builds.

Licences follow cores

VMware, Windows Server and many databases are licensed per core. More cores per host is not always cheaper, so I compare cost per VM, including licences and power. The VMware subscription model and the alternatives are in the licensing and platform choice part of the private cloud page.

One vendor per cluster

A live migration cannot cross between Intel and AMD processors, so I keep each cluster to one processor vendor and generation family.

RAID and storage

How disks are protected, and what a rebuild risks

RAID (redundant array of independent disks) spreads data across disks so that one failure does not lose it. Each level trades usable space, write speed and protection in a different way. Pick a level, change the disks, then fail one to see what happens.

RAID calculator Disks are drawn side by side, with data blocks and parity blocks in each stripe, and a hot spare on the right. When a disk fails it is crossed out. If the array survives, the surviving disks are read to rebuild the lost data onto the spare. RAID 5 · 4 disks Usable 36 TB · can lose 1 disk Disk 1 Disk 2 Disk 3 Disk 4 A1A2A3A parity B1B2B parityB3 C1C parityC2C3 D parityD1D2D3 Hot spare

Swipe sideways to see the whole diagram.

Animation

RAID level

Disks

4
Size
Usable space36 TB of 48 TB
Can lose1 disk
Write penalty4 disk operations per write
Rebuild reads36 TB from 3 disks
Rebuild timeabout 22 hours
Read error riskabout 25% during a rebuild

Indicative figures. Rebuild time assumes about 150 MB/s, and busy arrays rebuild more slowly. The read error risk assumes enterprise disks rated at one unrecoverable read error in 1015 bits, and counts only the time with no redundancy left.

RAID levels compared
LevelHow it worksUsable spaceSurvivesWhere I use it
RAID 0Stripes data across disks with no copy.All of itNo disk failureScratch space only, never data I need to keep.
RAID 1Mirrors two disks.HalfOne diskBoot drives and small servers.
RAID 5Stripes data with one rotating parity block per stripe.All but one diskOne diskSmall solid state drive sets. I avoid it on large spinning disks because of rebuild risk.
RAID 6Two parity blocks per stripe.All but two disksAny two disksLarge capacity sets and backup targets.
RAID 10Stripes across mirrored pairs.HalfOne disk in each mirrorDatabases and busy workloads that need fast writes.
Storage access

DAS, NAS and SAN, and the paths between

A server reaches its storage in one of three ways: disks inside or next to it, files over the network, or blocks over a storage network. The choice decides who can share the data, how it fails over, and what the network must carry. The design depth for pods and data protection is on the private cloud and storage page.

Ways a server reaches storage Direct attached storage connects one server to its own disks. Network attached storage serves files over an IP network. A Fibre Channel storage area network gives the server two separate fabrics to two array controllers. iSCSI carries the same block traffic over two Ethernet networks. ServerRAID controllerNFS or SMB clienttwo HBAstwo iSCSI NICs Disk shelfSAS or NVMe, one owner IP networkswitches NAS filershares files Fabric ANetwork AFC switchEthernet VLAN Fabric BNetwork BFC switchEthernet VLAN Storage arrayLUNs presented Controller A Controller B Fast and simple, but only one server sees it Files shared by many clients over IP Two fabrics that never touch, zoned Block storage over Ethernet, kept separate

Swipe sideways to see the whole diagram.

DAS (direct attached storage). Disks inside the server or in a shelf cabled to it. It is fast and cheap, but only that server can use it, so a host failure takes the data offline with it. vSAN and other hyperconverged systems pool the local disks of many hosts to get round this.

NAS (network attached storage). A filer shares files over NFS (Network File System) or SMB (Server Message Block). Many clients can use the same share, and the network carries it like any other traffic, so I give it its own VLAN (virtual LAN) and quality of service.

Fibre Channel SAN (storage area network). Block storage over two separate fabrics, A and B, which never connect. Zoning on the switches controls which server sees which array port, and LUN (logical unit number) masking on the array decides which volumes it sees. Multipathing on the host uses both paths.

iSCSI (Internet Small Computer Systems Interface). The same block storage, carried over IP (Internet Protocol) on Ethernet. I use two separate VLANs or switches, jumbo frames end to end, port binding on the hosts and no routing in the storage path. Every hop must carry the same MTU (maximum transmission unit).

Animation
Hypervisors

Type 1, type 2 and containers

A hypervisor shares one physical server between many operating systems. Where it sits decides how fast and how isolated those systems are. Containers solve a different problem: they share one operating system kernel between many applications.

Where the hypervisor sits A type 1 hypervisor runs directly on the server hardware, with virtual machines on top, each with its own guest operating system. A type 2 hypervisor runs as an application on a host operating system. Containers share the host operating system kernel through a container runtime. A request travels down from an application to the hardware through each layer. Server hardwareCPU, memory, disks, NICs Type 1 hypervisorESX, Hyper-V, KVM AppAppApp Guest OSWindowsGuest OSLinuxGuest OSLinux Host operating systemWindows, macOS or Linux Type 2 hypervisorWorkstation, VirtualBox AppApp Guest OSa lab VMGuest OSa test VM Host operating systemone shared Linux kernel Container runtimecontainerd or CRI-O ApplibrariesApplibrariesApplibrariesApplibraries Runs straight on the hardwareEach VM has its own kernelStrong isolation, data centre use An app on a desktop OSOne more layer for every requestLabs, testing and training No guest OS: starts in secondsShares the host kernelIsolation from namespaces and cgroups

Swipe sideways to see the whole diagram.

Type 1, or bare metal. The hypervisor is the operating system of the server. VMware ESX (called ESXi until VMware Cloud Foundation (VCF) 9), Microsoft Hyper-V and KVM all work this way. Every production platform I design uses a type 1 hypervisor.

Type 2, or hosted. The hypervisor is an application on a normal operating system, such as VMware Workstation or Oracle VirtualBox. Every request crosses one more layer, so I use it for labs and testing, never for production.

Containers. Applications share the host kernel and carry only their own libraries, so they start in seconds and pack densely. Isolation comes from Linux namespaces and cgroups (control groups), which is weaker than a hypervisor boundary, so I often run containers inside VMs. Kubernetes detail is on the private cloud page.

Animation

Hyper-V and KVM, side by side

How Hyper-V and KVM are built In Hyper-V, a thin hypervisor runs on the hardware, a parent partition running Windows Server holds the device drivers, and child partitions reach those drivers over VMBus. In KVM, the Linux kernel itself becomes the hypervisor through the kvm module, each virtual machine is a QEMU process, and libvirt manages them. Server hardwareCPU virtualisation extensions: Intel VT-x or AMD-V Hyper-V hypervisorthin layer, type 1 Parent partitionWindows Serverdevice drivers, management Child partitionguest VM Child partitionguest VM VSPprovider VSCclient VSCclient VMBus Linux kernel with the kvm modulethe kernel is the hypervisor VM 1a QEMU process VM 2a QEMU process libvirtvirsh, Proxmox,OpenStack virtiofast drivers virtiofast drivers

Swipe sideways to see the whole diagram.

Hyper-V. A thin hypervisor sits under everything. The parent partition runs Windows Server and owns the real device drivers. Guest VMs use synthetic devices: a VSC (virtualisation service client) in the guest talks over VMBus to a VSP (virtualisation service provider) in the parent. Hyper-V also runs Azure and Azure Local, the on premises platform that was called Azure Stack HCI (hyperconverged infrastructure).

KVM (Kernel based Virtual Machine). A kernel module turns Linux itself into a type 1 hypervisor. Each VM is a QEMU (Quick Emulator) process scheduled like any other, and virtio drivers give fast disk and network access. libvirt manages it, and KVM is the base for Proxmox VE, OpenStack, Nutanix AHV and OpenShift Virtualization.

Animation
VMware vSphere, Hyper-V and KVM compared
FeatureVMware vSphereMicrosoft Hyper-VKVM
ManagementvCenterFailover Cluster Manager, System Center Virtual Machine Manager, Windows Admin Centerlibvirt, Proxmox VE, OpenStack, oVirt
Live migrationvMotion and Storage vMotionLive Migration and Storage Live MigrationLive migration through libvirt
High availabilityvSphere HA, DRS (Distributed Resource Scheduler), Fault ToleranceFailover Clustering with Cluster Shared VolumesPacemaker, Proxmox HA, OpenStack instance HA
Virtual switchStandard vSwitch and vSphere Distributed SwitchHyper-V virtual switch with SET (Switch Embedded Teaming)Linux bridge or Open vSwitch
ReplicationvSphere Replication, Site Recovery ManagerHyper-V Replica, Azure Site RecoveryStorage or tool based
vSphere clusters

HA, DRS and the failover reserve

VMware vSphere joins ESX hosts into clusters managed by vCenter. Two features do most of the work. HA (high availability) restarts VMs when a host dies, and DRS (Distributed Resource Scheduler) moves running VMs to balance the load. Both depend on capacity being held back, which is what admission control protects. Recovery across sites, with replication and tested runbooks, is on the private cloud page.

How vSphere HA and DRS use the failover reserve Four hosts each run three virtual machines and keep a quarter of their capacity free as a failover reserve. A new virtual machine is refused because it would use the reserve. Host 3 then fails, the other hosts notice through missed network heartbeats and check its datastore heartbeat, and HA restarts its three virtual machines in the reserve on hosts 1, 2 and 4. When host 3 returns, DRS moves the three virtual machines back with vMotion and the reserve is free again. vCentermanages the cluster New VM Host 1ESX Host 2ESX Host 3ESX Host 3failed Host 4ESX reservereservereservereserve VM a3VM a2VM a1 VM b3VM b2VM b1 VM c3VM c2VM c1 VM d3VM d2VM d1 VM c1 restartedVM c2 restartedVM c3 restarted Shared datastoresVM files and datastore heartbeats Reserve: 25% of cluster Refused: reserve protected Host 3 has stopped Restarted from shared storage Balanced, reserve restored

Swipe sideways to see the whole diagram.

Step 1
  1. Four hosts form one cluster. The HA agent on each host exchanges heartbeats over the management network, and admission control keeps a quarter of the cluster free as a failover reserve. With four hosts, that is the same as N+1: room to lose one host.

  2. Someone tries to power on another VM. Admission control refuses, because it would eat into the capacity needed to restart VMs after a failure. I never turn admission control off to get round this. The answer is more capacity.

  3. Host 3 stops. The others miss its network heartbeats, then check its datastore heartbeat to tell a dead host from one that is only cut off from the network. An isolated host follows its isolation response instead.

  4. HA restarts host 3's VMs on the other hosts, in restart priority order, from the shared datastores. This is a restart, not a live move: each VM boots again, so services see a short outage.

  5. When host 3 returns, DRS uses vMotion to move VMs back and even out the load, and the reserve is free again. Anti affinity rules keep pairs such as two domain controllers on different hosts.

vSphere cluster settings I set on purpose
SettingWhat it doesWhat I normally choose
Admission controlReserves capacity so failed hosts' VMs can restart. Policies: cluster resource percentage, slot policy or dedicated failover hosts.Cluster resource percentage, worked out from the number of host failures to tolerate. N+1, or N+2 for critical clusters.
Host isolation responseWhat a host does when it can no longer see the management network.Power off and restart VMs where storage and network can be lost together, otherwise leave powered on. Checked against the storage design.
Datastore heartbeatingA second way to tell a failed host from an isolated one.At least two heartbeat datastores.
Restart priorityOrder in which VMs restart.Infrastructure first: domain controllers, DNS (Domain Name System) and DHCP (Dynamic Host Configuration Protocol), then databases, then applications.
DRS automationManual, partially automated or fully automated, with a migration threshold from 1 to 5.Fully automated at the default threshold, with VM to VM and VM to host rules for licensing and resilience.
VM Component ProtectionRestarts VMs whose host has lost their storage: all paths down (APD) or permanent device loss (PDL).On for block storage, with the response set to restart the VMs on a host that can still see the datastore.
vCenter availabilityHA keeps restarting VMs without vCenter, but DRS, vMotion and most management stop until it returns.A file based backup every day from the appliance management interface to a separate server, and a tested restore.
DatastoresWhere VM files live: VMFS (Virtual Machine File System) on block LUNs, NFS from a NAS, vSAN on the hosts' own drives, or vVols (vSphere Virtual Volumes), which Broadcom has deprecated in VCF 9.Sized for IOPS (input and output operations per second) and latency as well as capacity. I do not start new designs on vVols.
Power managementDPM (Distributed Power Management) powers off hosts DRS does not need when demand is low.Usually off. The hosts it would save are the ones HA needs when something fails.
Fault ToleranceKeeps a live shadow copy of a VM on another host, so a host failure causes no outage.Only for small, critical VMs that cannot cluster themselves. It supports up to 8 virtual CPUs (vCPUs) per VM on vSphere 8 and needs its own logging network.
SnapshotsA point in time delta file. Not a backup.Kept for no more than 72 hours, one or two deep, and removed before any change is closed.
Templates and the content libraryGolden images for new VMs, with customisation on deploy.One patched template per operating system, rebuilt each month.
Virtual networking

Virtual switches and NIC teaming

Inside each host a virtual switch connects VMs and VMkernel ports to the physical uplinks. The teaming policy decides which uplink each flow uses, and it must match what the physical switches expect. Most loops and MAC (media access control) flaps I have chased on virtual hosts came from a mismatch here.

NIC teaming policies on a virtual switch Three virtual machines and a vMotion VMkernel port connect to a virtual switch with two physical uplinks, vmnic0 and vmnic1, each cabled to a different top of rack switch. The views show how traffic spreads across the uplinks with the default port based policy, with IP hash over a port channel, with load based teaming, and with an explicit failover order. ESX host port channel peer link VM 1VLAN 10 VM 2VLAN 10 VM 3VLAN 20 vmk1vMotion vSwitch or vDS vmnic0uplinkabove 75%VMs active vmnic1uplinkvmk1 active Leaf Atop of rack Leaf Btop of rack Default: each VM port pinned to one uplink Flows spread, so the switches need a port channel VM 3 moved off the busy uplink Each port group: one active, one standby

Swipe sideways to see the whole diagram.

Route based on originating virtual port. The default. Each VM's virtual port is pinned to one uplink, so the switches see each MAC on one port only. It needs no port channel, which is why I use it as my starting point.

Route based on IP hash. Each flow is hashed across both uplinks, so one VM can use both. The switch side must be a static port channel, spread across a vPC (virtual port channel) or stack pair. LACP (Link Aggregation Control Protocol) needs a link aggregation group on a distributed switch instead. Get this wrong and the switches see MAC flaps.

Route based on physical NIC load. Distributed switch only. When an uplink stays above 75% for 30 seconds, the switch moves a VM port to a quieter uplink. It needs no port channel, so it is my usual choice on a distributed switch.

Explicit failover order. Active and standby uplinks set per port group. I use it for VMkernel traffic so that vMotion prefers one uplink and management the other, and the two only share a link when one fails.

Animation
VMkernel port services
VMkernel serviceWhat it carriesHow I place it
ManagementvCenter, SSH (Secure Shell) and the HA heartbeats.Its own VLAN, two uplinks, failover order.
vMotionMemory of moving VMs.Its own VLAN, 10G or faster, jumbo frames if every hop supports them.
vSANStorage traffic between hosts.Its own VLAN, 25G or faster, never shared with VM traffic.
iSCSI or NFSBlock or file storage.Two VMkernel ports bound to two uplinks for iSCSI multipathing.
Fault Tolerance loggingThe live state of VMs protected by Fault Tolerance.A dedicated fast link.
Provisioning and replicationCold migration, cloning and vSphere Replication.Separated when volumes are high.

Standard or distributed

A standard vSwitch is configured on each host. A vSphere Distributed Switch is configured once in vCenter and adds LACP, load based teaming, NetFlow, port mirroring and Network I/O Control. I use distributed switches on every cluster larger than a lab.

VLANs and trunks

Port groups tag traffic with a VLAN ID (identifier), so the uplinks are 802.1Q trunks carrying only the VLANs that host needs. VLAN 4095 passes tags into the guest, which I keep for appliances such as virtual firewalls.

Same on every host

vMotion only works if the destination host has the same port group and VLAN. A host profile or a distributed switch keeps every host identical.

vMotion

Moving a running VM without dropping a session

vMotion moves a running VM to another host with no planned outage. It is what lets me patch hosts during the working day. Storage vMotion does the same for the VM's disk files, and the two can run together when hosts share no storage.

How vMotion moves a running virtual machine vCenter checks both hosts. Memory pages copy from host A to host B over the vMotion network while the virtual machine runs, then the changed pages copy again in smaller rounds. The virtual machine pauses for a moment, the last state moves, and it resumes on host B. Host B tells the switch where the virtual machine now is. Storage vMotion copies disk files between datastores in the same way. vMotion network vCenterchecks first Host Asource Host Bdestination VM · apprunning here paused, then gone copy buildingmemory pageschanged pages VM · apprunning here Top of racklearns the MAC Datastore 1old disk files Datastore 2new disk files CPU, network, storage Pause under a second Switch learns the new port Writes mirrored to both

Swipe sideways to see the whole diagram.

Step 1
  1. vCenter checks that host B can run the VM: compatible processors or a shared EVC (Enhanced vMotion Compatibility) baseline, the same port group and VLAN, access to the VM's storage, and enough free resources.

  2. The VM keeps running on host A while its memory pages copy to host B over the vMotion VMkernel network. This is the pre copy phase, and it is why vMotion needs a fast, dedicated link.

  3. Pages the VM changed during the copy are sent again, in smaller and smaller rounds, until what is left can move almost instantly.

  4. The VM pauses for a moment, usually well under a second, while the last pages and device state move. It then resumes on host B, and TCP (Transmission Control Protocol) sessions carry on.

  5. Host B sends a RARP (Reverse Address Resolution Protocol) frame for the VM's MAC address, so the switches learn its new port at once. An occasional MAC move in the switch log after a vMotion is normal.

  6. Storage vMotion copies the disk files to another datastore while the VM runs, and a mirror driver writes every change to both copies until the switch. Combined with vMotion, a VM can move between hosts that share no storage.

Sizing

How many hosts a workload really needs

I size a cluster from the demand, not from last year's order. Processor demand depends on how far I overcommit virtual CPUs, while memory is rarely overcommitted in production. Whichever runs out first sets the host count. Change the numbers to see when a cluster becomes memory bound and wastes core licences.

Cluster sizing calculator Two bars compare the processor cores and memory the virtual machines need with what the hosts provide. Below them, one block is drawn for each host, with the spare hosts kept for failover shown dashed. With the starting values, 2,000 virtual machines need 16 hosts for processor but 23 hosts for memory, so the cluster is memory bound. Cluster size 25 hosts · memory bound Cores 2,000 of 2,944 cores Memory 35.2 of 35.3 TB Hosts Solid: hosts the workload needs · Dashed: spare hosts for failover

Swipe sideways to see the whole diagram.

Workload

2,000
vCPU each
Memory each
vCPU per core

Host

Spares
Hosts for processor16
Hosts for memory23
Clusters2, of up to 16 hosts each
Hosts with spares25
Licensed cores3,200

Indicative only. Memory includes about 10 percent for hypervisor and VM overhead, and clusters are capped at 16 hosts with their own spare. Real sizing uses measured demand and 12 to 18 months of growth.

Rules of thumb for running a vSphere cluster
MeasureWhat it tells meWhere I start (indicative)
vCPU to core ratioHow far processors are overcommitted.Up to 4 : 1 for general servers, 1 : 1 for latency sensitive and licensed per vCPU workloads.
CPU readyTime a vCPU waited for a physical core. The clearest sign of contention.Below 5 percent per vCPU. Above 10 percent, users notice.
Co stopTime a VM with many vCPUs waits for all of them to be scheduled.Near zero. High values mean the VM has more vCPUs than it needs.
Memory reclamationOrder of pressure: page sharing, ballooning, compression, then swapping to disk.No ballooning or swapping in production. If I see it, the cluster is short of memory.
Storage latencyHow long reads and writes take, seen per VM and per datastore.Under 1 ms on all flash, under 20 ms anywhere before I investigate.
Rack placementWhat losing one rack costs each cluster.One host from each cluster per rack, so a rack failure costs each cluster only its spare.
Largest VMWhether a VM fits inside one NUMA node.vCPUs no more than the cores in one socket, memory no more than that socket's memory.
Windows Server

Active Directory, DNS and DHCP, the services everything depends on

When users cannot log on, nothing else matters. Active Directory (AD), DNS and DHCP sit under almost every application, so I design them for resilience first. In my home lab, Windows Server runs all three, plus TACACS (Terminal Access Controller Access Control System) for device logins.

Active Directory structure and replication The logical view shows a forest with a root domain and two child domains joined by two way trusts, and organisational units inside a domain. The physical view shows three sites, each with domain controllers. Controllers inside a site replicate quickly, sites replicate over site links on a schedule, and a branch site holds a read only domain controller that only receives changes. Forest · one schema, one global catalogue two way trusttwo way trust example.comforest root domain uk.example.comchild domain us.example.comchild domain UsersOU ComputersOU ServersOU Schema and naming masters Each domain: RID, PDC emulator, infrastructure Group Policy linked to sites, domains and OUs cost 100cost 200 London site10.1.0.0/16 Branch site10.2.0.0/16 New York site10.3.0.0/16 DC 1 DC 2 RODC DC 3 DC 4 Inside a site: seconds Between sites: on a schedule RODC only receives changes

Swipe sideways to see the whole diagram.

Logical structure. A forest is the security boundary and holds one schema. Domains inside it trust each other both ways. Organisational units (OUs) group users, computers and servers so that Group Policy and admin rights can be delegated. Five FSMO (flexible single master operation) roles exist: two per forest, schema master and domain naming master, and three per domain, RID (relative identifier) master, PDC (primary domain controller) emulator and infrastructure master. Most organisations need one domain, not several.

Sites and replication. Sites map to IP subnets, so clients find a nearby domain controller. Inside a site, changes replicate within seconds. Between sites they travel over site links, chosen by cost and sent on a schedule, every 180 minutes by default, which I usually shorten. A read only domain controller (RODC) suits sites with weak physical security: it receives changes but never sends them.

Animation

What happens when someone logs on

A Kerberos logon and file access, step by step A laptop asks DNS where a domain controller is, then asks the domain controller for a ticket granting ticket. It uses that ticket to get a service ticket for the file server, then presents the service ticket to the file server, which checks it without calling the domain controller. Every ticket carries a timestamp, so clocks must agree within five minutes. Laptopuser signs in Domain controllerKDC, port 88 File servercifs service DNSSRV records Which domain controller? TGT: proof I signed in Service ticket for the file server Checked with the server's own key Clocks within 5 minutes

Swipe sideways to see the whole diagram.

Step 1
  1. The laptop asks DNS for the SRV (service locator) record _ldap._tcp.dc._msdcs.example.com, which lists domain controllers, preferring ones in its own site. If DNS points somewhere else, nothing that follows works.

  2. The laptop sends an authentication request with a timestamp encrypted by a key made from the user's password. The KDC (key distribution centre) on the domain controller checks it and returns a TGT (ticket granting ticket), valid for 10 hours by default.

  3. To open a share, the laptop presents its TGT and asks for a ticket for the file server's service principal name, cifs/fs01.example.com. The KDC returns a service ticket encrypted with the file server's own key.

  4. The laptop hands the service ticket to the file server, which decrypts it with its own key. The domain controller is not asked again, which is why Kerberos scales so well.

  5. Tickets carry timestamps, and a clock more than 5 minutes out makes logons fail. Members take time from domain controllers, and the PDC emulator in the forest root domain takes it from a reliable external source over NTP (Network Time Protocol).

DNS

AD integrated DNS zones replicate with the directory. Clients point only at internal DNS servers, never at a public resolver as a second choice, or logons will fail at random. Conditional forwarders reach partner and cloud zones.

DHCP

Two servers in a failover relationship, either load balance or hot standby, so a scope never depends on one server. Routers relay requests from each VLAN with ip helper-address. The DORA (discover, offer, request, acknowledge) exchange is on the networking fundamentals page.

Group Policy

Applied in the order local, site, domain, OU (organisational unit), with the last one winning. Members refresh every 90 minutes with a random offset of up to 30, and domain controllers every 5. gpresult /r shows what really applied.

Domain controllers

At least two per domain, more per region, kept as virtual machines on different hosts with anti affinity rules. Never restored from a snapshot, and backed up with a system state backup.

Hybrid identity

On premises AD synced to Microsoft Entra ID (formerly Azure AD) with Entra Connect or cloud sync, so cloud services use the same accounts. The detail is on the cloud platforms page.

Failover clustering

Windows Server Failover Clustering gives stateful services such as SQL Server and file servers a second node, with a quorum witness so a split cluster never runs on both sides at once.

File services

DFS (Distributed File System) Namespaces give users one path to shares held in several sites, and DFS Replication keeps the copies in step. I use replication only for files that change slowly.

Patching

Monthly updates are tested in rings through WSUS (Windows Server Update Services), Configuration Manager or Intune, with domain controllers and cluster nodes patched one at a time.

Lifecycle

Windows Server has five years of mainstream and five years of extended support. Windows Server 2012 R2, which my lab still runs, left extended support in October 2023, so in production it would be top of the refresh list.

Linux

The Linux I use every week

Most network appliances, controllers and cloud images run Linux underneath, and so do most automation tools. These are the commands I reach for first when a Linux host is part of a fault.

Linux commands for network checks
TaskCommandWhat it tells me
Addresses and linksip -br addr, ip linkInterfaces, state and IP addresses at a glance.
Routingip route, ip route get 10.0.0.5The routing table, and which interface and next hop a destination will really use.
Neighboursip neighThe ARP (Address Resolution Protocol) table: whether the gateway's MAC address is known.
Listening portsss -tulpnWhich process listens on which TCP or UDP (User Datagram Protocol) port.
DNSdig example.com, resolvectl statusThe answer, which server gave it, and the resolver settings.
Pathtraceroute -T -p 443 host, mtr hostThe path to a service, using TCP when ICMP (Internet Control Message Protocol) is blocked.
Path MTUping -M do -s 1472 hostWhether a full 1,500 byte packet passes without being fragmented.
Capturetcpdump -ni eth0 port 53What really leaves and arrives on the interface.
Link detailethtool eth0, ethtool -S eth0Speed, duplex, driver and error counters.
Services and logssystemctl status sshd, journalctl -u sshd --since todayWhether a service runs, and why it stopped.
Firewallnft list rulesetThe host firewall rules, which often explain a refused connection.

Bonding

Linux bonds two NICs in several modes. Mode 1, active backup, needs nothing from the switch. Mode 4, 802.3ad, needs an LACP port channel on the switch side. The same rule as VMware teaming: both ends must agree.

VLANs on a host

A host can tag traffic itself with a VLAN subinterface such as eth0.20, created with ip link add or through NetworkManager with nmcli. The switch port must then be a trunk.

Where settings live

DNS servers in /etc/resolv.conf, often managed by systemd-resolved, local names in /etc/hosts, and interface settings in NetworkManager or netplan, depending on the distribution.

Troubleshooting

Finding the fault in the virtual layer

Virtual faults hide in places a network engineer does not always look: a port group, a teaming policy, a clock. I follow the path from the VM outwards, one layer at a time, and prove each one before moving on. Pick a symptom to see where it usually ends and what I check first.

Where common virtualisation faults sit The path from a virtual machine runs through its virtual NIC and port group, the virtual switch, the physical uplinks, the physical switch and on to a service such as the gateway, a domain controller or vCenter. For each symptom, traffic travels along the path and stops where the fault usually is. VM or userguest OS Virtual NICport group vSwitchor vDS Uplinksvmnics, HBAs Switchtrunk, MTU ServiceDC, vCenter Port group on the wrong VLAN, or VLAN not trunked Jumbo frames missing on one hop vCenter has lost the host's management agent Contention: CPU ready, ballooning or disk latency Clock skew, DNS or an unhealthy domain controller A storage path down, or multipathing wrong Work outwards from the VM, prove each layer

Swipe sideways to see the whole diagram.

A VM has no network. Inside the guest, ipconfig /all or ip -br addr shows whether it has an address; 169.254 means DHCP never answered. I compare the port group VLAN with the switch, using esxcli network vswitch standard portgroup list or the distributed switch in vCenter, then show interfaces trunk on the switch to confirm the VLAN is allowed on both host ports.

vMotion fails or times out. I test the vMotion network with vmkping -I vmk1 -d -s 8972 to the other host, adding ++netstack=vmotion if vMotion has its own TCP/IP stack. If a 1,472 byte test passes and 8,972 fails, one hop is not set for jumbo frames. Then I check the VLAN on both hosts and processor compatibility or EVC.

A host shows not responding. Its VMs keep running; only management is lost. I check the management address answers, then restart the agents with /etc/init.d/vpxa restart and /etc/init.d/hostd restart, and read /var/log/vpxa.log and /var/log/hostd.log. A full services.sh restart is a last resort.

A VM is slow but the host looks fine. In esxtop, CPU ready (%RDY) above about 5 percent per vCPU or a high co stop (%CSTP) means contention, a balloon (MCTLSZ) or swap (SWCUR) means memory pressure, and DAVG or KAVG show disk latency. The fix is often fewer vCPUs, not more.

Users cannot log on. I check time first with w32tm /query /status, then that the client's DNS points only at domain controllers, then nltest /dsgetdc:example.com to see which one it finds. dcdiag /v and repadmin /replsummary show whether the domain controllers and their replication are healthy.

A datastore is degraded or a VM hangs on disk. esxcli storage core path list shows the state of every path, and esxcli storage nmp device list the multipathing policy. One dead path should cause no outage. If it did, the multipathing or the zoning was wrong. On iSCSI I also check port binding and the MTU on both storage networks.

Animation
Commands I use on servers and virtual hosts
PlatformCommandWhat it tells me
ESXesxcli network nic listPhysical NICs, link state, speed and driver.
ESXesxcli network vswitch dvs vmware listDistributed switches, uplinks and MTU on this host.
ESXesxcli network ip interface ipv4 getVMkernel ports and their addresses.
ESXesxcli network ip neighbor listThe ARP table seen by the VMkernel ports.
ESXpktcap-uw --uplink vmnic0 -o /tmp/cap.pcapA packet capture on a physical uplink.
ESXesxtopLive processor, memory, disk and network contention.
ESXvm-supportA log bundle for the vendor.
PowerCLIGet-VMHost | Select Name,ConnectionStateEvery host and whether vCenter can manage it.
PowerCLIGet-VM | Get-SnapshotForgotten snapshots that are growing.
WindowsTest-NetConnection fs01 -Port 445Whether a TCP port answers, without a telnet client.
WindowsResolve-DnsName -Type SRV _ldap._tcp.dc._msdcs.example.comWhich domain controllers DNS offers.
WindowsklistThe Kerberos tickets this session holds.
Windowsnetdom query fsmoWhich domain controllers hold the five FSMO roles.
Windowsgpresult /rWhich Group Policy objects applied.

My general method, starting from the symptom and working layer by layer, is on the troubleshooting page.

Engagement

How I run a server and virtualisation project, from inventory to refresh

Whether it is a new cluster, a consolidation or a move off an old platform, I follow the same path. I agree the outcome, measure what is really running, design for failure and prove it, then hand over something the operations team can keep patched and in support.

How an engagement runs, from first conversation to lifecycle Seven stages from left to right: engage (outcomes), requirements (what and how), discovery (measure it), design (on paper), build and test (prove it), support (handover), lifecycle (stay current). For each stage the panel shows who I work with and what comes out of it. After the lifecycle stage the loop returns to the start. Engageoutcomes Requirementswhat and how Discoverymeasure it Designon paper Buildprove it Supporthandover Lifecyclestay current Step 1 · EngageWhy move, and what good looks likeWho I work withWhat comes outInfrastructure leadApplication ownersFinance and licensingGoals: cost, risk or end of supportScope: hosts, clusters and sitesLicensing position and constraintsDecision log and who owns what Step 2 · RequirementsWhat must run, and how wellWho I work withWhat comes outApplication ownersSecurity and complianceBackup and recovery ownersWorkloads with CPU, memory and diskAvailability and recovery targetsSecurity baseline per server classRequirements traced to tests Step 3 · DiscoveryMeasured demand, not guessesWho I work withWhat comes outPlatform engineersApplication supportLicensing teamInventory of every VM and hostPeak and average demand per VMDependency map between serversRight sizing and retirement list Step 4 · DesignClusters, failure domains and standardsWho I work withWhat comes outDesign authorityNetwork and storage teamsVendor engineersHost standard and cluster designNetwork, storage and VLAN designHA, DRS and admission controlBuild standard and runbooks Step 5 · Build and testBuilt from one baseline, tested by failureWho I work withWhat comes outBuild engineersApplication testersChange advisory boardHosts built from one baselineFailover tests: host, path, switchMigration waves with rollbackAcceptance sign off Step 6 · SupportRunbooks, alerts and clear ownershipWho I work withWhat comes outOperations and service deskBackup teamProblem managerRunbooks and known errorsCapacity and health alertsPatching rings and calendarHypercare exit criteria Step 7 · LifecycleFirmware, hypervisor and guests in supportWho I work withWhat comes outVendor account teamsProcurementDesign authorityFirmware and hypervisor baselinesEnd of support registerCapacity review each quarterHardware refresh plan

Swipe sideways to see the whole diagram.

Step 1
  1. I start with the reason for the work: hardware or software going out of support, licence cost, a data centre exit or poor performance. I agree measures of success up front, such as cost per VM, recovery time or hosts retired, and who decides what.

  2. Functional requirements say what must run: which workloads, operating systems and integrations. Non functional ones say how well: availability, recovery point and recovery time, performance, growth and security, each with a number I can test.

  3. I collect real data: an RVTools export or a LiveOptics capture of every VM, thirty days of performance history, and dependencies mapped from flow data and workshops with application owners. Most estates have oversized VMs and forgotten servers, so discovery often pays for itself.

  4. I design the host standard, cluster sizes and failure domains, the virtual networking and storage, and the HA, DRS and backup settings. One host per cluster sits in each rack, so losing a rack costs each cluster only its spare.

  5. Hosts are built from one firmware and software baseline. Then I test failure on purpose: pull a host, a storage path and a switch, and watch HA, multipathing and teaming do their work. Workloads move in waves, each with a rollback point.

  6. Operations get runbooks for the common faults, alerts on capacity, CPU ready, snapshots and certificate expiry, and a patching calendar. Hypercare ends only when alerts are quiet, runbooks are proven and a backup has been restored at least once.

  7. Every layer has a support date: server firmware, the hypervisor, vCenter, the guest operating systems and the hardware itself. I keep one register of them and plan upgrades and refreshes well before the dates arrive.

Functional requirements

What it must do.

  • Run every listed workload on a supported hypervisor and guest operating system.
  • Restart workloads automatically after a host failure, in priority order.
  • Move running workloads between hosts for maintenance without an outage.
  • Keep production, management, storage and vMotion traffic on separate networks.
  • Provide identity, DNS, DHCP and time services at every site that needs them.
  • Back up every VM, and restore a single file, a whole VM or a cluster.

Non functional requirements

How well it must do it, with a number wherever one can be agreed.

Availability
99.95% for the platform, with N+1 hosts in every cluster and N+2 for critical clusters.
Recovery
A recovery point of 15 minutes and a recovery time of 4 hours for tier 1 workloads, longer for lower tiers.
Performance
CPU ready under 5 percent per vCPU, storage latency under 1 ms on flash, and no ballooning or swapping.
Capacity
Twelve to eighteen months of growth, with 20 percent headroom left after a host failure.
Security
Hardened builds, Secure Boot and TPM, out of band management on its own network, and admin access through a jump host.
Operability
Hosts built from one baseline, configuration drift reported, and patching in rings each month.
Cost
An agreed cost per VM, including hardware, licences, power and support.

These are typical starting targets for a virtual platform. The client sets the final numbers, and each one is proven in the failover tests before go live.

Projects

Where I have run this layer

I started as a systems engineer, so servers and virtualisation were part of my job long before I designed networks around them. I still run them every week in my lab.

Home lab

Three hosts, one vCenter

VMware ESXi on three HP servers, two DL160s and an ML110, managed through vCenter with vMotion between them and iLO for remote console. Windows Server 2012 R2 runs Active Directory, DNS, DHCP and TACACS for device logins.

Certification

VMware Certified Professional

VMware Certified Professional, Data Centre Virtualisation (VCP5). I have also trained in MCITP (Microsoft Certified IT Professional) and MCSE (Microsoft Certified Systems Engineer) for Windows Server.

JJ Food Wholesale · 2007 to 2011

Systems engineer for the group

LAN, WAN (wide area network), VoIP (voice over IP), virtualisation and security across the group, including warehouse, cold chain and temperature monitoring systems at the food depots, linked to the group ERP (enterprise resource planning) system. Over £250k a year saved, with payback in the first year.

Penguin Random House · 2013 to 2015

Post merger integration

As senior infrastructure engineer, integrated infrastructure across a multi site estate and the enterprise data centre, on Cisco, Palo Alto and VMware. Saved £700k a month across support and operations.

XIDA · 2021 to 2024

Ready for high performance workloads

Prepared data centre infrastructure for high performance workloads: rack allocation, structured cabling pathways and deployment coordination.

XIDA · 2025 to now

AI ready data centre

Designed artificial intelligence (AI) ready data centre infrastructure for high density compute clusters, covering network, power, cooling and structured cabling, with the rack layouts the build teams worked from.

Backed by VMware Certified Professional, Data Centre Virtualisation. See all credentials