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

Lastenausgleich mit HAProxy, Nginx und Keepalived unter Linux

Ein richtig eingerichteter Load Balancer ermöglicht es Ihrem Webserver, hohen Datenverkehr reibungslos zu bewältigen, anstatt abzustürzen.

Was ist Load-Balancing?

Lastenausgleich ist der Prozess der Verteilung von Arbeitslasten auf mehrere Server. Es ist, als würde man in einem Unternehmen die Arbeitslast zwischen Tag- und Nachtschichtarbeitern verteilen. Load Balancing verbessert die Zuverlässigkeit des Servers, da Single-Point-Ausfälle überwunden werden.

Ein Beispiel dafür, wie ein Server ohne Load-Balancing aussieht, sehen Sie unten.

Wenn in diesem Beispiel der Webserver ausfällt, kann auf die Webanfrage des Benutzers nicht in Echtzeit zugegriffen werden. Auch wenn viele Benutzer gleichzeitig dieselbe Webseite anfordern, kann die Bedienung der Webanforderung des Benutzers durch einen einzelnen Webserver ein langsamer Prozess sein. Daher werden Load Balancer verwendet, um die Leistung des Servers zu verbessern, Backups bereitzustellen und Ausfälle zu verhindern.

In diesem Tutorial richten wir einen Load Balancer für Webserver mit Nginx, HAProxy und Keepalived ein.

Ein Beispiel dafür, wie Server mit Load-Balancern aussehen, sehen Sie unten.

Also, was sind Nginx, Haproxy und Keepalived?

Nginx

Nginx, ausgesprochen als Engine-x, ist ein Open-Source-Webserver. Er ist mehr als nur ein Webserver, er kann als Reverse-Proxy-Server, Mail-Proxy-Server, Load Balancer, schlanker Dateiserver und HTTP-Cache fungieren. Nginx wurde auf vielen beliebten Websites wie BitBucket, WordPress, Pinterest, Quora und GoDaddy verwendet.

HAProxy

HAProxy steht für High Availability Proxy. Es ist ein Open-Source-Load-Balancer, der Load-Balancing, Hochverfügbarkeit und Proxy-Lösungen für TCP- und HTTP-basierte Anwendungen bietet. Es ist am besten geeignet, die Arbeitslast auf mehrere Server zu verteilen, um die Leistung und Zuverlässigkeit der Server zu verbessern.

Die Funktion von Haproxy besteht darin, die Webanfrage vom Endbenutzer an einen der verfügbaren Webserver weiterzuleiten. Es kann verschiedene Load-Balancing-Algorithmen wie Round Robin, Least Connections usw. verwenden.

Keepalived

Was passiert, wenn der HAProxy-Load-Balancer ausfällt?

Keepalived ist ein Open-Source-Programm, das sowohl Lastausgleich als auch Hochverfügbarkeit unterstützt. Es ist im Grunde eine Routing-Software und bietet zwei Arten von Lastenausgleich:

  • Schicht 4 (Transportschicht)
  • Schicht 7 (Anwendungsschicht)

Keepalived kann die folgenden Funktionen ausführen:

  • Gesundheitsprüfung (ob die Server aktiv sind oder nicht)
  • Implementiert VRRP (Virtual Redundancy Routing Protocol) zur Abwicklung des Load-Balancing-Failovers

Keepalived verwendet VIP (virtuelle IP-Adresse) als Floating-IP, die zwischen einem Master-Load-Balancer und einem Backup-Load-Balancer schwebt und zum Umschalten zwischen ihnen verwendet wird. Wenn der Master-Load-Balancer ausfällt, wird der Backup-Load-Balancer verwendet, um die Webanfrage weiterzuleiten.

Lassen Sie uns zur Simulation übergehen, wie Hochverfügbarkeit und Lastenausgleich für Webserver aufrechterhalten werden.

Einrichten eines Load-Balancers unter Linux mit Nginx, HAProxy und Keepalived

Dies ist ein Testlaborexperiment, d. h. es ist nur ein Testaufbau, um Ihnen den Einstieg zu erleichtern. Möglicherweise müssen Sie einige Anpassungen vornehmen, wenn Sie es auf echten Servern implementieren. Verwenden Sie dieses Tutorial als Lernmaterial, anstatt es blind für Ihr eigenes Setup zu befolgen.

Ich habe in diesem Tutorial die CentOS-Linux-Distribution verwendet. Sie können andere Linux-Distributionen verwenden, aber ich kann nicht garantieren, dass alle Befehle (insbesondere die Installationsbefehle) in anderen Distributionen funktionieren.

