Geschrieben in C von Willy Tarreau, HAProxy, auch bekannt als High Availability Proxy, ist ein schneller und leichter HTTP-Load-Balancer und Proxy-Server. Es hat eine geringe CPU-Auslastung und wird durch einen geringen Speicherbedarf verursacht. Der Load Balancer wird von beliebten Websites wie StackOverflow, Twitter, Github und Tumblr verwendet, um nur einige zu nennen.
In dieser Anleitung zeigen wir Ihnen, wie Sie HAProxy als Load Balancer für Nginx-Webserver unter CentOS 7 einrichten. Der Load Balancer sitzt vor 2 Nginx-Webservern und verteilt HTTP-Anforderungen gerecht an die Server.
HAProxy-Balance-Algorithmus
Dies ist der Algorithmus, den der Load Balancer zur Auswahl der Webserver beim Verteilen von Arbeitslasten verwendet.
1. Roundrobin
Dies ist der einfachste der Algorithmen. Grundsätzlich wird jede neue Verbindung vom nächsten Webserver verarbeitet. Wenn Sie beispielsweise 4 Back-End-Server haben, verarbeitet jeder von ihnen Anfragen nacheinander. Wenn der letzte Webserver auf der Liste erreicht ist, beginnt der Load Balancer wieder ganz oben mit dem ersten Webserver.
2. Lastconn
Hier wird eine neue Anfrage von dem Server mit der geringsten Anzahl von Verbindungen bearbeitet. Dies ist praktisch, wenn Last und Zeiten von Anfragen stark voneinander abweichen.
Erste Schritte
Führen Sie zu Beginn eine Checkliste vor dem Flug durch und stellen Sie sicher, dass Sie Folgendes haben.
1. CentOS 7-Server
Hostname | IP-Adresse des Servers |
---|---|
Load-Balancer | 173.82.168.96 |
webserver-1 | 173.82.2.236 |
webserver-2 | 173.82.94.57 |
2. SSH-Zugriff auf alle Server
Nachfolgend finden Sie eine grafische Darstellung des Setups.
Schritt 1:Datei /etc/hosts im Load Balancer konfigurieren
Melden Sie sich mit SSH beim Load Balancer an und fügen Sie die IP-Adressen und Hostnamen der Nginx-Webserver wie gezeigt hinzu.
vim /etc/hosts
173.82.2.236 web-server-1
173.82.94.57 web-server-2
Speichern und beenden Sie den vim-Texteditor.
Melden Sie sich als Nächstes bei jedem der Webserver (Webserver-1 und Webserver-2) an und bearbeiten Sie /etc/hosts
Datei auf den Load Balancer verweisen.
173.82.168.96 load-balancer
Speichern und beenden Sie den Texteditor.
Schritt 2:Installieren und konfigurieren Sie HAProxy auf dem Load-Balancer-Server
Das HAProxy-Repository ist im CentOS-Repository verfügbar. Um HAProxy zu installieren und einzurichten, melden Sie sich zuerst an und aktualisieren Sie die System-Repositories.
yum update -y
Als nächstes installieren Sie HAProxy mit dem Befehl:
yum -y install haproxy
Beispielausgabe
Sobald die Installation erfolgreich und abgeschlossen ist, gehen Sie zum haproxy-Verzeichnis.
cd /etc/haproxy
Sichern Sie die haproxy.cfg
Datei, indem Sie sie in haproxy.cfg.bak
umbenennen
mv haproxy.cfg haproxy.cfg.bak
Als nächstes erstellen Sie eine neue HAproxy-Konfigurationsdatei.
vim haproxy.cfg
#---------------------------------------------------------------------
# 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 Password123: Password123 #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 round robin 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 web-server-1 173.82.2.236:80 check #Nginx1
server web-server-2 173.82.94.57:80 check #Nginx2
Notieren Sie sich die Webserver, die in den letzten 2 Zeilen angegeben wurden, wie in der Ausgabe gezeigt.
Speichern und beenden Sie den Texteditor.
Als nächstes werden wir das rsyslog konfigurieren Daemon zum Protokollieren der HAProxy-Statistiken.
Bearbeiten Sie die rsyslog.conf
Datei, damit der UDP-Port 514 von rsyslog verwendet werden kann.
vim /etc/rsyslog.conf
Um eine UDP-Verbindung über Port 154 zuzulassen, kommentieren Sie die folgenden Zeilen aus.
$ModLoad imudp
$UDPServerRun 514
Speichern und beenden Sie den Texteditor.
Als nächstes erstellen Sie eine neue HAProxy-Konfigurationsdatei für syslog.
vim /etc/rsyslog.d/haproxy.conf
Fügen Sie die folgende Konfiguration ein
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 Sie den Texteditor.
Fahren Sie fort und starten Sie rsyslog neu.
systemctl restart rsyslog
Starten Sie als Nächstes Haproxy und aktivieren Sie es, um beim Hochfahren zu starten.
systemctl start haproxy
systemctl enable haproxy
Um zu bestätigen, dass HaProxy betriebsbereit ist, führen Sie Folgendes aus:
systemctl status haproxy
Im nächsten Schritt werden wir Nginx auf unseren Webservern installieren.
Schritt 3:Nginx installieren und konfigurieren
Der einzige entscheidende Schritt, der noch bleibt, ist die Installation von Nginx auf jedem unserer Webserver.
Aber installieren Sie zuerst das EPEL-Repository wie gezeigt
yum install epel-release
Als nächstes installieren Sie Nginx
yum install nginx -y
Beispielausgabe
Wenn Nginx auf beiden Servern installiert ist, werden wir die index.html
ändern Dateien in jedem der Nginx-Webserver, um bei der Simulation mit dem HAproxy-Load-Balancer eine Unterscheidung zwischen den einzelnen Servern zu erstellen.
Wechseln Sie wie gezeigt in das HTML-Verzeichnis:
cd /usr/share/nginx/html/
Sichern Sie die index.html-Datei
mv index.html index.html.bak
Erstellen Sie als Nächstes eine neue index.html-Datei und fügen Sie einige Beispielinhalte ein.
Für Webserver 1
echo "web-server-1. Hey ! This is your first web server" > index.html
Für Webserver 2
echo "web-server-2. Hey ! This is your second web server" > index.html
Starten Sie als Nächstes Nginx auf beiden Webservern und bestätigen Sie, ob der Dienst ausgeführt wird
systemctl start nginx
systemctl status nginx
Load-Balancing testen
Um zu überprüfen, ob alles geklappt hat, führen Sie den folgenden Befehl wiederholt aus.
curl 173.82.168.96
Ihre Ausgabe sollte ungefähr so aussehen.
Wie Sie genau beobachten können, wechselt die Ausgabe bei jedem weiteren Ausführen des Befehls curl zwischen dem ersten und dem zweiten Inhalt des Webservers Perfekt!
Lassen Sie uns nun versuchen, mit dem Webbrowser zu testen.
https://load-balancer-IP-address
Dadurch wird der Inhalt auf einem der Webserver angezeigt, in diesem Fall Webserver-2.
Versuchen Sie jetzt ein- oder zweimal zu aktualisieren, und die Ausgabe zeigt auf den anderen Webserver, in diesem Fall web-server-1.
Genial! Dies bestätigt, dass unser Load Balancer in der Lage ist, HTTP-Anfragen gerecht zwischen unseren Webservern zu verteilen.
Um weitere Statistiken des Load-Balancer-Browsers zu sammeln, verwenden Sie die folgende URL
https://load-balancer-IP:8080/stats
Verwenden Sie das Passwort123 als Benutzernamen und Passwort, wie wir es in haproxy.cfg
definiert haben Konfigurationsdatei.
Dies fasst dieses Tutorial zum Einrichten des HAProxy-Load-Balancers für Nginx unter CentOS 7 zusammen. Probieren Sie es gerne aus und teilen Sie dieses Handbuch in Ihren sozialen Netzwerken. Wie immer wird Ihr Feedback geschätzt.