GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Webserver-Load-Balancing mit HAProxy auf Ubuntu 14.04

Was ist HAProxy?

HAProxy (High Availability Proxy) ist ein Open-Source-Load-Balancer, der jeden TCP-Dienst laden kann. HAProxy ist eine kostenlose, sehr schnelle und zuverlässige Lösung, die Lastenausgleich, Hochverfügbarkeit und Proxying für TCP- und HTTP-basierte Anwendungen bietet. Es eignet sich besonders gut für Websites mit sehr hohem Datenverkehr und betreibt viele der meistbesuchten der Welt.

Seit seiner Existenz ist es der De-facto-Standard für Open-Source-Load-Balancer geworden. Es wirbt zwar nicht für sich selbst, ist aber weit verbreitet. Unten ist ein grundlegendes Diagramm, wie das Setup aussieht:

Installation von HAProxy

Ich verwende Ubuntu 14.04 und installiere es per:

apt-get install haproxy

Sie können die Version folgendermaßen überprüfen:

haproxy -v


Wir müssen HAProxy aktivieren, damit es durch das Init-Skript /etc/default/haproxy gestartet werden kann. Setzen Sie die Option ENABLED auf 1 als:

ENABLED=1

Um zu überprüfen, ob diese Änderung korrekt durchgeführt wurde, führen Sie das Init-Skript von HAProxy ohne Parameter aus. Sie sollten Folgendes sehen:

$ service haproxy <press_tab_key>
reload   restart  start    status   stop

HAProxy ist jetzt installiert. Lassen Sie uns nun ein Setup erstellen, in dem wir 2 (zwei) Apache Web Server-Instanzen und 1 (eine) HAProxy-Instanz haben. Nachfolgend finden Sie die Einrichtungsinformationen:

Wir werden drei Systeme verwenden, die virtuell durch VirtualBox erzeugt werden:

Instanz 1 – Load Balancer

Hostname:haproxy
Betriebssystem:Ubuntu
Private IP:192.168.205.15

Instanz 2 – Webserver 1

Hostname:webser01
Betriebssystem:Ubuntu mit LAMP
Private IP:192.168.205.16

Instanz 2 – Webserver 2

Hostname:webserver02
Betriebssystem:Ubuntu mit LAMP
Private IP:192.168.205.17

Hier ist das Diagramm, wie das Setup aussieht:

Lassen Sie uns nun HAProxy konfigurieren.

Konfigurieren von HAProxy

Sichern Sie die Originaldatei, indem Sie sie umbenennen:

mv /etc/haproxy/haproxy.cfg{,.original}

Wir erstellen unsere eigene haproxy.cfg-Datei. Erstellen Sie mit Ihrem bevorzugten Texteditor die Datei /etc/haproxy/haproxy.cfg als:

global
        log /dev/log   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout     5000
        clitimeout     50000
        srvtimeout     50000

listen webfarm 0.0.0.0:80
    mode http
    stats enable
    stats uri /haproxy?stats
    balance roundrobin
    option httpclose
    option forwardfor
    server webserver01 192.168.205.16:80 check
    server webserver02 192.168.205.17:80 check

Erklärung:

global
        log /dev/log   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon

Die log-Direktive erwähnt einen Syslog-Server, an den Log-Meldungen gesendet werden.
Die maxconn-Direktive gibt die Anzahl gleichzeitiger Verbindungen auf dem Frontend an. Der Standardwert ist 2000 und sollte entsprechend der Konfiguration Ihres Systems angepasst werden.
Die Benutzer- und Gruppendirektiven ändern den HAProxy-Prozess auf den angegebenen Benutzer/die angegebene Gruppe. Diese sollten nicht geändert werden.

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout     5000
        clitimeout     50000
        srvtimeout     50000

Der obige Abschnitt enthält die Standardwerte. Die Option Redispatch ermöglicht die Sitzungsumverteilung bei Verbindungsabbrüchen. Die Session-Stickness wird also außer Kraft gesetzt, wenn eine Webserverinstanz ausfällt.
Die Anweisung retries legt die Anzahl der Wiederholungen fest, die auf einer Webserverinstanz nach einem Verbindungsfehler durchgeführt werden sollen.
Die zu ändernden Werte sind die verschiedenen Timeout-Direktiven. Die Option contimeout gibt die maximale Zeit an, die auf einen erfolgreichen Verbindungsversuch zu einer Webserverinstanz gewartet werden soll.
Clitimeout und srvtimeout gelten, wenn erwartet wird, dass der Client oder Server während des TCP-Prozesses Daten bestätigt oder sendet. HAProxy empfiehlt, die Client- und Server-Timeouts auf denselben Wert einzustellen.


