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:

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:

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.

Quelle: vultr.com

Jetzt 200€ Guthaben sichern

Registrieren Sie sich jetzt in unserer ccloud³ und erhalten Sie 200€ Startguthaben für Ihr Projekt.

Das könnte Sie auch interessieren: