Lastenausgleich mit TYPO3

Wie das CMS lastverteilt betrieben wird

In der Praxis setzt man auf „Computer-Cluster“, um die Eigenschaften eines einzelnen Servers in den Dimensionen Verfügbarkeit und Performance zu optimieren. Ein Computer-Cluster, oder kurz Cluster, besteht aus mehreren Servern, die kooperativ eine Aufgabe lösen. Zielpunkt der Bemühungen ist, dass sich die Server des Clusters von außen wie ein einzelner großer Rechner verhalten. Prominente Vertreter des Clusterings sind Google® und heise.de. Generell gibt es zwei konkurrierende Konzepte: Hochverfügbarkeit und Lastenausgleich.

Hochverfügbarkeit Lastenausgleich
Server-Ausfall verkraftbar ja ja
Server-Software ohne Modifikation betreibbar fast immer selten
Performance-Steigerung mit jedem neuen Server nein ja
konkurrierender Datenzugriff nein ja
Session-Fail-Over möglich nein ja

Hochverfügbarkeit

Das Schema zeigt eine Hochverfügbarkeits-Lösung mit Heartbeat.

Das Schema zeigt eine Hochverfügbarkeits-Lösung mit Heartbeat.

Wenn ein kritischer Dienst nur auf maximal einem Server des Clusters gleichzeitig läuft, spricht man von Hochverfügbarkeit. Die anderen Rechner des Clusters sind passiv und warten, um im Fehlerfall einen hochverfügbaren Dienst zu übernehmen. Diesen Vorgang bezeichnet man als „Fail-Over“. Vorteil dieses Ansatzes ist, dass die meisten Applikationen nicht für den Einsatz im Cluster angepasst werden müssen und somit einen Fail-Over „nativ“ unterstützen. Dank des Konfigurationsdatei-Ansatzes, wie er unter UNIX und Linux üblich ist, muss meistens nur gewährleistet sein, dass die Konfigurationsdateien und Work-Daten zwischen den Servern des Clusters untereinander geteilt werden. Zusammen mit einer Software, die den Fail-Over koordiniert, wie zum Beispiel Heartbeat [1], lassen sich die meisten Dienste wie Webserver und Datenbankserver hochverfügbar implementieren.

Nachteil des Hochverfügbarkeits-Ansatzes ist, dass die Performance nicht mit der Anzahl der Server im Cluster skaliert. Das heißt, dass der Hochverfügbarkeits-Cluster nur die Verfügbarkeit eines Dienstes sicherstellt, aber nicht, dass alle Server des Clusters gleichmäßig ausgelastet werden. Weiterhin bedeutet ein „Fail-Over“ normalerweise auch eine Unterbrechung der Verfügbarkeit – wenn auch nur für einen festen Zeitraum. Hochverfügbare Cluster sind in den meisten Fällen auch nicht ohne „Single-Point-Of-Failure“. Das bedeutet, es gibt im Cluster eine nicht-redundante Ressource, die, falls sie ausfällt, auch den Ausfall des kompletten Clusters nach sich zieht. In der Abbildung ist es das „Shared Device“. Um dieses Problem zu beheben, kann man auf DRBD [2] zurückgreifen. DRBD stellt kostengünstig ein virtuelles Shared Device auf Basis der lokalen Festplatten der Server zur Verfügung.

Lastenausgleich

Der Load-Balancer reguliert die Anfrage-Verteilung auf die Server.

Der Load-Balancer reguliert die Anfrage-Verteilung auf die Server.

Beim Lastenausgleich ist das grundlegend anders: Alle Server sind gleichzeitig aktiv und beantworten so parallel die Anfragen an den Cluster. Dadurch spricht man hier von einem „Active-Active“-Cluster. Das wird durch eine im Cluster installierte Komponente realisiert. Der Load-Balancer sorgt für eine gleichmäßige Verteilung der Anfragen an die dahinter liegenden Server. Die Performance skaliert bei diesem Cluster-Typus daher mit der Anzahl seiner Rechner. Fällt ein Rechner des Clusters aus, spricht der „Load-Balancer“ diesen nicht mehr an. Dadurch erbt ein Active-Active-Cluster die Hochverfügbarkeits-Eigenschaft des Fail-Over-Clusters. Da alle Dienste des Clusters parallel aktiv sind, muss im Falle eines Server-Ausfalls kein Dienst neu gestartet werden. Darauf aufbauend kann man „Session-Replikation“ implementieren. Das bedeutet, Clients würden den Ausfall eines Servers im Extremfall nicht mehr bemerken.