Anforderungen für die Einrichtung des Load-Balancers

4 CentOS installierte Systeme (für dieses Tutorial reicht eine minimale Installation)

  • 2 CentOS muss mit nginx eingerichtet werden
  • 2 CentOS zur Einrichtung mit HAProxy und Keepalived

In diesem Tutorial haben wir beispielhaft die folgenden IP-Adressen bearbeitet. Diese können je nach System geändert werden. Denken Sie nicht, dass dies die statischen IPs sind.

Webserver:

  • 10.13.211.169
  • 10.13.211.158

LoadBalancer:

  • 10.13.211.194
  • 10.13.211.120

Virtuelle IP:

  • 10.13.211.10

Sie können die IP-Adresse einfach in der Linux-Befehlszeile abrufen.

Schritt 1:Richten Sie die Webserver mit Nginx ein

In diesem Teil verwenden wir zwei CentOS-Systeme als Webserver. Wir müssen zuerst Nginx auf ihnen installieren.

Fügen Sie dazu ein Repository hinzu, das nginx enthält, und installieren Sie es dann von dort aus:

yum install epel-release
yum install nginx

Starten Sie nach der Installation von nginx den Nginx-Dienst:

systemctl start nginx

Machen Sie den nginx-Dienst so, dass er auch nach jedem Booten aktiviert wird:

systemctl enable nginx

Überprüfen Sie den Status des nginx-Dienstes:

systemctl status nginx

Lassen Sie den Webverkehr in nginx zu, der standardmäßig von der CentOS-Firewall blockiert wird.

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd –reload 

Wiederholen Sie die obigen Schritte auch auf dem zweiten CentOS-Webserver.

Achten Sie jetzt auf die nächsten Schritte.

Die Webdateien für nginx befinden sich in /usr/share/nginx/html Ändern Sie den Inhalt der Datei index.html, um nur die Webserver zu identifizieren.

Für den ersten Webserver:

echo “this is first webserver” > /usr/share/nginx/html/index.html

Für den zweiten Webserver:

echo “this is second webserver” > /usr/share/nginx/html/index.html

HINWEIS:Wenn Sie sich auf einer virtuellen Maschine befinden, ist es besser, Nginx auf einem System zu installieren und zu konfigurieren und dann das System zu klonen. Danach können Sie auf dem zweiten System neu konfigurieren. Spart Zeit und Fehler.

Bestätigen Sie nun den Status des Webservers, indem Sie in Ihrem Browser zu folgender URL gehen:http://SERVER_DOMAIN_NAME oder Local_IP_Address. Beispiel hier:

http://10.13.211.169

Oder im Terminal curl Local_IP_Address. Beispiel hier:

curl 10.13.211.169

Sie erhalten die Ausgabe wie:

Schritt 2:Load-Balancer mit HAProxy einrichten

Verwenden Sie auf den anderen beiden Systemen die folgenden Befehle, um HAProxy zu installieren:

yum -y update
yum -y install haproxy

Die HAProxy-Konfigurationsdatei befindet sich unter /etc/haproxy. Verwenden Sie den cd-Befehl, um in das Verzeichnis zu gehen und die Datei vor der Bearbeitung zu sichern.

cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg_bac

Erstellen Sie eine neue haproxy.cfg-Datei und öffnen Sie die Datei mit einem beliebigen Editor.

touch haproxy.cfg
vim haproxy.cfg

Fügen Sie nun die folgenden Zeilen in die Datei ein:

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats timeout 30s
   user haproxy
   group haproxy
   daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000

#frontend
#---------------------------------
frontend http_front
bind *:80
stats uri /haproxy?stats
default_backend http_back

#round robin balancing backend http
#-----------------------------------
backend http_back
balance roundrobin
#balance leastconn
mode http
server webserver1 10.13.211.169:80 check    # ip_address_of_1st_centos_webserver
server webserver2 10.13.211.158:80 check    # ip_address_of_2nd_centos_webserver

Aktivieren und starten Sie jetzt den HAProxy-Dienst.

systemctl enable haproxy
systemctl start haproxy

Überprüfen Sie den Status von HAProxy:

systemctl status haproxy

Rufen Sie in Ihrem Browser die URL auf, um den Dienst von Haproxy zu bestätigen:http://IP-Adresse des Lastenausgleichs/haproxy?stats. Hier verwendetes Beispiel:

http://10.13.211.194/haproxy?stats

oder verwenden Sie im Terminal den Befehl $ curl  LoadBalancer_IP_Address

curl 10.13.211.194
curl 10.13.211.194

