URL dieses Artikels:

zu Ausgabe: 9.2004
Fast hundertprozentig
MySQL-Datenbank Cluster: hochverfügbar und kostengünstig
von Armin Röhrl und Stefan Schmiedl
Auf massiven Kundenwunsch hin springt MySQL auf den Cluster-Zug auf. Grundlage ist ein hochverfügbares DBMS, das für die Telekommunikationsbranche entwickelt worden ist. Der schwedische ISP und VoIP-Anbieter B2 setzt bereits heute einen MySQL-Cluster ein.

Für MySQL gibt es seit kurzem eine Clusterlösung, bei der die Datenbank auf mehrere, untereinander vernetzte Server redundant verteilt wird. Beim Ausfall eines Knotens springt automatisch ein Ersatzserver ein, sodass eine Verfügbarkeit von 99,999 Prozent (sechs Minuten pro Jahr) realistisch wird.
Zudem können bestimmte Abfragetypen noch schneller als bisher beantwortet werden. MySQL hat die Technologie mit bis zu 48 Nodes getestet und spricht von Antwortzeiten von fünf bis zehn Millisekunden und einem Durchsatz von rund 100.000 replizierten Transaktionen pro Sekunde auf einem Cluster aus vier Nodes mit je zwei Prozessoren.
Während früher nur eine relativ teure Lösung von EMICnetworks [7] vorhanden war, steht der Cluster, wie von MySQL gewohnt, unter einer dualen Lizenz: GPL-Projekte können MySQL Cluster kostenlos einsetzen, für kommerzielle Software-Hersteller stehen normale Bezahl-Lizenzen zur Verfügung, deren Preise aber da aufhören, wo andere noch lange nicht anfangen.

Architektur
MySQL hat im Oktober 2003 die Firma Alzato von Ericsson Business Innovation AB gekauft und damit die NDB-Cluster-Technologie bekommen. Das im TK-Bereich eingesetzte, hochverfügbare NDB-Cluster-DBMS ist ab Release 4.1 in MySQL integriert und kann über Bitkeeper [5] oder von der Stammseite [6] herunter geladen werden.

NDB lässt sich grob folgendermaßen beschreiben: ein Oracle-RAC ohne Shared Storage, lauffähig auf Standardhardware, wie sie in den aktuellen und weit verbreiteten Intel- und AMD-basierten Systemen zu finden ist. Neben Linux, Windows und Solaris wird jedoch auch Mac OS X unterstützt, sodass ein MySQL-Cluster praktisch überall aufgesetzt werden kann.
Die neue Engine, die die Grundlage von MySQL Cluster bildet, bietet Transaktionen, Replikation, Online-Backups, Systemwiederherstellung nach Abstürzen, Hash- und Baumindizierung, Online-Index-Erstellung, automatische Erkennung von ausfallenden Knoten im Cluster sowie ein Synchronisieren wieder startender Knoten.
Ein Managment-Server kümmert sich um die Konfiguration des Clusters. Für den Management-Server gibt es ein C-API, das in naher Zukunft in MySQL integriert werden wird. Über das NDB-API kommuniziert MySQL für die Abwicklung normaler Datenoperationen mit dem Cluster. Auch mit einem MySQL-Frontend zu NDB kann man über das NDB-API direkt mit dem Cluster kommunizieren.

Die sehr schnellen Reaktionszeiten werden erreicht, indem die gesamte Datenbank im Speicher (RAM) der Nodes gehalten wird. MySQL empfiehlt, insgesamt die doppelte Datenbankgröße plus zehn Prozent an RAM bereit zu stellen: Für eine 40 GB Datenbank sollte man also etwa 100 GB Speicher (RAM) im Cluster einkalkulieren.
Um die Single Points of Failure weitestgehend zu eliminieren, wird die lokale Redundanz zwischen den Nodes innerhalb eines Clusters durch Heartbeat überwacht. Die globale Inter-Cluster-Redundanz wird über Replikationen garantiert. So hat man auch bei einem vollständigen Shutdown gute Chancen auf eine erfolgreiche Systemwiederherstellung.

Cluster-Bilanz
Doch noch ist nicht alles eitel Sonnenschein. In der Quellcode-Distribution des MySQL Cluster-Release 4.1.2 (alpha)
  • werden keine BLOB-Spalten oder FULLTEXT-Indices unterstützt.
  • können maximal 128 Tabellen verwaltet werden.
  • gibt es kein REPLACE.
  • ist das Updaten eines Primärschlüssels nicht möglich.
  • kann der RAM-Bedarf erheblich nach oben abweichen.
  • funktioniert AUTO_INCREMENT nicht unbedingt zuverlässig.