Grundsätzlich kann man bei der Lastverteilung feststellen, dass der Load-Balancer der „Bottle-Neck“ ist. Daher bieten namhafte Hersteller Hardware-Appliances für genau diesen Zweck an. Weiterhin ist der Load-Balancer ein Single-Point-of-Failure, also insgesamt eine kritische Komponente des Clusters. In einem folgenden Abschnitt werden Open-Source-Softwarelösungen zum Load-Balancing vorgestellt. Der Tribut für die Vorteile des Active-Active-Clusters ist eine komplexere Struktur sowie meist notwendige Anpassungen der verwendeten Software.

Funktionale Herausforderungen

Auf funktionaler Ebene ergeben sich in der Praxis für einen Active-Active-Cluster eine ganze Reihe von Herausforderungen. Alle Server des Clusters müssen in Abhängigkeit von einer Client-Session das gleiche Ergebnis zurückliefern. Das bedeutet, dass die Work-Daten der Server geteilt werden müssen. Der klassische Lösungs-Ansatz ist, ein gemeinsames NAS-System zu implementieren oder ein Cluster-Dateisystem wie GPFS [3], Lustre [4] oder GFS [5] zu verwenden. Letzteres Dateisystem wird offiziell von der Firma RedHat unter der GPL weiterentwickelt und ist erst kürzlich offiziell in den Linux-Kernel aufgenommen worden. Auf diese Weise sind die Work-Daten des Clusters für alle zugänglich und konkurrierender Daten-Zugriff wird möglich. Im Falle von TYPO3 würden in einem Cluster-Dateisystem oder einem NAS die Daten der Instanz gespeichert werden, also typo3conf/, fileadmin/ und so weiter.

Wie schon beim hochverfügbaren Cluster, entstehen auch bei der Lastenverteilung Kosten, da ein „Shared-Storage“ notwendig wird. Das ist ein Festplattensystem, das von mehreren Rechnern geteilt wird und auf das zeitgleich von mehreren Rechnern aus zugegriffen werden kann.

Zum TYPO3-Active-Active-Cluster

Um der oben genannten funktionalen Anforderung an einen TYPO3-Cluster gerecht zu werden, müssen mehrere Komponenten installiert sein. Das betrifft sowohl das verwendete Datenbanksystem als auch die Work-Daten, wie zum Beispiel statischer Content, Bilder, Stylesheets und so weiter.

Um eine gemeinsame Dateibasis der Cluster-Server zu erhalten, gibt es mehrere Strategien. Falls verlangt wird, dass die Dateien im Cluster stets absolut synchron sind, greift man auf ein Cluster-Dateisystem oder ein NAS zurück. Falls die Anforderungen an den Cluster weniger hoch sind, kann man auch auf eine asynchrone Dateireplikation zurückgreifen. Hierfür gibt es eine Vielzahl von Tools und Möglichkeiten, wie z. B. „mirdir“ [6] oder das bekannte und effizient arbeitende „rsync“ [7].

Für die Bereitstellung der Datenbank müssen mehrere Dinge beachtet werden, denn TYPO3 ist mitunter ein sehr Datenbank-intensives CMS. Durch die zum Teil hohe Anzahl von Datenbank-Anfragen kann sich eine nicht-lokale Datenbank allein schon durch die Latenz des Netzwerks sehr negativ auf die Performance des Clusters auswirken. Daher muss eine Lösung gefunden werden, bei der möglichst auf jedem Server lokal ein Datenbankserver läuft. Dies ist mit dem Active-Active-Cluster der MySQL-Datenbank [8] perfekt abbildbar, genauso wie mit einer Oracle RAC-Instanz [9] auf jedem Cluster-Knoten.

Gegen die Verwendung der MySQL-Datenbank sprechen die vielen BLOBs (Binary Large Objects) in der Datenbank einer TYPO3-Instanz. Der MySQL-Cluster speichert seine Datenbanken komplett im Hauptspeicher, wodurch der Haupt-Speicherbedarf auf den Cluster-Knoten sprichwörtlich explodiert. Effizienter arbeitet hier eine Oracle RAC-Instanz, jedoch ist die Installation von TYPO3 darauf komplizierter.

Load-Balancing-Software

Für die Performance des Clusters ist die Load-Balancing-Software von besonderer Wichtigkeit. In hausinternen Tests sind allerdings große Unterschiede in den Implementierungen der Load-Balancing-Software offenbar geworden.

Eine häufig verwendete Load-Balancing-Software ist Pound [10]. Pound wird schon seit 2002 entwickelt und hat eine große Benutzer-Community. Pound ist unter der GPL lizenziert und wird häufig in Verbindung mit Ruby-On-Rails- oder auch JSF-Clustern eingesetzt. Gegen Pound spricht sein Threading-Modell: Pro Anfrage wird ein „clone()“ des aktuellen Prozesses durchgeführt. Das sorgte bei unseren Tests für eine rasche Saturierung der Cluster-Server. Ein großes Plus von Pound ist hingegen, dass auch SSL-Verbindungen lastverteilt werden können. Besonders in letzter Zeit hat Pound signifikante Verbesserungen erfahren, wie zum Beispiel Online-Rekonfiguration, gewichtete Lastverteilung und einiges mehr.

