Implementierung eines Nginx-Load-Balancing-Clusters

Implementierung eines Nginx-Load-Balancing-Clusters

(1) Experimentelle Umgebung

youxi1 192.168.5.101 Lastenausgleich

youxi2 192.168.5.102 Host 1

youxi3 192.168.5.103 Host 2

(2) Nginx-Lastausgleichsstrategie

Der Nginx-Lastausgleich wird verwendet, um einen Server aus der in der Upstream-Vorlage definierten Backend-Serverliste zum Empfangen von Benutzeranforderungen auszuwählen. Ein grundlegendes Upstreammodul sieht wie folgt aus:

upstream [Servergruppenname]{
  Server [IP-Adresse]:[Portnummer];
  Server [IP-Adresse]:[Portnummer];
  ....
}

Nachdem das Upstream-Modul konfiguriert ist, müssen Sie den Reverse-Proxy für den Zugriff auf die Serverliste im folgenden Format angeben:

Standort ~ .*$ {
  Index: Index.jsp; Index.html;
  Proxy_Pass http://[Servergruppenname];
}

Erweiterung: Nginx-Standortkonfigurationsregeln: https://www.jb51.net/article/182472.htm

Damit ist die grundlegende Lastverteilung abgeschlossen, der tatsächliche Bedarf kann jedoch nicht gedeckt werden. Derzeit unterstützt das Upstream-Modul von Nginx sechs Lastausgleichsstrategien (Algorithmen): Polling (Standardmethode), Weight (Gewichtungsmethode), IP_Hash (basierend auf der IP-Zuweisungsmethode), Least_Conn (Methode mit geringster Verbindung), Fair (von einem Drittanbieter bereitgestellte Methode für die Antwortzeit) und URL_Hash (basierend auf der von einem Drittanbieter übergebenen URL-Zuweisungsmethode).

1) Umfrage

Die grundlegendste Konfigurationsmethode ist die Standard-Lastausgleichsstrategie des Upstreammoduls. Jede Anfrage wird gleichmäßig und in chronologischer Reihenfolge an verschiedene Backend-Server verteilt. Die Parameter sind wie folgt:

Zeitüberschreitung Verwendung in Verbindung mit max_fails
max_fehlschlägt Die maximale Anzahl von Fehlern innerhalb der durch den Parameter fail_timeout festgelegten Zeit. Wenn alle Anfragen an den Server innerhalb dieser Zeit fehlschlagen, gilt der Server als ausgefallen.
Ausfallzeit Die Zeitspanne, in der der Server als ausgefallen gilt. Der Standardwert beträgt 10 Sekunden (das Intervall zwischen den Serverversuchen, bis zu dem der Server als ausgefallen gilt?)
Sicherung Markieren Sie den Server als Standby-Server. Wenn der primäre Server gestoppt wird, werden Anfragen an ihn gesendet
runter Server dauerhaft als ausgefallen markieren

Hinweis: 1. Als ausgefallen markierte Server werden automatisch entfernt. 2. Polling ist die Standardeinstellung. 3. Diese Strategie eignet sich für Dienste mit zustandsloser Serverkonfiguration und kurzen flachen Blöcken.

2) Gewicht

Gewichtete Methode, gibt die Wahrscheinlichkeit einer Umfrage basierend auf der Umfragestrategie an. Es kann auch in Betracht gezogen werden, auf der Grundlage der Umfrage einen Gewichtungsparameter hinzuzufügen. Dieser Parameter gibt die Wahrscheinlichkeit der Umfrage an und sein Wert ist eine Zahl. Die Konfigurationsvorlage für das Upstreammodul sieht wie folgt aus:

upstream [Servergruppenname]{
  Server [IP-Adresse]:[Portnummer] Gewicht=2;
  Server [IP-Adresse]:[Portnummer];
  ....
}

In diesem Beispiel ist der Standardwert für einen Server ohne Gewichtungsparameter 1. Der Gewichtungswert ist proportional zum Zugriffsverhältnis. Die Summe aller Gewichtungswerte ist eine Zykluseinheit, und der eigene Gewichtungswert des Servers ist die Anzahl der Abfragen innerhalb der Zykluseinheit.

Hinweis: 1. Je höher das Gewicht, desto mehr Anfragen werden zugewiesen. 2. Diese Strategie kann in Kombination mit der Least_conn-Strategie und der Iphash-Strategie verwendet werden. 3. Diese Strategie eignet sich besser für Situationen, in denen es große Unterschiede in der Serverhardwarekonfiguration gibt.