Unter [1] findet man die vollständige Liste der vorhandenen Probleme.
Auf der Haben-Seite ist zu verbuchen, dass die dem Quellcode beiliegende Installationsanleitung zuverlässig beim Aufbau eines einfachen Clusters hilft. Mit dem Code (in ndb/demos) kommen zwei Demonstrations-Skripte für Konfigurationen mit einem und zwei Knoten, die inklusive Replikation auf Anhieb funktioniert haben. Die FAQ [4] liefert nähere Infos über weitere Minimalkonfigurationen.

MySQL, HP und SAP
Zwar steckt diese erste MySQL Cluster-Version noch in den Kinderschuhen, trotzdem wird MySQL damit zu einem potenziellen Konkurrenten für etablierte Cluster-DBs wie Oracle. Auch wenn zurzeit noch keine Trigger möglich sind und auch Transaktionen noch nicht vollständig unterstützt werden, ist MySQL für neue zu erstellende Anwendungen interessant, da hier diese fehlenden Features in einer Abstraktionsschicht selbst implementiert werden können.
Der ERP-Gigant SAP und MySQL arbeiten schon seit längerem sehr eng zusammen [3] und SAP wird MySQL auf Kundenwunsch hin mit seinen Produkten ausliefern. Die Allianz aus SAP und MySQL hat das klare Ziel, Orcale mit einem integrierten Produkt aus Datenbank und ERP-System ernsthaft Paroli zu bieten. Anstehende Optimierungen im R/3-Kern und der Einsatz von MySQL versprechen einen deutlichen Zuwachs an Performance, die den attraktiven Preis ergänzt. Und das Argument alles aus einer Hand hat im Unternehmenssektor auch noch nie geschadet.
In letzter Zeit ist auch HP [2] auf den MySQL-Zug aufgesprungen und bietet MySQL zusammen mit JBoss als Software-Stack auf seinen Linux-Maschinen an. Die Zukunft verspricht also interessant zu werden, vor allem, wenn durch die Neueinsteiger im Markt eine längst fällige Preisregulierung einsetzen wird. Auf jeden Fall wird man von MySQL eine einfache, billige und hochverfügbare Cluster-Lösung erhalten können, mit der man sich bereits heute vertraut machen sollte.

Links

Interview mit Malin Sjöstrand von B2
Der schwedische Breitband-Anbieter B2 (150.000 LAN- und DSL-Kunden und 50.000 VoIP-Kunden) setzt einen MySQL-Cluster ein. Wir haben mit Malin Sjöstrand, der Managerin der Netzwerkabteilung von B2 [8], gesprochen, deren Team den eingesetzten MySQL Cluster designt und implementiert hat.

Linux Enterprise: Welche Hardware setzen Sie ein?
Malin Sjöstrand: Es ist ein Vier-Node-Cluster bestehend aus Compaq DL380G3 2,4GHZ Dual CPUs, mit je 4 GB RAM.

LE: Wieviele Transaktionen/Sekunde erreichen Sie damit?
Sjöstrand: Momemtan hat unser System 8.000 Transaktionen/Sekunde im Produktionsbetrieb, aber es könnte wahrscheinlich sehr viel mehr verkraften.

LE: Was für eine Anwendung läuft auf MySQL Cluster?
Sjöstrand: Es ist ein integriertes System, das sich um Service-Provisioning/Aktivierung und IP-Adressen-Management (DHCP) kümmert.

LE: Welche Lösung setzten sie vor MySQL Cluster ein?
Sjöstrand: Wir verwendeten das ganz normale Standard-MySQL.

LE: Was waren die Anfangsprobleme?
Sjöstrand: Es gab viele Kinderkrankheiten und nicht alle notwendigen Funktionen waren implementiert. Bei der Unterstützung des notwendigen Fiber-Channel-Interfaces gab es weitere Probleme.

LE: Welche Probleme sind noch aktuell?
Sjöstrand: Wir können keine MySQL-JDBC-Treiber einsetzen und wir setzen immer noch ein Alpha-Release ein.

LE: Haben Sie bei der ursprünglichen Planung an Alternativen wie z.B. DB2 Stinger von IBM oder Oracle 10g gedacht?
Sjöstrand: Nein, Oracle würde nie unseren Performanzansprüchen genügen. Die einzige Alternative war TimesTen [9].

LE: Wir danken für das Gespräch und einen schönen Gruß nach Schweden.

© 2004 Software & Support Verlag GmbH. Vervielfältigung nur mit Genehmigung des Verlags. Fragen?