Hochverfügbarkeit dank Loadbalancing und IP-Takeover

Unter Debian [1] ist es sehr einfach, hochverfügbare Server zu betreiben. In diesem Artikel wird dies anhand einer Webserverfarm mit vorgeschalteten redundanten Loadbalancern veranschaulicht.

Ziel:

Es soll eine Website betrieben werden, die mehr Traffic erhält, als ein einzelner Server verkraften könnte und die auch bei Ausfall eines Servers noch immer erreichbar ist.

Setup:

Hochverfügbare Proxies als Loadbalancer
Hochverfügbare Proxies als Loadbalancer

Backend

Da die Website auf mehreren Servern laufen soll, brauchen diese ein gemeinsames Backend für die auszuliefernden Daten und das Session-Handling. Möglich sind z.B. der Einsatz von NAS (NFS/Samba), SAN (GFS(2)/OCFS2) oder Datenbanken.

Loadbalancing

Um den Traffic einigermaßen gerecht auf die einzelnen Webserver zu verteilen, bieten sich verschiedene Arten von Loadbalancern an, z.B. Hardware-Loadbalancer, Linux Virtual Server, IPTables Netfilter, Proxies oder RoundRobin-DNS.

Recht einfach und trotzdem komfortabel gestaltet sich das ganze unter Verwendung von Proxies, z.B. pound [2].

Dieser ist sehr leicht konfigurierbar, session-sicher, kann als HTTPS-Gateway benutzt werden und bringt mit poundctl ein Kontrollprogramm mit, daß das kontrollierte Zu- und Abschalten von z.B. Backend-Servern gestattet. Außerdem erkennt pound ausgefallene Backend-Server und nimmt diese automatisch aus dem Loadbalancing. Ist ein ausgefallener Backend-Server wieder erreichbar, wird dies von pound ebenfalls erkannt.

Redundante Proxies

Um auch den Ausfall des Loadbalancers auffangen zu können, verteilen wir dessen Aufgaben auf mehrere Proxies und lassen die Loadbalancer sich gegenseitig überwachen und ihre IP-Adressen selbst verwalten.

Diesen Job übernimmt wackamole [3]. Die einzelnen Loadbalancer werden zu einem Cluster zusammengeführt, dessen IP-Adressen vom Cluster selbst verwaltet werden. Wackamole sorgt dafür, daß jede Cluster-IP genau einmal vergeben und immer erreichbar ist. Fällt ein Knoten aus, werden dessen IP-Adressen von den verbleibenden übernommen und Router etc. mittels ARPing darüber informiert.


[1] http://www.debian.org
[2] http://www.apsis.ch/pound/
[3] http://www.backhand.org/wackamole/
[4] http://packages.debian.org/sid/pound
[5] http://packages.debian.org/sid/wackamole

Referenz(en)