HAProxy oder High Availability Proxy ist eine Open-Source-TCP- und HTTP-Load-Balancer- und Proxy-Server-Software. HAProxy wurde von Willy Tarreau in C geschrieben, es unterstützt SSL, Komprimierungen, Keep-Alive, benutzerdefinierte Protokollformate und Überschreiben von Headern. HAProxy ist ein schneller und leichter Proxy-Server und Load Balancer mit geringem Speicherbedarf und geringer CPU-Auslastung. Es wird von großen Websites wie Github, StackOverflow, Reddit, Tumblr, Twitter und anderen verwendet. Es hat sich in den letzten Jahren zum beliebtesten Software-Load-Balancer und Proxy-Server entwickelt.
In diesem Tutorial werden Sie die Installation und Konfiguration von HAProxy auf RHEL 8 / CentOS 8 durchlaufen. Wir werden HAProxy auf einem einzelnen Server installieren und dann den Nginx-Webserver auf den anderen Servern installieren. HAProxy fungiert als Load Balancer für die Nginx-Webserver.
In diesem Tutorial lernen Sie:
- HAProxy-Architektur und -Konzepte
- Konfigurieren Sie die Hosts-Datei für die Namensauflösung
- HAProxy installieren und konfigurieren
- Nginx installieren und konfigurieren
- Testen der Load-Balancing-Funktion
- Greifen Sie auf die HAProxy-Statistik-URL zu

Softwareanforderungen und verwendete Konventionen
Kategorie | Anforderungen, Konventionen oder verwendete Softwareversion |
---|---|
System | RHEL 8 / CentOS 8 |
Software | HAProxy, Nginx |
Andere | Privilegierter Zugriff auf Ihr Linux-System als root oder über sudo Befehl. |
Konventionen | # – erfordert, dass bestimmte Linux-Befehle mit Root-Rechten ausgeführt werden, entweder direkt als Root-Benutzer oder durch Verwendung von sudo Befehl$ – erfordert, dass bestimmte Linux-Befehle als normaler, nicht privilegierter Benutzer ausgeführt werden |
HAProxy-Architektur und -Konzepte
HAProxy kann in zwei Modi ausgeführt werden:TCP-Modus Layer 4 und HTTP-Modus Layer 7. Im Layer-4-TCP-Modus leitet HAProxy die RAW-TCP-Pakete vom Client an die Anwendungsserver weiter. Im Layer-7-HTTP-Modus analysiert HAProxy den HTTP-Header, bevor er sie an die Anwendungsserver weiterleitet. In diesem Tutorial verwenden wir Nginx als Webserver, der den Layer-7-HTTP-Modus unterstützt.


Ausgleichsalgorithmus ist der Algorithmus, der von HAProxy verwendet wird, um den Server beim Lastausgleich auszuwählen. Die folgenden Modi sind verfügbar:
Roundrobin
Dies ist der einfachste Ausgleichsalgorithmus. Jede neue Verbindung wird vom nächsten Backend-Server verarbeitet. Wenn der letzte Backend-Server in der Liste erreicht ist, beginnt er wieder am Anfang der Backend-Liste.
Leastconn
Die neue Verbindung wird vom Back-End-Server mit der geringsten Anzahl von Verbindungen verarbeitet. Dies ist nützlich, wenn Zeit und Last der Anfragen stark variieren.
Quelle
Dies gilt für Sticky-Sessions, die Client-IP wird gehasht, um den Backend-Server zu ermitteln, der die letzte Anfrage von dieser IP erhalten hat. Eine IP A wird also immer von backend1 verarbeitet und IP B wird immer von banckend2 verarbeitet, um Sitzungen nicht zu unterbrechen.
Hosts-Datei für Namensauflösung konfigurieren
Melden Sie sich beim Load Balancer-Server an und bearbeiten Sie die Datei /etc/hosts
Datei und HAProxy-Loadbalancer, nginx1-, nginx2-Hostnamen. Kopieren Sie dieselbe Datei auf zwei andere Nginx-Knoten und überprüfen Sie die Netzwerkverbindung über den Befehl ping.
# vim /etc/hosts
192.168.1.108 loadbalancer.example.com
192.168.1.104 nginx1.example.com
192.168.1.105 nginx2.example.com
HAProxy installieren und konfigurieren
HAProxy ist im RHEL 8 / CentOS 8-Repository verfügbar, melden Sie sich also beim Loadbalancer-Server an und installieren Sie das Paket HAProxy mit diesem yum-Befehl.
# yum install haproxy
Nach erfolgreicher Installation können Sie den folgenden Befehl verwenden, um die Installation zu überprüfen.
# yum info haproxy
# yum info haproxy Updating Subscription Management repositories. Updating Subscription Management repositories. Last metadata expiration check: 0:06:03 ago on Sat 16 Mar 2019 11:40:24 PM +04. Installed Packages Name : haproxy Version : 1.8.14 Release : 1.el8 Arch : x86_64 Size : 4.1 M Source : haproxy-1.8.14-1.el8.src.rpm Repo : @System From repo : rhel-8-for-x86_64-appstream-beta-rpms Summary : HAProxy reverse proxy for high availability environments URL : http://www.haproxy.org/ License : GPLv2+ Description : HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high : availability environments. Indeed, it can: : - route HTTP requests depending on statically assigned cookies : - spread load among several servers while assuring server persistence : through the use of HTTP cookies : - switch to backup servers in the event a main one fails : - accept connections to special ports dedicated to service monitoring : - stop accepting connections without breaking existing ones : - add, modify, and delete HTTP headers in both directions : - block requests matching particular patterns : - report detailed status to authenticated users from a URI : intercepted from the application
Wenn die Installation abgeschlossen ist, gehen Sie zu /etc/haproxy/
Verzeichnis und sichern Sie die ursprüngliche Konfigurationsdatei.
# cd /etc/haproxy/ # cp haproxy.cfg haproxy.cfg.orig
Nehmen Sie als Nächstes die folgenden Änderungen in der HAProxy-Konfigurationsdatei haproxy.cfg
vor mit einem der Herausgeber.
#--------------------------------------------------------------------- # Example configuration for a possible web application. See the # full configuration options online. # # https://www.haproxy.org/download/1.8/doc/configuration.txt # #--------------------------------------------------------------------- #--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global # to have these messages end up in /var/log/haproxy.log you will # need to: # # 1) configure syslog to accept network log events. This is done # by adding the '-r' option to the SYSLOGD_OPTIONS in # /etc/sysconfig/syslog # # 2) configure local2 events to go to the /var/log/haproxy.log # file. A line like the following can be added to # /etc/sysconfig/syslog # # local2.* /var/log/haproxy.log # log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon # turn on stats unix socket stats socket /var/lib/haproxy/stats # utilize system-wide crypto-policies ssl-default-bind-ciphers PROFILE=SYSTEM ssl-default-server-ciphers PROFILE=SYSTEM #--------------------------------------------------------------------- # common defaults that all the 'listen' and 'backend' sections will # use if not designated in their block #--------------------------------------------------------------------- defaults mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 #--------------------------------------------------------------------- # HAProxy Monitoring Config #--------------------------------------------------------------------- listen stats bind loadbalancer.example.com:8080 # HAProxy Monitoring run on port 8080 mode http option forwardfor option httpclose stats enable stats show-legends stats refresh 5s stats uri /stats # URL for HAProxy monitoring stats realm Haproxy\ Statistics stats auth admin:admin # User and Password for login to the monitoring dashboard #stats admin if TRUE default_backend loadbalancer # This is optionally for monitoring backend #--------------------------------------------------------------------- # main frontend which proxys to the backends #--------------------------------------------------------------------- frontend loadbalancer bind loadbalancer.example.com:80 #acl url_static path_beg -i /static /images /javascript /stylesheets #acl url_static path_end -i .jpg .gif .png .css .js #use_backend static if url_static option http-server-close option forwardfor default_backend loadbalancer #--------------------------------------------------------------------- # static backend for serving up images, stylesheets and such #--------------------------------------------------------------------- #backend static # balance roundrobin # server static 127.0.0.1:4331 check #--------------------------------------------------------------------- # round robin balancing between the various backends #--------------------------------------------------------------------- backend loadbalancer balance roundrobin # Balance algorithm option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost # Check the server application is up and healty - 200 status code server nginx1.example.com 192.168.1.104:80 check # NGINX Server1 server nginx2.example.com 192.168.1.105:80 check # NGNIX Server2
Speichern Sie diese Konfigurationsdatei und beenden Sie.
Jetzt werden wir den rsyslog-Daemon konfigurieren, um die HAProxy-Statistiken zu protokollieren. Bearbeiten Sie die rsyslog.conf
Datei, damit der UDP-Port 514 von rsyslog verwendet werden kann. Öffnen Sie die rsyslog-Konfigurationsdatei und kommentieren Sie die Zeilen aus, um die UDP-Verbindung zu aktivieren.
# vim /etc/rsyslog.conf
module(load="imudp") # needs to be done just once input(type="imudp" port="514")
Speichern Sie die Datei mit den obigen Änderungen und beenden Sie sie. Erstellen Sie dann eine neue HAProxy-Konfigurationsdatei für rsyslog und fügen Sie die folgenden Einträge in diese Datei ein.
# cd /etc/rsyslog.d/ # vi haproxy.conf
local2.=info /var/log/haproxy-access.log # For Access Log local2.notice /var/log/haproxy-info.log # For Service Info - Backend, loadbalancer
Starten Sie nun rsyslog neu und starten Sie dann den HAProxy-Dienst und fügen Sie HAProxy hinzu, um beim Booten zu starten.
# systemctl restart rsyslog # systemctl start haproxy # systemctl enable haproxy
Nginx installieren und konfigurieren
Nginx ist bereits Bestandteil des bestehenden RHEL 8 / CentOS 8 Repos und kann mit folgendem Befehl installiert werden.
# yum install nginx
Nach der Installation können Sie die Installation mit Hilfe dieses Befehls überprüfen.
# yum info nginx
# yum info nginx Updating Subscription Management repositories. Updating Subscription Management repositories. Last metadata expiration check: 0:06:14 ago on Sat 16 Mar 2019 11:40:24 PM +04. Installed Packages Name : nginx Epoch : 1 Version : 1.14.0 Release : 3.el8+1631+ba902cf0 Arch : x86_64 Size : 568 k Source : nginx-1.14.0-3.el8+1631+ba902cf0.src.rpm Repo : rhel-8-for-x86_64-appstream-beta-rpms Summary : A high performance web server and reverse proxy server URL : http://nginx.org/ License : BSD Description : Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and : IMAP protocols, with a strong focus on high concurrency, performance and low : memory usage.
Sobald Nginx installiert ist, gehen Sie in das Webverzeichnis und ändern Sie die index.html
Datei entsprechend. Stellen Sie sicher, dass Sie die folgenden Schritte auf den Servern nginx1 und nginx2 ausführen.
# cd /usr/share/nginx/html # ls -lrth total 20K -rw-r--r--. 1 root root 2.8K Oct 31 2016 poweredby.png -rw-r--r--. 1 root root 368 Oct 31 2016 nginx-logo.png -rw-r--r--. 1 root root 3.7K Mar 16 20:39 50x.html -rw-r--r--. 1 root root 3.6K Mar 16 20:39 404.html -rw-r--r--. 1 root root 3.7K Mar 16 20:42 index.html
Fügen Sie als Nächstes Nginx hinzu, um beim Booten zu starten, und starten Sie dann den Daemon mit den folgenden Befehlen.
# systemctl enable nginx # systemctl start nginx
Testen der Load-Balancing-Funktion
Das Testen kann durch Durchsuchen und Zugreifen auf die Loadbalancer-IP 192.168.1.108 (für meinen Fall) durchgeführt werden, und Sie werden sehen, dass sie einmal an den Nginx-Knoten 1 und das zweite Mal an Nginx-Knoten 2 im Round-Robin-Verfahren geht.


Sie können auch die /var/log/haproxy-access.log
überprüfen um detaillierte Informationen über den Lastenausgleich zu erhalten.
Zugriff auf die HAProxy-Statistik-URL
Greifen Sie auf das Dashboard für den HAProxy Statistical Report zu, der auf Port 8080 ausgeführt wird, mit Benutzername und Passwort, die in haproxy.cfg
definiert sind Datei.
http://192.168.1.108:8080/stats


HAProxy funktioniert erfolgreich und fungiert als Load Balancer für die beiden Nginx-Webserver.
Schlussfolgerung
HAProxy oder High Availability Proxy ist eine Open-Source-Software, die Hochverfügbarkeit für TCP-basierte Dienste bietet und als HTTP-Load-Balancer und Proxy-Server fungiert. Die Software ist in C geschrieben und unterstützt SSL, Keep-Alive und Komprimierung. HAProxy ist die richtige Wahl für alle, die einen schnellen und leichten Load Balancer und Proxy-Server mit geringem Speicherbedarf und geringer CPU-Auslastung benötigen. Haproxy kann im Layer-4-TCP-Modus und im Layer-7-HTTP-Modus ausgeführt werden. Nginx unterstützt nur den Layer-7-HTTP-Modus mit HAProxy. Wenn Sie den Layer-4-TCP-Modus verwenden möchten, können Sie andere Webserver wie Apache verwenden. Unter RHEL 8 / CentOS 8 Linux ist HAProxy im Standard-Repository verfügbar. Es ist einfach zu installieren und zu konfigurieren.