curl zweimal und Sie sehen unterschiedliche Ausgaben für den curl-Befehl. Dies liegt daran, dass die Antwort auf Ihre Anfrage beim Load Balancer von verschiedenen Webservern (einer nach dem anderen) kommt.

Die Ausgabe würde wie folgt aussehen:

Schritt 3:Hochverfügbarkeit mit Keepalived einrichten

Keepalived muss auf beiden HAProxy-Load-Balancer-CentOS-Systemen installiert sein (die wir gerade oben konfiguriert haben). Einer fungiert als Master (Haupt-Load-Balancer) und ein anderer als Backup-Load-Balancer.

Führen Sie auf beiden Systemen den folgenden Befehl aus:

yum install -y keepalived

Die Konfigurationsdatei von Keepalived befindet sich unter /etc/keepalived/keepalived.conf . Sichern Sie die ursprüngliche keepalived.conf-Datei und verwenden Sie die folgende Konfiguration in der neuen keepalived.conf-Datei.

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bac
touch /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf

Fügen Sie die folgenden Zeilen in die Konfigurationsdatei ein (vergessen Sie nicht, die E-Mail-Adressen zu ändern):

global_defs {
notification_email {
linuxhandbook.com
[email protected]
}
notification_email_from [email protected]
smtp_server 10.13.211.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
state MASTER
interface eth0 #put your interface name here. [to see interface name: $ ip a ]
virtual_router_id 51
priority 101 # 101 for master. 100 for backup. [priority of master> priority of backup]
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 #password
}
virtual_ipaddress {
10.13.211.10 # use the virtual ip address. 
}
}

Hinweis:Virtuelle IPs können jede Live-IP in Ihrem Netzwerk sein. Etwa im Bereich der IP-Adresse des Loadbalancers. Hier lautet die IP des Load Balancers:10.13.211.194 &10.13.211.120, und VIP ist 10.13.211.10

Bearbeiten Sie die Konfigurationsdatei gemäß der Systemannahme. Achten Sie auf die Master- und Backup-Konfiguration. Speichern Sie die Datei und starten und aktivieren Sie den Keepalived-Prozess:

systemctl start keepalived
systemctl enable keepalived

So zeigen Sie den Status von Keepalived an:

systemctl status keepalived

Hinweis:Wenn Sie sich auf einer virtuellen Maschine befinden, ist es besser, Haproxy und Keepalived auf einem System zu installieren und zu konfigurieren und dann das System zu klonen. Danach können Sie auf dem zweiten System neu konfigurieren. Spart Zeit und Fehler.

Um nun den Status Ihres Hochverfügbarkeits-Load-Balancers zu überprüfen, gehen Sie zum Terminal und klicken Sie auf:

$ while true; do ; curl 10.13.211.10 ; sleep 1; done;

Drücken Sie ctrl+c um den Terminallauf zu stoppen.

Die Ausgabe sieht folgendermaßen aus:

Wenn Sie sich beim Installieren und Konfigurieren der Dateien unwohl fühlen, laden Sie die Skripte aus meinem GitHub-Repository herunter und führen Sie sie einfach aus.

Ich hoffe, dieses Tutorial hat Ihnen geholfen, einen Load Balancer in Linux mit hoher Verfügbarkeit einzurichten. Natürlich war es eine einfache Einrichtung, aber es gibt definitiv eine Vorstellung vom Lastenausgleich und dem Umgang mit hoher Verfügbarkeit.

Wenn Sie Fragen oder Anregungen haben, hinterlassen Sie bitte unten einen Kommentar.

Autor :Rishi Raj Gautam ist ein Linux-Liebhaber und ein Open-Source-Aktivist.


Linux
  1. Bearbeiten Sie Text unter Linux mit KWrite und Kate

  2. Anpassen meines Linux-Terminals mit tmux und Git

  3. So installieren Sie den Nginx-Webserver unter Linux

  4. Balance zwischen Linux-Sicherheit und Benutzerfreundlichkeit

  5. Nginx-Lastenausgleich

Richten Sie Load Balancing mit HAProxy, Nginx und Keepalived unter Linux ein

Installieren und konfigurieren Sie Varnish Cache mit Nginx Web Server unter Ubuntu 18.04

So installieren und konfigurieren Sie den Caddy Web Server mit PHP unter Rocky Linux 8

So konfigurieren Sie Load Balancing mit NGINX in Jelastic Cloud

Webentwicklung und fortgeschrittene Techniken mit Linux unter Windows (WSL)

Ruby on Rails auf Azure App Service (Websites) mit Linux (und Ubuntu auf Windows 10)