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 werde ich Sie durch die Installation und Konfiguration von HAProxy für 3 Server, einen Load Balancer und zwei Nginx-Webserver führen. 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.
Basiskonzept mit HAProxy
Schicht 4 und Schicht 7
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 nur den Layer-7-HTTP-Modus unterstützt.
Balance-Algorithmus
Dies ist der Algorithmus, der von HAProxy verwendet wird, um den Server beim Lastenausgleich 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.
Lastconn
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
Es gibt andere Algorithmen – Einzelheiten finden Sie auf der offiziellen HAProxy-Website.
Voraussetzungen
- 3 CentOS 7
Loadbalancer
192.168.1.102
nginx1
192.168.1.104
nginx2
192.168.1.105
- Root-Rechte auf allen 3 Servern.
Schritt 1 - Konfigurieren Sie die /etc/hosts-Dateien
Melden Sie sich beim Load-Balancer-Server an und bearbeiten Sie die Datei /etc/hosts.
ssh [email protected]
sudo su
vi /etc/hosts
nginx1- und nginx2-Hostnamen hinzufügen:
192.168.1.104 nginx1.loadbalancer.me nginx1
192.168.1.105 nginx2.loadbalancer.me nginx2
Speichern Sie die Datei und verlassen Sie den Editor.
Bearbeiten Sie als Nächstes die Hosts-Datei auf den Nginx-Servern (nginx1 und nginx2):
ssh [email protected]
ssh [email protected]
Bearbeiten und fügen Sie eine neue Zeile für den Load Balancer in den Hosts-Dateien hinzu:
vi /etc/host
Fügen Sie den Loadbalancer-Hostnamen auf jedem Nginx-Server hinzu:
192.168.1.102 loadbalancer
tun Sie dies auf den Servern nginx1 und nginx2.
Schritt 2 – HAProxy installieren und konfigurieren
HAProxy ist im CentOS 7-Repository verfügbar, melden Sie sich beim Loadbalancer-Server an und aktualisieren Sie die Paketlisten:
ssh [email protected]
yum -y update
Installieren Sie nun HAProxy mit diesem Yum-Befehl:
yum -y install haproxy
Wenn die Installation abgeschlossen ist, gehen Sie in das Verzeichnis "/etc/haproxy/" und sichern Sie die ursprüngliche Konfigurationsdatei:
cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg.orig
Als nächstes fügen Sie mit dem vi-Editor eine neue HAProxy-Konfigurationsdatei „haproxy.cfg“ hinzu:
vi haproxy.cfg
Fügen Sie die Konfiguration unten ein:
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2 #Log configuration
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy #Haproxy running under user and group "haproxy"
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# 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 haproxy3-monitoring *: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 howtoforge:howtoforge #User and Password for login to the monitoring dashboard
stats admin if TRUE
default_backend app-main #This is optionally for monitoring backend
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend main
bind *:80
option http-server-close
option forwardfor
default_backend app-main
#---------------------------------------------------------------------
# BackEnd roundrobin as balance algorithm
#---------------------------------------------------------------------
backend app-main
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 192.168.1.104:80 check #Nginx1
server nginx2 192.168.1.105:80 check #Nginx2
Speichern Sie die Konfigurationsdatei und beenden Sie.
Als nächstes konfigurieren Sie rsyslog für HAProxy.
Wir werden den rsyslog-Daemon konfigurieren, um die HAProxy-Statistiken zu protokollieren. Bearbeiten Sie die Datei rsyslog.conf, damit der UDP-Port 514 von rsyslog verwendet werden kann.
vi /etc/rsyslog.conf
Kommentieren Sie diese Zeile aus, um die UDP-Verbindung zu aktivieren:
$ModLoad imudp
$UDPServerRun 514
Wenn Sie eine bestimmte IP verwenden möchten, können Sie eine neue Zeile wie die folgende hinzufügen:
$UDPServerAddress 127.0.0.1
Speichern Sie die Datei und beenden Sie sie.
Erstellen Sie dann eine neue Haproxy-Konfigurationsdatei für rsyslog:
cd /etc/rsyslog.d/
vi haproxy.conf
Konfiguration unten einfügen:
local2.=info /var/log/haproxy-access.log #For Access Log
local2.notice /var/log/haproxy-info.log #For Service Info - Backend, loadbalancer
Speichern und beenden.
Starten Sie nun rsyslog neu und starten Sie dann den Haproxy:
systemctl restart rsyslog
systemctl start haproxy
Fügen Sie Haproxy hinzu, um beim Booten zu starten:
systemctl enable haproxy
Schritt 3 – Nginx installieren und konfigurieren
In diesem Abschnitt werden wir Nginx aus dem Epel-Repository auf den Servern nginx1 und nginx2 installieren.
Melden Sie sich bei den Servern an:
ssh [email protected]
ssh [email protected]
Installieren Sie das epel-Repository mit dem folgenden yum-Befehl:
yum -y install epel-release
Jetzt können Sie Nginx installieren:
yum -y install nginx
Nginx ist installiert. Gehen Sie in das Webverzeichnis und ändern Sie die Indexdatei, damit wir sehen können, welcher der beiden Server die HTML-Datei geliefert hat:
cd /usr/share/nginx/html/
echo "<h1>nginx1.loadbalance.me</h1>" > index.html #For nginx1 server
echo "<h1>nginx2.loadbalance.me</h1>" > index.html #For nginx2 server
Fügen Sie als Nächstes Nginx hinzu, um es beim Booten zu starten, und starten Sie es dann:
systemctl enable nginx
systemctl start nginx
Stellen Sie sicher, dass Sie diesen Schritt auf den Servern nginx1 und nginx2 ausführen.
Schritt 4 – Testen
Testen vom Browser durch Zugriff auf die Loadbalancer-IP:192.168.1.102
Testen mit Curl-Befehl:
curl 192.168.1.102
Testen der Anmeldung bei der HAProxy-Webüberwachung, die auf Port 8080 mit Benutzername und Passwort „howtoforge“ ausgeführt wird:
http://192.168.1.102:8080/stats
HAProxy arbeitet erfolgreich und fungiert als Load-Balancer für unsere 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 CentOS 7 ist HAProxy im Standard-Repository verfügbar. Es ist einfach zu installieren und zu konfigurieren.