Zurück zum Blog

Was ist ein Load Balancer? So funktioniert Lastverteilung

Was ist ein Load Balancer und wofür? Methoden der Lastverteilung, Health Checks, Sessions, Load Balancing mit Nginx, HAProxy und wann Sie einen brauchen.

Nodesty-Team5 Min. LesezeitServer
Der Schriftzug Load Balancer mit Upstream, Health checks und Failover auf dunklem Nodesty-Hintergrund

Ein Load Balancer ist ein System, das eingehende Anfragen auf mehrere Server verteilt. Die Besucher verbinden sich mit einer einzigen Adresse, und der Load Balancer leitet jede Anfrage an einen der dahinterliegenden Server weiter. So wird Traffic, den ein einzelner Server nicht bewältigen könnte, auf mehrere Server aufgeteilt, und fällt einer der Server aus, arbeiten die anderen weiter.

In diesem Artikel erklären wir, wie ein Load Balancer funktioniert, welche Methoden der Lastverteilung es gibt, was Health Checks und Session-Verwaltung sind, wie Sie mit Nginx ein einfaches Load Balancing einrichten und wann Sie einen Load Balancer brauchen.

Wofür ist ein Load Balancer gut?

  • Skalierung: Steigt der Traffic, erhöhen Sie die Kapazität, indem Sie neue Server hinzufügen (horizontale Skalierung), statt auf einen größeren Server zu wechseln (vertikale Skalierung).
  • Hochverfügbarkeit: Fällt ein Server aus oder wird er gewartet, leitet der Load Balancer den Traffic an die anderen Server weiter; die Besucher bemerken keine Unterbrechung.
  • Updates ohne Unterbrechung: Sie können die Server einzeln aus dem Betrieb nehmen und aktualisieren.
  • Ein einziger Einstiegspunkt: SSL-Zertifikat, Komprimierung und Sicherheitsregeln werden an einer einzigen Stelle verwaltet.

Wie gemessen wird, wie lange Ihr Dienst erreichbar ist, erklären wir in unserem Artikel Was ist Uptime?.

Methoden der Lastverteilung

MethodeWie sie funktioniertWann?
Round RobinSchickt die Anfragen der Reihe nach an jeden ServerServer sind gleich stark und Anfragen ähnlich
Gewichtetes Round RobinSchickt mehr Anfragen an stärkere ServerServer haben unterschiedliche Kapazitäten
Least ConnectionsWählt den Server mit den wenigsten aktiven VerbindungenAnfragen dauern sehr unterschiedlich lange
IP-HashSchickt dieselbe IP-Adresse immer an denselben ServerSessions müssen auf einem Server gehalten werden

Health Checks

Der Load Balancer prüft regelmäßig, ob die dahinterliegenden Server funktionieren. Antwortet ein Server nicht oder liefert er Fehler zurück, schickt der Load Balancer ihm keine Anfragen mehr und nimmt ihn wieder in Betrieb, sobald er sich erholt hat. Dadurch wird der Ausfall eines einzelnen Servers für die Besucher nicht als Fehler sichtbar. Wenn Sie in Ihrer Anwendung eine einfache Adresse /health einrichten, die auch die Datenbankverbindung prüft, werden die Health Checks aussagekräftiger.

Sessions und gemeinsame Daten

Stehen mehrere Server hinter dem Load Balancer, können aufeinanderfolgende Anfragen eines Nutzers bei unterschiedlichen Servern landen. Deshalb gilt:

  • Speichern Sie Sessions an einem gemeinsamen Ort. Liegen die Sessions im Arbeitsspeicher oder auf der Festplatte eines einzelnen Servers, ist der Nutzer abgemeldet, sobald er bei einem anderen Server landet. Die sauberste Lösung ist, die Sessions in einem gemeinsamen Speicher wie Redis abzulegen; Details finden Sie in unserem Artikel Was ist Redis?.
  • Teilen Sie hochgeladene Dateien. Dateien, die Nutzer hochladen, sollten in einem Speicher liegen, auf den alle Server zugreifen können, oder in einem Object Storage.
  • Die Datenbank gibt es meist nur einmal. Auch wenn die Anwendungsserver vervielfacht werden, verbinden sich alle mit derselben Datenbank. Machen Sie die Datenbank für die Server nur über ein privates Netzwerk erreichbar.

