Viele werden wohl mittlerweile Exchange Server als Virtuelle Maschinen betreiben. Damit Exchange 2016 auch in einer VM optimale Performance liefert, gibt es ein paar Dinge zu beachten. Die wichtigsten möchte ich hier kurz vorstellen:
Exchange 2016 auf VMware ESXi 5.5
vCPUs:
Bei den virtuellen CPUs gilt: Soviel wie nötig, so wenig wie möglich. Hier hilft der Exchange 2013 Server Role Requirements Calculator weiter. Derzeit gibt es noch keine separate Version für Exchange 2016, die Anforderungen unterscheiden sich aber nur minimal. Wenn es geht, sollte hier darauf geachtet werden, das die VM in einen NUMA Knoten passt. Habt ihr also einen ESX mit 2 CPUs mit je 4 Kernen, dann sollte auch die VM maximal 4 vCPUs haben, und nicht 6.
vRAM:
Auch hier hilft der Calculator, da es hier keine pauschale Aussage gibt. 16 GB RAM würde ich aber als Minimum ansetzen, damit Exchange 2016 vernünftig läuft. Microsoft gibt 8 GB als Minimum an. Auch hier sollte darauf geachtet werden, dass der RAM in einen NUMA Knoten passt. Wie im Beispiel oben, wenn der ESXi 2 CPU Sockel hat und in Summe 64 GB RAM, dann sollte die Exchange VM nicht mehr als 32 GB RAM haben. NUMA ist hier sehr gut erklärt.
vNIC:
Ganz einfach zu beantworten: VMXNet3 benutzen
Storage:
Das wird schon etwas schwieriger zu beantworten. Hier gilt es die Best Practises des Storage Herstellers zu beachten. Ein paar einfache Empfehlungen gibt es aber:
Pro Exchange VM 3 virtuelle SCSI Controller benutzen, 1 SCSI Controller für das Betriebssystem und die Swap Partition, 1 SCSI Controller für die Datenbanken und ein SCSI Controller für die Logs. Bei Windows Server 2012 R2 als OS, sollte der Controller für das Betriebssystem den Typ LSI Logic SAS haben. die Controller für Datenbank und Logs den Typ Paravirtual.
Datenbanken und Logs sollten auf unterschiedlichen Volumes gespeichert werden. Ich empfehle VMDKs zu nehmen, das ist flexibler als Raw Device Mappings.
Die VMDKs für alle Volumes sollten Thick-Eager-Zeroed provisioniert werden. VMDKs für die Datenbanken, hängen dann beispielsweise an SCSI Controller 1, VMDKs für Logs an SCSI Controller 2. Die VMDKs sollten sich auf unterschiedlichen Datastores befinden.
Exchange 2016 auf Windows Server 2012 R2
Da wir schon beim Thema Storage sind, es gibt auch ein paar Empfehlungen zum Gastbetriebssystem.
Storage:
Als Dateisystem dient entweder NTFS oder ReFS. Wenn NTFS als Dateisystem zum Einsatz kommt, dann mit 64KB Blocksize und ohne Schnellformatierung
Bei ReFS als Dateisystem ebenfalls ohne Schnellformatierung, die Blocksize ist bereits 64KB. Bei ReFS ist zusätzlich das Integrity Feature für Datenbanken und Logs abzuschalten:
Get-Item DB1.edb | Set-FileIntegrity -Enable $false
Ob die Volumes mit Laufwerksbuchstaben versehen werden oder in Ordner gemounted werden, spielt nur bei der Anzahl der Volumes und Datenbanken eine Rolle. Wer viele Volumes und Datenbanken hat, erstellt lieber eine kleine 2 GB Festplatte und benutzt diese für die Mountpoints. Hier ein Beispiel:
Ein kleines VMDK mit 2 GB, auf dem Volume wird eine Ordnerstruktur angelegt, beispielsweise DB1_EDB, DB1_LOG, DB2_EDB, DB2_LOG usw. In den Ordnern werden dann alle Volumes gemounted.
Page File (Auslagerungsdatei):
Für das Page File, bzw die Auslagerungsdatei am besten ein eigenes Volume anlegen. Die Größe der Auslagerungsdatei wird fest nach folgender Faustformel eingestellt:
Größe des RAM plus 10 MB aber maximal 32778 MB (32GB plus 10 MB)
Bei 16 GB RAM für die VM also 16394 MB für die Auslagerungsdatei (16 x 1024 + 10). Bei 64 GB RAM für die VM, 32778 GB für die Auslagerungsdatei.
Weitere Einstellungen wenn eine DAG verwendet wird
Wenn eine DAG verwendet wird, dann gibt es weitere wichtige Punkte:
vNIC:
Mindestens 2 Netzwerkkarten vom Typ VMXNet3, am besten über seperate Uplinks verbunden. Alternativ seperate VLANs. Eine vNIC für den Client Datenverkehr, eine für die Replikation.
vMotion:
Cluster Heartbeat anpassen um ungewünschte Failovers zu vermeiden:
- (Get-Cluster).SameSubnetThreshold=10
- (Get-Cluster).SameSubnetDelay=1000
DRS:
DRS AntiAffinity Regeln erstellen um die Exchange VMs immer auf unterschiedlichen ESX Servern zu betreiben.
Storage:
Wenn ReFS als Dateisystem zum Einsatz kommt, dann die DAG entsprechend konfigurieren:
Set-DatabaseAvailabilityGroup DAGNAME -FileSystem ReFS