3) ip_hash

Gemäß der IP-Zuweisungsmethode wird der Load Balancer so angegeben, dass er basierend auf der Client-IP zugewiesen wird. Diese Methode stellt sicher, dass dieselbe Clientanforderung konsistent an denselben Server gesendet wird, um die Sitzungssitzung sicherzustellen. Auf diese Weise greift jeder Besucher auf einen festen Backend-Server zu, wodurch das Problem gelöst werden kann, dass die Sitzung nicht zwischen Servern wechseln kann. Die Konfigurationsvorlage für das Upstreammodul sieht wie folgt aus:

upstream [Servergruppenname]{
  ip_hash;
  Server [IP-Adresse]:[Portnummer] Gewicht=2;
  Server [IP-Adresse]:[Portnummer];
  ....
}

Hinweis: 1. Versionen vor nginx 1.3.1 können keine Gewichte in ip_hash verwenden; 2. ip_hash kann nicht gleichzeitig mit einem Backup verwendet werden; 3. Diese Strategie eignet sich für zustandsbehaftete Serviceprogramme wie Sitzungen; 4. Wenn ein Server entfernt werden muss, muss er manuell heruntergefahren werden.

4) am wenigsten_conn

Der Modus „Least Connection“ sendet die Anforderung an den Backend-Server mit der geringsten Anzahl an Verbindungen. Durch Polling werden die Anfragen gleichmäßig auf die einzelnen Backends verteilt, so dass deren Lasten ungefähr gleich sind. Allerdings dauern manche Anfragen sehr lange und verursachen eine hohe Belastung des Backends, auf dem sie sich befinden. In diesem Fall kann least_conn einen besseren Lastausgleichseffekt erzielen. Die Konfigurationsvorlage für das Upstreammodul sieht wie folgt aus:

upstream [Servergruppenname]{
  am wenigsten_Verbindung;
  Server [IP-Adresse]:[Portnummer] Gewicht=2;
  Server [IP-Adresse]:[Portnummer];
  ....
}

Hinweis: Diese Strategie eignet sich für Situationen mit Serverüberlastung, in denen Anfragen mit unterschiedlichen Verarbeitungszeiten unterschiedlich lange dauern.

5) fair

Antwortzeitmethode: Die Anfragen werden entsprechend der Antwortzeit des Servers zugeteilt, wobei Anfragen mit kürzerer Antwortzeit Vorrang erhalten. Die Konfigurationsvorlage für das Upstreammodul sieht wie folgt aus:

upstream [Servergruppenname]{
  Server [IP-Adresse]:[Portnummer] Gewicht=2;
  Server [IP-Adresse]:[Portnummer];
  ....
  gerecht;
}

Hinweis: Es muss ein Plugin eines Drittanbieters installiert werden.

6) url_hash

Die URL-Verteilungsmethode verteilt Anfragen entsprechend dem Hash-Ergebnis der aufgerufenen URL, sodass jede URL an denselben Backend-Server weitergeleitet wird. Sie sollte in Verbindung mit Cache-Treffern verwendet werden. Mehrere Anforderungen für dieselbe Ressource können bei verschiedenen Servern eingehen, was zu unnötigen Mehrfachdownloads, niedrigen Cache-Trefferraten und einer Verschwendung von Ressourcenzeit führt. Durch die Verwendung von url_hash kann dieselbe URL (also dieselbe Ressourcenanforderung) denselben Server erreichen. Sobald die Ressource zwischengespeichert ist, kann sie aus dem Cache gelesen werden, wenn die Anforderung erneut empfangen wird. Die Konfigurationsvorlage für das Upstreammodul sieht wie folgt aus:

upstream [Servergruppenname]{
  Hashwert für $request_uri;
  Server [IP-Adresse]:[Portnummer] Gewicht=2;
  Server [IP-Adresse]:[Portnummer];
  ....
}

Hinweis: 1. Es muss ein Plug-In eines Drittanbieters installiert werden. 2. URI ist ein „i“, nicht ein kleines „L“.

(3) Experiment

1) Kompilieren und installieren Sie nginx auf dem Load Balancer youxi1

Installieren Sie Nginx-Abhängigkeiten