Ist das nicht möglich, können Sie mit IP-Hash oder Sticky Sessions denselben Nutzer immer an denselben Server leiten; das kann allerdings dazu führen, dass die Last ungleichmäßig verteilt wird.

Load Balancing mit Nginx

Nginx lässt sich nicht nur als Reverse Proxy nutzen, sondern arbeitet auch als einfacher und leistungsstarker Load Balancer. Die dahinterliegenden Server werden in einem upstream-Block definiert:

upstream app {
    least_conn;
    server 10.8.0.11:3000 max_fails=3 fail_timeout=30s;
    server 10.8.0.12:3000 max_fails=3 fail_timeout=30s;
    server 10.8.0.13:3000 backup;
}

server {
    listen 443 ssl;
    server_name ihredomain.de;

    location / {
        proxy_pass http://app;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
  • least_conn: Schickt die Anfragen an den Server mit den wenigsten aktiven Verbindungen. Entfernen Sie die Zeile, gilt Round Robin als Standardmethode.
  • max_fails und fail_timeout: Liefert ein Server innerhalb der angegebenen Zeit wiederholt Fehler, wird er für eine Weile aus dem Betrieb genommen.
  • backup: Ein Reserveserver, der nur genutzt wird, wenn alle anderen Server ausgefallen sind.

Die Grundkonfiguration von Nginx und SSL erklären wir in unserer Anleitung Nginx installieren. Statt die Ports der dahinterliegenden Server ins Internet zu öffnen, halten Sie sie in einem privaten Netzwerk, auf das nur der Load Balancer zugreifen kann; um die Server sicher miteinander zu verbinden, können Sie WireGuard verwenden.

HAProxy und andere Optionen

  • HAProxy: Ein Open-Source-Werkzeug, das sich ausschließlich auf Load Balancing und Proxying konzentriert und sich bei sehr hohem Traffic bewährt hat. Es bietet fortgeschrittene Health Checks und detaillierte Statistiken und kann auch auf TCP-Ebene Last verteilen.
  • DNS Round Robin: Mehrere A-Einträge für dieselbe Domain zu veröffentlichen, ist die einfachste Verteilungsmethode. DNS weiß jedoch nichts von einem ausgefallenen Server und kann weiterhin Besucher dorthin schicken; einen echten Load Balancer ersetzt das nicht.
  • Load Balancer von Cloud- und anderen Anbietern: Manche Anbieter bieten verwaltete Load-Balancer-Dienste an; Einrichtung und Redundanz liegen dann in der Verantwortung des Anbieters.

Den Load Balancer selbst absichern

Ein einzelner Load Balancer ist selbst ein Single Point of Failure: Fällt er aus, ist die Website nicht erreichbar, selbst wenn alle Server dahinter intakt sind. In kritischen Systemen werden zwei Load Balancer betrieben, und fällt einer aus, übernimmt der andere den Traffic. Informieren Sie sich vor dem Aufbau einer solchen Struktur über die Netzwerkmöglichkeiten Ihres Anbieters.

Wann brauchen Sie einen Load Balancer?

Die meisten Projekte brauchen keinen Load Balancer. Versuchen Sie zuerst Folgendes:

  1. Optimieren Sie Anwendung und Datenbank. Langsame Abfragen und fehlendes Caching lassen sich viel günstiger beheben, als Server hinzuzufügen; werfen Sie einen Blick auf unseren Artikel Server langsam?.
  2. Nutzen Sie Caching und ein CDN. Verlagern Sie statische Inhalte in ein CDN und wiederkehrende Abfragen in Redis.
  3. Wechseln Sie auf einen stärkeren Server. Vertikale Skalierung ist deutlich einfacher als horizontale.

Ein Load Balancer wird in diesen Fällen sinnvoll:

  • Die Ressourcen eines einzelnen Servers reichen selbst nach der Optimierung nicht für den Traffic aus.
  • Der Dienst darf beim Ausfall oder der Wartung eines Servers nicht unterbrochen werden.
  • Sie möchten neue Versionen Ihrer Anwendung ohne Unterbrechung veröffentlichen.

Nodesty Server für Load Balancing

Die Pakete AMD Ryzen 9 9950X vServer von Nodesty eignen sich mit ihrer hohen Single-Core-Leistung als Anwendungsserver, die Pakete AMD EPYC 7763 vServer mit viel RAM als Datenbank- und Cache-Server. Die Standorte Frankfurt und New York der 9950X-Pakete ermöglichen es Ihnen, Server in verschiedenen Regionen zu betreiben. Alle Pakete bieten NVMe-Speicher, DDoS-Schutz durch nShield und kostenlose tägliche Backups mit 7 Tagen Aufbewahrung. Bei virtuellen Servern unterliegen die Bandbreitennutzung und Reverse-Proxy-Anwendungen mit hohem Traffic unserer Fair-Use-Richtlinie; für Setups mit sehr hohem Traffic ziehen Sie unsere dedizierten Server in Betracht, deren Hardware vollständig Ihnen zur Verfügung steht.

Häufig gestellte Fragen

Braucht eine kleine Website einen Load Balancer?

In der Regel nicht. Mit einem einzigen leistungsstarken Server, Caching und einem CDN laufen die meisten Websites und Anwendungen problemlos. Ein Load Balancer wird sinnvoll, wenn die Ressourcen eines einzelnen Servers nicht mehr ausreichen oder der Dienst beim Ausfall eines Servers nicht unterbrochen werden darf.

Was ist der Unterschied zwischen einem Load Balancer und einem Reverse Proxy?

Ein Reverse Proxy leitet Anfragen an eine dahinterliegende Anwendung weiter; ein Load Balancer tut dasselbe, verteilt die Anfragen aber auf mehrere Server. Werkzeuge wie Nginx und HAProxy beherrschen beides; mit einem einzigen Backend arbeiten sie als Reverse Proxy, mit mehreren Backends als Load Balancer.

Wie bleiben Sessions über mehrere Server hinweg erhalten?

Werden die Sessions der Nutzer im Arbeitsspeicher oder auf der Festplatte eines einzelnen Servers gespeichert, geht die Session verloren, sobald ein anderer Server die Anfrage beantwortet. Um das zu verhindern, können Sie die Sessions in einem gemeinsamen Speicher wie Redis ablegen oder Sticky Sessions verwenden, die denselben Nutzer immer an denselben Server leiten.

Was passiert, wenn der Load Balancer selbst ausfällt?

Ein einzelner Load Balancer ist selbst ein Single Point of Failure. In kritischen Systemen werden zwei Load Balancer betrieben, und fällt einer aus, übernimmt der andere den Traffic. In einfacheren Setups sorgt auch die Veröffentlichung mehrerer Adressen über DNS für eine gewisse Redundanz.

Werden Load Balancer bei Gameservern eingesetzt?

Da eine Spielwelt in der Regel in einem einzigen Serverprozess läuft, wird klassisches Load Balancing bei Gameservern kaum eingesetzt. Proxys in Minecraft-Netzwerken (zum Beispiel Velocity) verteilen die Spieler auf verschiedene Unterserver und übernehmen damit eine ähnliche Rolle.

Sollte ich auch die Datenbank per Load Balancing verteilen?

Anwendungsserver lassen sich leicht vervielfachen, die Datenbank bleibt dagegen meist auf einem einzigen Primärserver, mit dem sich alle Anwendungsserver verbinden. Ist die Leselast sehr hoch, können Lesereplikate hinzugefügt werden; das ist allerdings deutlich aufwendiger, als Anwendungsserver zu vervielfachen.

Nodesty

Über den Autor

Nodesty-Team · Infrastruktur und Support

Das Nodesty-Team betreibt unsere Server, unser Netzwerk und unseren DDoS-Schutz im Alltag und beantwortet Support-Anfragen rund um die Uhr. Diese Ratgeber entstehen aus dieser Arbeit.

Verwandte Artikel

Starte deinen Server jetzt.

Erstellen, wachsen und skalieren Sie Ihre Projekte grenzenlos auf der Premium-Infrastruktur von Nodesty.

                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                             ············································                                                   
                                                ··································································································..........···························                                     
                                       ················..........................................................................................................................··············                             
                                  ·············.................::::::::::::::::::::::::::::::::::::::::::::::....................:::::::::::::::::::::::::::::::::::::::................···········                        
                             ············................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::............·········                     
                         ············.................:::::::::::::::::::::::::::::::::::::::::::::::::::------------::::::::::::::::::::::::::::::----------------:::::::::::::::::::::..........········                  
                    ············......................::::::::::::::::::::::::::::::::::::------------------------------------------------------------------------------------:::::::::::::.........········                
                ··········.............................................::::::::::::::::::-------------==========================================-----------------------------------:::::::::::........·······               
             ········..................:.....................................::::::::::--------=======+++++++++++++++++++++++++++++++++++++=========================------------------::::::::::.......·······              
           ······.........::::::::::::::::::::................................:::::::-----=====++++xxxxxx**************************xxxxxxxxx++++++++++++++===================------------::::::::.......·······             
          ·····.......:::::::::::::::::::::::::::.............................:::::----===+++xxx****%%%%&&&&&&#############&&&&&&&%%%%%*******xxxxxxxx++++++++++++++==============----------:::::::......······             
         ····......::::::::-------------:::::::::::..........................::::---===+++xx***%%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@####&&&&&%%%%*******xxxxxxxxx+++++++++++++===========--------::::::......·····             
        ····.....:::::::--------------------:::::::::.......................::::---===++xxx**%%&&&###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&%%%%%********xxxxxxxxxxx++++++++++++========------::::::.....······            
        ····.....:::::--------------------------::::::::....................::::---===++xx***%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&&%%%%%**********xxxxxxxxxxxxx+++++++++=======------:::::.....·····            
        ····....::::::-------=============---------:::::::::................:::::---===+++xx***%%%&&&#####@@@@@@@@@@@@@@@@@@@@@@@@@#####&&&&&%%%%%%*************xxxxxxxxxxxxxx+++++++++======-----:::::....·····            
         ····....:::::-------================---------:::::::::...............:::::----===++++xxx***%%%%&&&&&&#################&&&&&&%%%%%%%*******************xxxxxxxxxxxxxxxxx++++++++======----:::::....·····            
         ·····....:::::--------=================---------::::::::::..............:::::::-----====+++++xxxxxx**************************xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx++++++++=====-----::::....·····            
          ·····.....:::::--------=================----------:::::::::::.................:::::::::-------=============++++++++++++++++++++++++++++++++++++xxxxxxxxxxxxxxxxxxxxxxx++++++++======-----::::....·····            
            ·····.....:::::::----------===========-------------::::::::::::.........................::::::::::::::::::------------------=============+++++++++++++++++++++++++++++++++=======-----::::.....·····            
              ······......:::::::---------------------------------:::::::::::::........................................:::::::::::::::-----------============+++++++++++++++++++++========------:::::.....·····             
                 ······........:::::::::---------------------------:::::::::::::::::...........................................:::::::::::::------------=============================--------::::::.....······              
                    ·········.........:::::::::::::::-------------::::::::::::::::::::::::.......................................::::::::::::::::--------------------------------------::::::::......·······                
                          ··········............::::::::::::::::::::::::::::::::::::::::::::::::::................................::::::::::::::::::::::::::-------------:::::::::::::::.........········                   
                                  ············..................:::::::::::::::::::::::::::::::::::::::::::.........................:::::::::::::::::::::::::::::::::::::................···········                        
                                             ················.............................................................................................................·················                                 
                                                           ······················................................................................···························                                                
                                                                               ·········································································