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.
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.
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.
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.
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