HAProxy Load Balancer auf Ubuntu 20.04 installieren und einrichten
HAProxy, kurz für High Availability Proxy, ist ein quelloffenes Tool zur Lastverteilung, das HTTP-Anfragen effizient auf mehrere Backend-Systeme wie Webseiten, Anwendungen oder Datenbanken verteilt. Dank seiner Geschwindigkeit und Stabilität kommt HAProxy unter anderem bei großen Plattformen wie Twitter, GitHub und Amazon Web Services zum Einsatz.
Warum HAProxy in der heutigen vernetzten Welt unverzichtbar ist
Moderne Anwendungen – beispielsweise soziale Netzwerke – bedienen Millionen von Nutzern weltweit. Bereits kurze Ausfälle können finanzielle Verluste und unzufriedene Nutzer zur Folge haben. Um Ausfallsicherheit zu gewährleisten, empfiehlt sich eine Infrastruktur mit mehreren Instanzen und einem vorgelagerten Load Balancer, der Anfragen intelligent verteilt.
Zentrale Vorteile von HAProxy
HAProxy sorgt für unterbrechungsfreien Betrieb, indem es Fehler einzelner Komponenten automatisch abfängt. Dafür wird das System redundant ausgelegt – also mit mehrfach vorhandenen Diensten, die potenziell fehleranfällig oder wartungsbedürftig sind. Der Failover-Mechanismus prüft kontinuierlich Zustand und Leistung der Server im Cluster und leitet Anfragen nur an funktionierende Instanzen weiter. Damit erfüllt HAProxy alle Voraussetzungen für hohe Verfügbarkeit: Redundanz, automatisches Umschalten und Überwachung.
Ziel dieser Anleitung
In diesem Leitfaden lernst du, wie du HAProxy auf einem Ubuntu 20.04-System installierst und so konfigurierst, dass Webanfragen gleichmäßig auf zwei Backend-Server verteilt werden.
Voraussetzungen
Stelle vor dem Start sicher, dass folgende Bedingungen erfüllt sind:
- Drei Ubuntu 20.04-Server mit privatem Netzwerkzugang. Alle Server sollten sich im selben Rechenzentrum befinden.
- Ein Benutzerkonto mit
sudo
-Rechten.
Für diese Anleitung gilt folgendes Beispiel-Setup. Passe die Angaben entsprechend deiner Umgebung an:
- Hostname: main-server
Public IP: 192.0.2.10
Private IP: 10.0.0.10 - Hostname: server-1
Public IP: 192.0.2.11
Private IP: 10.0.0.11 - Hostname: server-2
Public IP: 192.0.2.12
Private IP: 10.0.0.12
Installiere Apache ausschließlich auf server-1
und server-2
. Vermeide die Installation auf main-server
, da sowohl Apache als auch HAProxy auf Port 80 lauschen und es dadurch zu Konflikten kommen würde.
Schritt 1: HAProxy auf dem Hauptserver installieren
Stelle zunächst per SSH eine Verbindung zum Hauptserver her und aktualisiere die Paketlisten:
$ sudo apt update
Anschließend installierst du HAProxy mit folgendem Befehl:
$ sudo apt install -y haproxy
Überprüfe, ob der HAProxy-Dienst aktiv ist:
$ sudo systemctl status haproxy
Folgende Zeile im Terminalauszug zeigt, dass HAProxy ordnungsgemäß läuft:
...
Active: active (running)
...
Um die installierte HAProxy-Version anzuzeigen, führe diesen Befehl aus:
$ haproxy -v
Die Ausgabe sollte in etwa so aussehen:
HA-Proxy version 2.0.13-2ubuntu0.2 2021/08/16 - https://haproxy.org/
Nach erfolgreicher Installation kannst du mit der Konfiguration von HAProxy beginnen, um den Datenverkehr zwischen den Backend-Servern zu verteilen.
Schritt 2: Die HAProxy-Konfigurationsdatei einrichten
Die zentrale Konfigurationsdatei von HAProxy liegt unter folgendem Pfad:
/etc/haproxy/haproxy.cfg
Bevor Änderungen vorgenommen werden, solltest du die bestehende Konfiguration sichern. Nutze dafür den cp
-Befehl:
$ sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bk
Anschließend öffnest du die Konfigurationsdatei mit dem Editor nano
:
$ sudo nano /etc/haproxy/haproxy.cfg
In dieser Datei befinden sich mehrere Abschnitte mit verschiedenen Aufgabenbereichen:
global
Der obere Bereich enthält globale Einstellungen zur Sicherheit und Performance. Belasse die Voreinstellungen wie sie sind. Ein typischer Abschnitt könnte so aussehen:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
...
defaults
In diesem Abschnitt befinden sich oft verwendete Voreinstellungen – darunter Fehlerseiten und Timeout-Werte. Auch hier sind keine Änderungen notwendig:
defaults
log global
mode http
...
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
...
errorfile 408 /etc/haproxy/errors/408.http
frontend und backend
Diese Bereiche regeln den Datenverkehr. In der frontend
-Sektion legst du fest, dass HAProxy auf Port 80 lauscht und die Anfragen an die backend
-Gruppe web_servers
weiterleitet. Im Backend definierst du, wie die Lastverteilung zwischen zwei Servern erfolgt – entweder per roundrobin
oder leastconn
. Ersetze die IP-Adressen mit den korrekten Werten deiner Umgebung. Mit dem Zusatz check
werden die Server auf Erreichbarkeit geprüft.
frontend example_front_end
bind *:80
option forwardfor
default_backend web_servers
backend web_servers
balance roundrobin
server server-1 10.0.0.11:8080 check
server server-2 10.0.0.12:8080 check
listen
Optional kannst du einen listen
-Abschnitt hinzufügen, um Metriken zur Serverleistung bereitzustellen. Diese sind über den Browser zugänglich. Ersetze ha_proxy_admin
und EXAMPLE_PASSWORD
durch eigene Zugangsdaten:
listen stats
bind :32600
stats enable
stats uri /
stats hide-version
stats auth ha_proxy_admin:EXAMPLE_PASSWORD
Speichere und schließe die Datei. Falls auf dem main-server
Apache installiert ist, kann es zu Portkonflikten mit HAProxy kommen. Stoppe den Apache-Dienst in diesem Fall mit:
$ sudo systemctl stop apache2
Starte anschließend den HAProxy-Dienst neu, damit die neuen Einstellungen aktiv werden:
$ sudo systemctl restart haproxy
HAProxy ist nun einsatzbereit und kann HTTP-Anfragen an die vorgesehenen Backend-Server weiterleiten.
Schritt 3: Apache auf den Backend-Servern auf Port 8080 umstellen
Standardmäßig lauscht Apache auf Port 80. Da HAProxy den Datenverkehr auf Port 8080 weiterleitet, musst du diese Einstellung auf server-1
und server-2
ändern.
Öffne auf jedem Backend-Server die Datei ports.conf
:
$ sudo nano /etc/apache2/ports.conf
Suche nach folgender Zeile:
Listen 80
Und ändere sie zu:
Listen 8080
Öffne danach auf beiden Servern die Konfigurationsdatei für den Standard-VirtualHost:
$ sudo nano /etc/apache2/sites-available/000-default.conf
Suche nach:
<VirtualHost *:80>
Und ändere es in:
<VirtualHost *:8080>
Speichere die Änderungen und starte Apache auf beiden Servern neu:
$ sudo systemctl restart apache2
Apache lauscht nun auf Port 8080 und ist bereit, Anfragen von HAProxy zu empfangen.
Schritt 4: Webseiten auf den Backend-Servern erstellen
Wenn Nutzer deine Anwendung aufrufen, landen sie beim HAProxy auf dem Hauptserver. Dieser verteilt die Anfragen gleichmäßig auf die Backend-Systeme. Daher legst du nun einfache Webseiten auf server-1
und server-2
an.
Auf server-1: Entferne zuerst die Standard-Index-Datei:
$ sudo rm /var/www/html/index.html
Auf server-2: Wiederhole den Befehl auch dort:
$ sudo rm /var/www/html/index.html
Erstelle nun auf server-1
eine neue HTML-Datei:
$ sudo nano /var/www/html/index.html
Füge folgenden Inhalt ein:
<html>
<head>
<title>Backend Server 1</title>
</head>
<body>
<h1>Server 1 is working.</h1>
</body>
</html>
Wiederhole den Vorgang auf server-2
:
$ sudo nano /var/www/html/index.html
Füge diesen HTML-Code ein:
<html>
<head>
<title>Backend Server 2</title>
</head>
<body>
<h1>Server 2 is working.</h1>
</body>
</html>
Jetzt sind auf beiden Servern unterschiedliche Inhalte eingerichtet. Im nächsten Schritt überprüfst du, ob HAProxy die Lastverteilung korrekt durchführt.
Schritt 5: HAProxy Lastverteilung testen
Öffne einen Browser und rufe die öffentliche IP-Adresse deines Hauptservers auf:
Beispiel: http://192.0.2.10
Zunächst solltest du die Seite von server-1
sehen:
Server 1
Nach dem Neuladen sollte die Antwort von server-2
erscheinen:
Server 2
Um die Live-Statistiken zu prüfen, rufe die folgende URL auf:
Beispiel: http://192.0.2.10:32600
Logge dich mit den in der Konfiguration hinterlegten Zugangsdaten ein (z. B. ha_proxy_admin
/ EXAMPLE_PASSWORD
):
...
listen stats
...
stats auth ha_proxy_admin:EXAMPLE_PASSWORD
...
Nach dem Login erhältst du eine Übersicht mit vielen Leistungskennzahlen zur HAProxy-Konfiguration.
Zusammenfassung
HAProxy läuft jetzt erfolgreich und verteilt HTTP-Anfragen vom Hauptserver auf zwei Backend-Server. In diesem Beispiel wurde bewusst unterschiedlicher HTML-Inhalt verwendet, um die Lastverteilung sichtbar zu machen. In produktiven Umgebungen sollten die Backend-Inhalte allerdings synchronisiert sein – z. B. durch eine MySQL-Clusterreplikation – um bei Ausfällen konsistente Daten bereitzustellen.
Fazit
In dieser Anleitung hast du HAProxy auf Ubuntu 20.04 installiert und konfiguriert, um HTTP-Traffic auf zwei Backend-Systeme zu verteilen. Diese Architektur lässt sich je nach Lastsituation erweitern. Durch den Einsatz von HAProxy wird verhindert, dass einzelne Server unter hoher Last zusammenbrechen, was eine stabile und skalierbare Anwendung ermöglicht.