[root@youxi1 ~]# yum -y installiere gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel

Laden Sie das Nginx-Quellpaket nginx-1.14.1.tar.gz hoch, entpacken Sie es und installieren Sie es

[root@youxi1 ~]# tar xf nginx-1.14.1.tar.gz -C /usr/local/src/
[root@youxi1 ~]# cd /usr/local/src/nginx-1.14.1/
[root@youxi1 nginx-1.14.1]# ./configure --prefix=/usr/local/nginx --mit-http_dav_module --mit-http_stub_status_module --mit-http_addition_module --mit-http_sub_module --mit-http_flv_module --mit-http_mp4_module
[root@youxi1 nginx-1.14.1]# make && make install
[root@youxi1 nginx-1.14.1]# echo $?
0

Parameterbeschreibung:

--with-http_dav_module, ngx_http_dav_module-Unterstützung aktivieren (PUT, DELETE, MKCOL hinzufügen: Sammlung erstellen, COPY- und MOVE-Methoden). Standardmäßig ist es deaktiviert und muss kompiliert werden;

--with-http_stub_status_module, Unterstützung für ngx_http_stub_status_module aktivieren (Arbeitsstatus von Nginx seit dem letzten Start abrufen);

--with-http_addition_module, ngx_http_addition_module-Unterstützung aktivieren (unterstützt als Ausgabefilter unvollständige Pufferung und Anfragen mit teilweisen Antworten);

--with-http_sub_module, aktiviert die Unterstützung für ngx_http_sub_module (ermöglicht das Ersetzen von Text in der Nginx-Antwort durch anderen Text);

--with-http_flv_module, aktiviert die Unterstützung für ngx_http_flv_module (ermöglicht die Suche im Speicher mithilfe zeitbasierter Offsetdateien);

--with-http_mp4_module, aktiviert die Unterstützung für MP4-Dateien (ermöglicht die Suche nach Dateien mithilfe zeitbasierter Offsets im Speicher).

Nginx-Benutzer generieren

[root@youxi1 nginx-1.14.1]# useradd -M -s /sbin/nologin nginx

Starten und Autostart hinzufügen

[root@youxi1 nginx-1.14.1]# /usr/local/nginx/sbin/nginx
[root@youxi1 nginx-1.14.1]# echo /usr/local/nginx/sbin/nginx >> /etc/rc.local
[root@youxi1 nginx-1.14.1]# chmod +x /etc/rc.d/rc.local

Wenn die Firewall eingeschaltet ist, denken Sie daran, die Portnummer hinzuzufügen

[root@youxi1 nginx-1.14.1]# Firewall-cmd --permanent --zone=public --add-port=80/tcp && Firewall-cmd --reload
Erfolg
Erfolg

Überprüfen Sie die Schnittstelle, um festzustellen, ob nginx normal installiert ist

Ändern Sie nach Abschluss des Tests die Nginx-Konfigurationsdatei und starten Sie Nginx anschließend neu.

[root@youxi1 nginx-1.14.1]# cp /usr/local/nginx/conf/nginx.conf{,.bak}
[root@youxi1 nginx-1.14.1]# vim /usr/local/nginx/conf/nginx.conf
Benutzer nginx; //Zeile 2 Standort / { //Zeile 43 und folgende root html;
  Index Index.html Index.htm;
  wenn ($request_uri ~* \.html$){
    Proxy-Passwort http://htmlservers;
  }
  wenn ($request_uri ~* \.php$){
    Proxy-Passwort http://phpservers;
  }
  Proxy-Passwort http://picservers;
}
upstream htmlservers { //Fügen Sie unter dem http-Modul den Server 192.168.5.102:80 auf derselben Ebene wie das Servermodul hinzu.
  Server 192.168.5.103:80;
}
Upstream-Phhpserver{
  Server 192.168.5.102:80;
  Server 192.168.5.103:80;
}
Upstream-Bildserver {
  Server 192.168.5.102:80;
  Server 192.168.5.103:80;
}
[root@youxi1 nginx-1.14.1]# /usr/local/nginx/sbin/nginx -s neu laden

2) Stellen Sie das Webseitenprogramm auf youxi2 und youxi3 bereit

