Was bedeutet eigentlich Hochverfügbarkeit und wie erreicht man diese?
Nehmen wir einmal eine zu Hause gehostete Webseite – meist hat man hier nicht die Ressourcen eines richtigen Rechenzentrums. Man nimmt einen Raspberry Pi, installiert darauf einen Webserver und schiebt seine Webseite auf diesen. Die Seite wird richtig gut und viele Menschen besuchen diese Webseite. Irgendwann erreicht auch ein Raspberry Pi seine Grenzen. Was kann man tun, damit die Webseite auch weiterhin schnell läuft? Fällt der Raspberry Pi aus, ist natürlich auch die Webseite nicht erreichbar – was kann man tun?
Nun, man könnte einen zweiten, oder auch dritten Pi nehmen und dieselbe Webseite darauf aufsetzen. Doch wie bringt man Besucher dazu, die Seite auf einem anderen Raspberry Pi zu besuchen – sie darum bitten? Nein, man nutzt einen Proxy – dieser verteilt erst einmal die Last auf die bestehenden Webseiten, fällt ein System aus verteilt der Proxy die Last auf die verbleibenden Systeme.
Sehen wir uns dies einmal in ein paar Grafiken an. In der ersten Grafik läuft nur ein System mit der Webseite:
Jetzt landen alle Besucher auf diesem einen Server – sind dies viele Besucher, wird die Seite natürlich dementsprechend langsamer. Fällt der Server aus, etwa wegen eines technischen Defekts, oder eines Updates – fällt natürlich auch die Webseite aus.
Jetzt haben Sie mehrere Server mit derselben Webseite – dies ist nichts anderes als ein Backup. Fällt der Server aus, den Ihre Leser besuchen – ist auch die Webseite weg. Sie müssten also am Router umkonfigurieren, dass die Besucher auf einen anderen Rechner weitergeleitet werden. Dies ist umständlich und die Webseite fällt trotzdem einige Zeit aus.
Wenn Sie nun einen Proxy dazwischen schalten – verteilt dieser nicht nur die Last auf die einzelnen Server, sondern fällt einer aus – laufen immer noch die anderen Systeme:
Fällt der Proxy-Server aus, hat sich natürlich auch diese Geschichte erledigt. Man könnte natürlich auch mehrere Proxy-Server nutzen. Wichtig ist einmal – ein Proxy-Server benötigt so gut wie keine Ressourcen, auch dies könnte also wieder ein Raspberry Pi erledigen.
Man könnte jetzt natürlich eine beliebige Proxy-Software nutzen, diese ist dann meist etwas umständlich zu konfigurieren. Für solche Zwecke nutzt man am einfachsten eine Proxy-Software, die speziell für solche Aufgaben geschaffen wurde. In diesem Fall die Software HAProxy.
Ein weiterer Vorteil von HAProxy – er kann nicht nur die Last auf verschiedene Systeme aufteilen, er kann auch ein einziges SSL-Zertifikat (https) auf beliebig viele Webseiten verteilen.
Inhaltsverzeichnis
HAProxy installieren
Unter auf Debian basierenden Linux-Distributionen fällt die Installation wie üblich sehr einfach aus, Sie installieren die Software ganz einfach über die Paket-Verwaltung durch das Paket „haproxy„.
HAProxy konfigurieren
Im idealen Fall haben Sie neben dem HAProxy auch einen DHCP-Server, über einen solchen werden wir in einem späteren Beitrag sprechen – aber zumindest statische IP-Adressen in Ihrem Netzwerk.
Die Konfigurationsdatei der Software findet sich im Systemverzeichnis unter „/etc/haproxy/haproxy.cfg„. Diese bearbeiten Sie natürlich als root auf dem Terminal – etwa mit Nano oder Vi(m):
nano /etc/haproxy/haproxy.cfg
vim /etc/haproxy/haproxy.cfg
Die Konfiguration für einen Server besteht unter HAProxy in drei Teilen. Der erste Teil – wir erstellen eine ACL – eine Access Control List. Nehmen wir einmal an, wir haben drei Rechner mit folgenden Hostnamen „rechner_1 rechner_2 rechner_3“ mit den jeweiligen Webseiten, und alle bieten die Webseite „linux.org„.
Wir erstellen für die Webseite eine ACL – also eine Zeile:
acl acl_host_linux hdr(host) -i linux.org
Wir geben als Erstes den Hostnamen der Webseite selbst an – also linux
, es folgt die komplette Domain linux.org
. Als Nächstes müssen wir die Einleitung für ein Backend erstellen. Dieses können wir benennen, wie wir wollen – sollte der Übersichtlichkeit halber natürlich etwas mit der Webseite zu tun haben – dahinter geben wir unsere erstellte ACL an:
use_backend be_linux if acl_host_linux
Jetzt wollen wir die Geschichte natürlich verstehen – wir haben eine ACL und wir haben die Einleitung eines Backends. Das Backend be_linux
soll genutzt werden, wenn die Webseite linux.org
aufgerufen wird. Jetzt erstellen wir das eigentliche Backend – in diesem werden alle unsere Rechner zusammengefasst:
backend be_linux
option httpchk
server rechner_1 linux.org:80 ssl verify none check
server rechner_2 linux.org:80 ssl verify none check
server rechner_3 linux.org:80 ssl verify none check
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
Was wir jetzt noch benötigen, um die Webseiten abzusichern – natürlich ein SSL-Zertifikat. Dieses geben wir unter dem Bereich frontend proxy-in
an – etwa:
frontend proxy-in
bind ip-adresse:443 ssl crt /etc/ssl/private/ssl.pem
Sowie unter:
listen fe-git-http-in
bind ip-adresse:443 ssl crt /etc/ssl/private/ssl.pem
Wichtig, nach dem Speichern der Datei – der Test der Konfiguration:
haproxy -c -f /etc/haproxy/haproxy.cfg
Dies ist natürlich nur eine Beispiel-Konfiguration und kann keinesfalls für alle Möglichkeiten genutzt werden. Die komplette Dokumentation zur Software finden Sie unter HAProxy – Dokumentation.
Noch keine Reaktion