listen webfarm 0.0.0.0:80 mode http stats enable stats uri /haproxy?stats balance roundrobin option httpclose option forwardfor server webserver01 192.168.205.16:80 check server webserver02 192.168.205.17:80 check

Der obige Block enthält Konfigurationen sowohl für das Frontend als auch für das Backend. Wir konfigurieren HAProxy so, dass es auf Port 80 nach Webfarm lauscht, was nur ein Name zur Identifizierung einer Anwendung ist.
Die stats-Direktiven aktivieren die Seite mit den Verbindungsstatistiken. Diese Seite kann mit der in stats uri genannten URL angezeigt werden, in diesem Fall also http://192.168.205.15/haproxy?stats eine Demo dieser Seite kann hier angezeigt werden.
Die balance-Anweisung spezifiziert den Lastenausgleich Algorithmus zu verwenden. Verfügbare Algorithmusoptionen sind:

  • Round Robin (Roundrobin),
  • Statischer Round Robin (statisch-rr),
  • Geringste Verbindungen (leastconn),
  • Quelle (Quelle),
  • URI (uri) und
  • URL-Parameter (url_param).

Informationen zu jedem Algorithmus können der offiziellen Dokumentation entnommen werden.

Die server-Direktive deklariert einen Backend-Server, die Syntax ist:

server <server_name> <server_address>[:port] [param*]
    

Der Name, den wir hier erwähnen, wird in Protokollen und Warnungen angezeigt. Es gibt einige weitere Parameter, die von dieser Anweisung unterstützt werden, und wir verwenden in diesem Artikel den Prüfparameter. Die Check-Option aktiviert Zustandsprüfungen auf der Webserver-Instanz, andernfalls wird die Webserver-Instanz ?immer als verfügbar betrachtet.

Sobald Sie mit der Konfiguration fertig sind, starten Sie den HAProxy-Dienst:

sudo service haproxy start

Testen von Load-Balancing und Failover

Wir werden den Servernamen sowohl in der Standarddatei index.html anhängen, die sich standardmäßig unter /var/www/index.html

befindet

Fügen Sie auf Instanz 2 – Webserver 1 (webserver01 mit IP-192.168.205.16) die folgende Zeile an:

sudo sh -c "echo \<h1\>Hostname: webserver01 \(192.168.205.16\)\<\/h1\> >> /var/www/index.html"

Fügen Sie auf Instanz 3 – Webserver 2 (webserver02 mit IP-192.168.205.17) die folgende Zeile an:

sudo sh -c "echo \<h1\>Hostname: webserver02 \(192.168.205.17\)\<\/h1\> >> /var/www/index.html"

Öffnen Sie nun den Webbrowser auf dem lokalen Computer und durchsuchen Sie die Haproxy-IP, dh http://192.168.205.15

Jedes Mal, wenn Sie die Registerkarte aktualisieren, sehen Sie, dass die Last auf jeden Webserver verteilt wird. Unten ist ein Screenshot meines Browsers:

Wenn ich zum ersten Mal http://192.168.205.15 besuche, erhalte ich:

Und zum zweiten Mal, d.h. wenn ich die Seite aktualisiere, bekomme ich:

Sie können die Haproxy-Statistiken auch überprüfen, indem Sie http://192.168.205.15/haproxy?stats

besuchen

Es gibt noch mehr, was Sie mit diesem Setup tun können. Einige Ideen beinhalten:

  • Schalten Sie einen oder beide Webserver offline, um zu testen, was passiert, wenn Sie auf HAProxy zugreifen
  • Konfigurieren Sie HAProxy, um eine benutzerdefinierte Wartungsseite bereitzustellen
  • Konfigurieren Sie die Webschnittstelle, damit Sie die HAProxy-Statistiken visuell überwachen können
  • Ändern Sie den Planer auf etwas anderes als Round-Robin
  • Priorisierung/Gewichtung für bestimmte Server konfigurieren

Das ist alles!


Ubuntu
  1. Ersteinrichtung des Servers mit Ubuntu 14.04

  2. So konfigurieren Sie HAProxy auf Debian 9 / Ubuntu 16.04 Server

  3. So installieren Sie den Cherokee-Webserver mit PHP5 und MySQL unter Ubuntu 11.04

  4. Installieren Sie den Apache-Webserver auf Ubuntu 12.10

  5. Ubuntu-Webserver einrichten?

So installieren Sie den Apache-Webserver unter Ubuntu 18.04

So installieren Sie Jetty Web Server unter Ubuntu 14.04

So installieren Sie den Cherokee-Webserver unter Ubuntu 14.04

So installieren Sie den Hiawatha-Webserver unter Ubuntu 14.04

So installieren Sie den Hiawatha-Webserver unter Ubuntu 16.04

Webserver auf Ubuntu 16.04??