[root@youxi2 ~]# yum -y installiere httpd
[root@youxi2 ~]# echo youxi2 > /var/www/html/index.html
[root@youxi2 ~]# echo youxi2.php > /var/www/html/index.php
[root@youxi2 ~]# echo youxi2.other > /var/www/html/index.jsp
[root@youxi2 ~]# systemctl starte httpd.service
 
[root@youxi3 ~]# yum -y installiere httpd
[root@youxi3 ~]# echo youxi3 > /var/www/html/index.html
[root@youxi3 ~]# echo youxi3.php > /var/www/html/index.php
[root@youxi3 ~]# echo youxi3.other > /var/www/html/index.jsp
[root@youxi3 ~]# systemctl starte httpd.service

Wenn die Firewall eingeschaltet ist, denken Sie daran, die Portnummer hinzuzufügen

[root@youxi2 ~]# Firewall-cmd --permanent --zone=public --add-port=80/tcp && Firewall-cmd --reload
Erfolg
Erfolg
 
[root@youxi3 ~]# Firewall-cmd --permanent --zone=public --add-port=80/tcp && Firewall-cmd --reload
Erfolg
Erfolg

3) Testen

Testen Sie zuerst die HTML-Seite

Testen Sie dann die PHP-Seite

Testen Sie abschließend andere Seiten

Referenz: https://www.cnblogs.com/1214804270hacker/p/9325150.html

Dies ist das Ende dieses Artikels zum Erstellen eines Lastausgleichsclusters mit Nginx. Weitere Informationen zum Nginx-Lastausgleichscluster finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Springboot+nginx+https+linux, um Lastausgleich und Domänennamenzugriff einfach zu testen
  • Vollständige Schritte zur Verwendung von Nginx+Tomcat zum Lastenausgleich unter Windows
  • So implementieren Sie Nginx Reverse Proxy und Load Balancing (basierend auf Linux)
  • Nginx-Lastausgleichskonfiguration, automatischer Umschaltmodus bei Ausfallzeiten
  • Keepalived implementiert Nginx-Lastausgleich und Beispielcode für hohe Verfügbarkeit
  • Tutorial zum Bereitstellen mehrerer Server mit WebAPI und Konfigurieren des Nginx-Lastausgleichs
  • Detaillierte Erläuterung der Nginx-Konfigurationsparameter auf Chinesisch (Lastausgleich und Reverse-Proxy)
  • Konfigurationscodebeispiel für Nginx-Forward- und Reverse-Proxy sowie Lastausgleichsfunktionen
  • Ein kurzes Verständnis mehrerer Planungsalgorithmen für den siebenschichtigen Lastenausgleich von Nginx
  • Beispiel für die Implementierung des Lastausgleichs mit Nginx+SpringBoot

<<:  Vue implementiert einen Login-Verifizierungscode

>>:  Beispiel für eine einfache Operation einer MySQL-Abfrageanweisung

Artikel empfehlen

Detaillierte Erklärung des Linux-Kernel-Makros Container_Of

Inhaltsverzeichnis 1. Wie werden Strukturen im Ge...

Einführung in Linux-Komprimierungs- und Dekomprimierungsbefehle

Inhaltsverzeichnis Gängige Komprimierungsformate:...

Detaillierte Analyse des Flex-Layouts in CSS3

Das Flexbox-Layoutmodul soll eine effizientere Mö...

Detaillierte Erklärung gängiger Vorlagenbefehle in docker-compose.yml-Dateien

Hinweis: Beim Schreiben der Datei docker-compose....

Analyse des MySQL-Beispiels DTID Master-Slave-Prinzip

Inhaltsverzeichnis 1. Grundkonzepte von GTID 2. G...

Docker richtet Port-Mapping ein, kann aber nicht auf die Lösung zugreifen

#docker ps-Check, alle Ports sind zugeordnet CONT...

CSS3-Countdown-Effekt

Ergebnisse erzielen Implementierungscode html <...

Gemeinsame MySQL-Sicherungsbefehle und Shell-Sicherungsskripte

Um mehrere Datenbanken zu sichern, können Sie den...

Vue Shuttle-Box ermöglicht Auf- und Abbewegung

In diesem Artikelbeispiel wird der spezifische Co...

CSS realisiert den Prozessnavigationseffekt (drei Methoden)

CSS realisiert den Prozessnavigationseffekt. Der ...

Grafisches Tutorial zur Installation und Konfiguration von Win32 MySQL 5.7.27

Das Installationstutorial für MySQL 5.7.27 wird w...