Komponente Aufgaben des Active-Active-TYPO3-Clusters
Load-Balancer 1.) Anfrage-Verteilung; 2.) Verwaltung des Mappings; 3.) Client -> Server
Server Anfrage-Beantwortung
NAS, Cluster FS 1.) Datenverteilung; 2.) Verwaltung konkurrierender Datenzugriffe
Cluster DB gemeinsame Datenbasis

Eine weitere Load-Balancing-Software ist balance [11]. Balance wird von der deutschen Firma Inlab GmbH entwickelt. Es gibt einen Nicht-GPL-Ableger von balance namens BalanceNG. Diese Version wird von der Inlab offiziell unterstützt. In unseren Tests hatte sich balance immer durch seine Performance und Effektivität hervorgetan. Balance konnte bei unseren letzten Tests immer mindestens 75 Prozent mehr Anfragen pro Sekunde verarbeiten als Pound.

Verglichen mit balance ist Pound allerdings konfigurierbarer, wodurch es als Load-Balancing-Software interessant bleibt. So ist statische Last-Verteilung auf Basis des URIs, Headers und so weiter möglich. So wird Pound zu einem sehr mächtigen und flexiblen Tool zur HTTP-Anfrage-Lastverteilung.

Wie kommt TYPO3 in den Cluster?

Nachdem die Komponenten des TYPO3-Clusters kurz erläutert wurden, kommen wir nun zum spannendsten Teil: Wie installiert man TYPO3 auf einem Active-Active-Cluster? Die Frage ist schnell beantwortet: Sobald der Cluster steht, funktioniert die Installation genauso wie auf einem einzelnen Server.

Der Grund dafür ist die Datenverteilung. Macht man eine Änderung an einer TYPO3-Instanz, wie zum Beispiel das Installieren einer Extension, stehen Änderungen am Dateisystem, je nach Konfiguration synchron oder asynchron, auf den einzelnen Knoten sofort zur Verfügung. Das Gleiche gilt auch für Modifikationen auf der Ebene der Datenbank. In der Bedienung verändert sich absolut nichts. Dadurch hält der Active-Active TYPO3-Cluster sein Versprechen ein: Er verhält sich nach außen wie ein einzelner Rechner.

- Anzeige-

Dieser Artikel stammt aus:

 

Weitere Artikel dieser Ausgabe

TYPO3 plus Flash ? Zwei Beispiele aus der Praxis

Die Website als Markenerlebnis inszenieren

Grundsätzlich ist Flash für Webentwickler gleichzeitig Segen und Fluch: Weil gute Flash-Programmierer... »

AJAX Framework ? barrierearm

Umfangreiche AJAX-Webseiten schnell entwickeln mit TYPO3

AJAX – die Kerntechnologie im vielgepriesenen Web 2.0 – ist in aller Munde. Viele... »

Ajax-Community

Seit Ende 2005 gibt es die Ajax-Community, die sich voll und ganz dem Web-2.0-Trendthema Ajax... »

Börsengang 2.0

Venture Capital bringt Open Source an den Aktienmarkt

Ein Ereignis wirft seine Schatten voraus: die Ankündigung von MySQL, an die Börse gehen... »

CakePHP

Rapid Prototyping Framework

Eine verlässliche und flexible Architektur ist für den Bau einer Webapplikation unerlässlich.... »

CeBIT Open-Source-Planer

Ein Überblick über Open Source und Linux bei der CeBIT 2007

Im vergangen Jahr berichtete das T3N Magazin erstmals zum Thema Open Source im Rahmen der CeBIT.... »

Collax Business Server

Linux für den Mittelstand

Geboren im Jahr 1991, entwickelte sich das Open-Source-Betriebssystem Linux Schritt für... »

Das Dojo-Toolkit

...der sanfte Ajax-Einstieg

Das Dojo-Toolkit ist ein modular aufgebautes JavaScript-Toolkit für die Erstellung von Ajax-Anwendungen.... »

Datenjonglage mit TYPO3

Keine Angst vor der Portierung großer Websites nach TYPO3

Die Portierung des Online-Informationssystems EUFIS»

Shop  |  T3N Ausgaben  |  Open Source & TYPO3 Marktplatz
Übersicht  |  News  |  hype! Open Source & Web 2.0  |  RSS Feeds