Virtualisierter Cluster-Speicher unter VMware ESXi

Viele Software-Clusterlösungen benötigen gemeinsamen Speicher, auf den alle Clusterkonten schreibend zugreifen können müssen. Ein besonders prominentes Beispiel dürfte hier Oracle RAC (Real Application Clusters) sein. Gemeinsamer Cluster-Speicher wird im Enterprise-Segment meistens mit SAN-Speicher, der gleichzeitig an mehrere Systeme angebunden wird, gelöst.

Zu (privaten) Testzwecken dürfte ein SAN-Speichersystem wohl das Budget sprengen. Glücklicherweise gibt es die Möglichkeit gemeinsamen Cluster-Speicher auch virtualisiert zur Verfügung zu stellen. Bei der Verwendung von VMware ESXi lautet das Schlagwort hierfür "multi-writer". ESXi verwendet für lokalen und iSCSI-Speicher ein eigenes Dateisystem namens VMFS, welches standardmäßig den zeitgleichen Zugriff auf einzelne Dateien von mehreren virtuellen Maschinen unterbindet (solange kein Fault Tolerance verwendet wird). Durch die Deaktivierung dieses Verhaltens ist es möglich, von bis zu 8 virtuellen Maschinen auf eine virtuelle Festplatte (.vmdk-Datei) zuzugreifen.

Die Vor- und Nachteile dieser Konfiguration sind sehr ausführlich in einem VMware Knowledge Base-Artikel beschrieben - vielen Dank an der Stelle auch nochmal an meinen Kollegen Johannes, der mir diese Lösung empfohlen hat. 🙂

In jedem Fall ist die Verwendung eines Cluster Lock-Managers (z. B. dlm) innerhalb der virtuellen Maschinen unabdingbar, da sonst durch gleichzeitige Benutzung sehr schnell Dateninkonsistenzen entstehen. Die Vorgehensweise zur Implementation zwischen zwei oder mehreren virtuellen Maschinen ist recht einfach:

  1. Erstellen der virtuellen Festplatte der ersten virtuellen Maschine als "Thick provisioned - Eager zeroed", die Festplatte muss auf einem iSCSI-Speicher oder - falls alle zugreifenden VMs auf dem gleichen Host ausgeführt werden - lokalem SCSI/SAS-Speicher abgelegt werden, NFS wird nicht unterstützt! Es empfiehlt sich bei allen virtuellen Maschinen die gleichen SCSI-IDs zu verwenden.
  2. Ausschalten aller betroffener virtuellen Maschinen.
  3. Editieren der .vmx-Konfigurationsdatei der ersten virtuellen Maschine und Hinzufügen des folgenden Parameters:scsiX:Y.sharing = "multi-writer" Die SCSI-ID muss an die der angelegten Cluster-Festplatte angepasst werden. Zur Editierung der Konfigurationsdatei den vSphere-Client oder vi über SSH verwenden - der Web-Client übernahm den Parameter in mehreren Tests bei mir leider nicht.
  4. Hinzufügen einer bestehenden Festplatte unter Angabe des Pfads zur eben erstellten Festplatte bei den weiteren virtuellen Maschinen.
  5. Anpassen der .vmx-Konfigurationsdateien analog zu Schritt 3.

Anschließend können die virtuellen Maschinen gestartet werden. Durch diese Anpassung werden übrigens die folgenden ESXi-Funktionen und Features nicht mehr unterstützt:

  • Snapshots und Online-Erweiterung der gemeinsamen Festplatte
  • Ruhezustand der virtuellen Maschine
  • Klonen
  • Storage vMotion
  • Changed Block Tracking (wichtig für "agentless" Backup-Lösungen)
  • vSphere Flash Read Cache

Im nächsten Schritt kann der Cluster entsprechend konfiguriert werden, die neue Festplatte zu verwenden. Wer noch keinen Cluster eingerichtet hat, kann auch einfach zu Testzwecken temporär ein konventionelles Dateisystem anlegen und auf den einzelnen Knoten einhängen:

1nodeA # mkfs.ext4 /dev/sdb
2nodeA # mkdir /cluster ; mount /dev/sdb /cluster
3nodeA # echo "mimimi" > /cluster/test
4nodeA # umount /cluster
5nodeB # mkdir /cluster ; mount /dev/sdb /cluster
6nodeB # cat /cluster/test
7mimimi
8nodeB # umount /cluster
9...

An dieser Stelle sei nochmals auf die Tatsache, dass der parallele Zugriff von mehreren virtuellen Maschinen auf eine virtuelle Festplatte ohne Cluster-Lockmanager sehr schnell Datenverlust bedeuten kann, verwiesen. In diesem Sinne - happy vClustering! 🙂

Übersetzungen: