Seite wählen

NETWAYS Blog

KVM-Cluster: Hochverfügbarkeit und zuverlässiges Locking

Im Internet, in Büchern und einer Reihe von Fachartikeln findet sich umfangreiche Unterstützung für das Einrichten unterschiedlichster hochverfügbarer Linux-Cluster. Zur Zeit hoch im Kurs ist die Clusterlösung Pacemaker in Kombination mit Corosync/OpenAIS. Als Virtualisierungslösung mausert sich KVM (neben LXC) zum Produkt der Wahl. Und beides zusammen ergibt einen richtig schönen Cluster mit VMs, die „nach Belieben“ von einem Rechner zum anderen wandern können. Oder auf Neudeutsch: eine „Private Cloud“.
Soweit nichts Neues, allerdings sind die meisten der vorgestellten Lösungen, die sich so finden, höchst riskant. Wer nämlich auf die Live-Migration nicht verzichten will, muss auf „Shared Storage“ zurückgreifen. Dabei hat man die Wahl zwischen einer Lösung wie NFS (was man für VMs nicht unbedingt haben möchte), oder aber einem gemeinsamen Blockdevice (SAN, DRBD, iSCSI) mit einem Cluster-Filesystem wie GFS2 oder OCFS2. Bei vielen Knoten bieten sich Lustre, GlusterFS oder für wagemutige auch Ceph an – diese Lösungen lassen wir jetzt aber mal außen vor.

Soweit, so gut. Aber: QEMU/KVM betreibt keinerlei Locking für seine Disk Images. Das bedeutet, dass man sehr leicht versehentlich dasselbe Image zweimal gleichzeitig booten kann. So etwas hat katastrophale Auswirkungen, das Filesystem der VM wird schneller als einem lieb ist korrupt und ist zudem sehr bald kaum noch wiederherstellbar. Zwar kann man eine VM mit libvirt nicht zweimal gleichzeitig starten, wohl aber z.B. beim Clonen einer VM versehentlich dasselbe Image im XML-File stehen lassen. Genauso „tödlich“ ist es, wenn in einem Cluster dieselbe VM auf zwei unterschiedlichen Knoten startet. Und spätestens in einer Split-Brain-Situation wird das früher oder später passieren.
Kürzlich konnte ich bei einem Kunden eine interessante Lösung hierfür implementieren. Libvirt bietet nämlich mittlerweile eine Schnittstelle für Lock-Manager an, und „sanlock“ ist ein solcher. Damit gelang es nicht nur, auf einem GFS2 in Kombination mit mit einem Dual-Primary DRBD ein funktionierendes Locking für die VM-Images umzusetzen, sondern sogar in Kombination mit cLVM und GFS2-basiertem Sanlock auf dem DRBD sitzende einzelne Logical Volumes als virtuelle Disks den einzelnen VMs zuzuweisen.
Mit dem üblichen Minimal-Tuning für GFS2 bedeutete dies für die LVM-basierten VMs verglichen mit dem was wir in den GFS2-basierten messen konnten immer noch fast doppelten Durchsatz bei sequentiellem Schreiben und ein Fünftel der Latenzzeit!

Thomas Gelf
Thomas Gelf
Principal Consultant

Der gebürtige Südtiroler Tom arbeitet als Principal Consultant für Systems Management bei NETWAYS und ist in der Regel immer auf Achse: Entweder vor Ort bei Kunden, als Trainer in unseren Schulungen oder privat beim Skifahren in seiner Heimatstadt Bozen. Neben Icinga und Nagios beschäftigt sich Tom vor allem mit Puppet.

Spiegeln unter dem roten Hut

In vielen unserer Umgebungen nutzen wir DRBD zur Spiegelung der Festplatten über zwei Server hinweg. So lassen sich Hochverfügbarkeitskonzepte auch ohne den Einsatz einer shared Storage aufbauen.
DRBD wird bei vielen Distributionen schon im Standart Package Repository mitgeliefert. Die Ausnahme der Regel machen hier die „Kommerziellen“.
Bei SuSE Linux Enterprise Server muss dafür die HA Extension gekauft werden. Bei RedHat ist es leider nicht in der Cluster Suite enthalten. Abhilfe schafft hier das CentOS Extra Repository.

rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
yum install drbd83 kmod-drbd83

Das ganz klappt bis RHEL 5.6 wunderbar, ab Version 6 stehen leider derzeit noch keine RPM Pakete zur Verfügung.
Kein Problem, kompilieren wir uns das ganz doch einfach selbst und weil wir nicht auf den Kopf gefallen sind bauen wir auch direkt RPM Pakete daraus um uns den Schritt für den zweiten Node zu ersparen.
Fangen wir mit den Vorbereitungen für unser DBRD Menü an:
Zutaten bereitlegen

yum install kernel-devel rpm-build gcc bison flex
wget http://oss.linbit.com/drbd/8.3/drbd-8.3.10.tar.gz
tar xzvf drbd-8.3.10
cd drbd-83.10
cp /boot/config-`uname -r` .config

Zutaten verrühren

./configure --with-km --with-utils
make
cd drbd
make clean all

In den Backofen schieben
Als erstes erstellen wir die DRBD Pakete (DRBD, DRBD Utils, DRBD Hearbeat- und Pacemakerskripte, DRDB-Xen etc.) und anschließend das Paket was uns DRBD als Kernel Modul lädt.

make rpm
make km-pm

Verzehr

cd /root/rpmbuild/RPMS/x86_64 (oder i368)
rpm -ivh drbd-*.rpm

Zum Abschluß können die erstellten DRBD RPM Pakete auf den zweiten Node kopiert und installiert werden.

CeBIT Live 2009 – Auch am 4. Tag gute Besucherzahlen

Erfahrungsgemäß lässt am vierten Tag der CeBIT 2009 der Andrang am Stand bereits merklich nach. Überraschender und erfreulicherweise war das bei uns heute nicht der Fall, wir hatten den ganze Vormittag über gut zu tun und konnten viele neue Kontakte knüpfen. Gerade ist Florian Haas von LINBIT bei uns am Stand, der auch als Referent auf der „Open Source Data Center Conference“ zum Thema „Virtual consolidated HA: Virtualization with KVM, Pacemaker and DRBD“ halten wird, während Michi bei SUN die Stellung hält.

Kurz nach der CeBIT-Halbzeit können wir jetzt schon sagen, das die CeBIT 2009 für uns ein voller Erfolg ist.