Ein Beispiel für die Verwendung eines Lvs+Nginx-Clusters zum Erstellen einer Architektur mit hoher Parallelität

Ein Beispiel für die Verwendung eines Lvs+Nginx-Clusters zum Erstellen einer Architektur mit hoher Parallelität

Bei Websites mit hoher Parallelität muss nicht nur die Stabilität der Backend-Dienste der Website berücksichtigt werden, sondern auch, ob die Dienste auf großen Datenverkehr zugreifen und diesem standhalten können, wie in der folgenden Abbildung dargestellt:

Bild-20211220234912904

1: Verkehrszugriff, Sie können den Lvs+Nginx-Cluster verwenden, auf diese Weise können Sie auf bis zu Millionen QPS zugreifen

2: Implementieren Sie den Nginx-Cluster über Lvs und implementieren Sie den Back-End-Service-Cluster mit Nginx + Tomcat. Schließen Sie so den Prozess von der Datenverkehrsverarbeitung auf Zugriffsebene bis zur hochparallelen Verarbeitung des Back-End-Service-Clusters ab.

1. Lvs-Einführung

LVS (Linux Virtual Server) ist ein virtueller Linux-Server. Es wird zum Lastenausgleich mehrerer Server verwendet und arbeitet auf der vierten Ebene des Netzwerks. Es kann hochleistungsfähige und hochverfügbare Serverclustertechnologie realisieren. Es ist stabil und zuverlässig. Selbst wenn ein Server im Cluster nicht ordnungsgemäß funktioniert, hat dies keine Auswirkungen auf den Gesamteffekt. Es basiert auf TCP/IP-Routing und -Weiterleitung und bietet extrem hohe Stabilität und Effizienz.

Bild-20211220235003406

Ein LVS-Cluster umfasst häufig die folgenden Rollen:

1:DS: Director-Server. Virtueller Dienst, verantwortlich für die Terminplanung

2: RS: Echter Server. Der wirklich funktionierende Server im Backend.

3: VIP: Leitet Benutzeranforderungen direkt an die Außenwelt weiter und ist die IP-Adresse des Ziels der Benutzeranforderung

4:DIP: Director-Server-IP, DS-IP

5: RIP: Real Server IP, IP-Adresse des Backend-Servers

6: CIP: Client IP, IP-Adresse des Zugriffsclients

2. Lvs-Lastausgleichsmodus

LVS bietet drei Lastausgleichsmodi. Jeder Lastausgleichsmodus ist auf unterschiedliche Szenarien anwendbar. Lassen Sie uns diese drei Lastausgleichsmodi erklären.

2.1 NAT

Nachdem die Benutzeranforderung den Verteiler erreicht hat, wird das angeforderte Datenpaket gemäß den voreingestellten iptables-Regeln an das Backend-RS weitergeleitet. RS muss das Gateway auf die interne IP des Verteilers einstellen. Sowohl die vom Benutzer angeforderten Datenpakete als auch die an den Benutzer zurückgesendeten Datenpakete durchlaufen den Verteiler. Daher wird der Verteiler auch als Engpass bezeichnet. Im NAT-Modus muss nur der Verteiler über eine öffentliche IP verfügen, daher werden öffentliche IP-Ressourcen gespart.

Bild-20211220235042901

2.2 TUN

Dieser Modus erfordert die Konfiguration einer öffentlichen IP auf dem Distributor und allen RSs, die wir VIP nennen. Die vom Client angeforderte Ziel-IP ist VIP. Nachdem der Verteiler das angeforderte Datenpaket empfangen hat, verarbeitet er das Datenpaket und ändert die Ziel-IP in die IP von RS, sodass das Datenpaket RS erreicht. Nach dem Empfang des Datenpakets stellt RS das ursprüngliche Datenpaket wieder her, sodass die Ziel-IP VIP ist. Da diese VIP auf allen RSs konfiguriert ist, wird sie denken, dass sie es selbst ist.

Bild-20211220235059900

2.3 DR-Modus

Es ähnelt dem IP-Tunnel, der Unterschied besteht jedoch darin, dass die MAC-Adresse des Datenpakets in die MAC-Adresse des RS geändert wird. Der echte Server gibt die Antwort direkt an den Client zurück.

Bei dieser Methode entsteht nicht der Overhead von IP-Tunneln und es ist nicht erforderlich, dass die realen Server im Cluster das IP-Tunnelprotokoll unterstützen. Allerdings ist es erforderlich, dass der Scheduler und der reale Server über eine Netzwerkkarte verfügen, die mit demselben physischen Netzwerksegment verbunden ist.

Bild-20211220235116751

3. Konfiguration des Lvs DR-Modus

Basierend auf der obigen Analyse können wir den Schluss ziehen, dass der DR-Modus eine relativ hohe Leistungseffizienz und hohe Sicherheit aufweist, weshalb die meisten Unternehmen die Verwendung des DR-Modus empfehlen. Wir konfigurieren hier auch den DR-Modus, um den Lvs+Nginx-Cluster zu implementieren.

Wir haben 3 Maschinen vorbereitet: Stellen Sie zunächst sicher, dass Nginx auf allen drei Maschinen installiert ist.

1:192.168.183.133 (DS) 192.168.183.150 stellt externe Dienste bereit 2:192.168.183.134 (RS) 192.168.183.150 echter Geschäftsprozess zur Dienstabwicklung 3:192.168.183.135 (RS) 192.168.183.150 echter Geschäftsprozess zur Dienstabwicklung

VIP: 192.168.183.150

3.1 VIP-Konfiguration

Schließen Sie den Netzwerkkonfigurations-Manager (tun Sie dies auf jedem Computer).

systemctl stop NetworkManager
systemctl deaktiviert NetworkManager

Virtuelle IP konfigurieren (konfiguriert in VIP 192.168.183.133)

Erstellen Sie die Datei ifcfg-ens33:1 in /etc/sysconfig/network-scripts mit folgendem Inhalt:

BOOTPROTO=statisch
GERÄT=ens33:1
ONBOOT=ja
IPADDR=192.168.183.150
NETMASK=255.255.255.0

Starten Sie den Netzwerkdienst neu:

Neustart des Dienstnetzwerks

Wir können sehen, dass der ursprünglichen Netzwerkkarte eine virtuelle IP 150 hinzugefügt wird.

Bild-20211220235428594

Gleichzeitig müssen Sie virtuelle Maschinen-IPs für 192.168.183.134 und 192.168.183.135 erstellen, diese werden jedoch nur zur Datenrückgabe verwendet und können von Benutzern nicht aufgerufen werden. Zu diesem Zeitpunkt müssen Sie ifcfg-lo ausführen.

IPADDR=127.0.0.1, wobei 127.0.0.1 eine lokale Loopback-Adresse ist und keiner klassenbasierten Adressklasse angehört. Es stellt die lokale virtuelle Schnittstelle des Geräts dar und wird daher standardmäßig als eine Schnittstelle betrachtet, die niemals ausfallen wird.

NETMASK=255.255.255.255

192.168.183.134 :
Kopieren Sie ifcfg-lo nach ifcfg-lo:1 und ändern Sie ifcfg-lo:1 Konfiguration mit folgendem Inhalt:

Bild-20211220235808269

Aktualisieren lo:

wenn auf, lo

Wenn Sie die IP überprüfen, können Sie feststellen, dass sich unter lo noch 150 weitere IPs befinden.

Bild-20211220235845587

192.168.100.133 führt dieselbe Operation wie oben aus.

3.2 Installation des LVS-Clusterverwaltungstools

ipvsadm wird zur Verwaltung des LVS-Clusters verwendet und muss manuell installiert werden. DS kann installiert werden.

Installationsbefehl:

yum installiere ipvsadm

Versionsansicht:

ipvsadm -Ln

Die Wirkung ist wie folgt:

Bild-20211221000148927

3.3 Adressauflösungsprotokoll

Funktioniert auf 192.168.183.134 und 192.168.183.135 .

Die Parameter arp_ignore und arp_announce beziehen sich beide auf das ARP-Protokoll und werden hauptsächlich verwendet, um die Aktionen zu steuern, wenn das System eine ARP-Antwort zurückgibt und eine ARP-Anfrage sendet. Diese beiden Parameter sind besonders im DR-Szenario von LVS sehr wichtig. Ihre Konfiguration wirkt sich direkt darauf aus, ob die DR-Weiterleitung normal ist.

arp-ignore: Der Parameter arp_ignore wird verwendet, um zu steuern, ob das System beim Empfang einer externen ARP-Anforderung eine ARP-Antwort zurückgeben soll (0 ~ 8, 2-8 werden selten verwendet).

Konfigurationsdatei: /etc/sysctl.conf , kopieren Sie die folgenden Dateien hinein:

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2

Konfiguration aktualisieren:

sysctl -p

Route hinzufügen: Wenn die Route zu diesem Zeitpunkt nicht erkannt wird, müssen Sie die entsprechenden yum install net-tools tools installieren.

Route hinzufügen -Host 192.168.183.150 dev lo:1

Zum Empfangen von Datenpaketen wird eine Hostadresse hinzugefügt. Nach dem Empfang der Datenpakete werden diese zur Verarbeitung an lo:1 übergeben. (Um einen Fehler beim Herunterfahren zu vermeiden, müssen Sie den obigen Befehl zu /etc/rc.local hinzufügen.)

Nach dem Hinzufügen des Hosts können Sie Folgendes überprüfen: route -n und die Auswirkung deutlich erkennen.

Wir müssen die obige Konfiguration auch in 192.168.183.135 konfigurieren.

3.4 Cluster-Konfiguration

Erklärung des ipvsadm-Befehls:

ipvsadm -A: wird zum Erstellen eines Clusters verwendet
ipvsadm -E: wird zum Ändern des Clusters verwendet
ipvsadm -D: wird zum Löschen eines Clusters verwendet
ipvsadm -C: wird zum Löschen von Clusterdaten verwendet
ipvsadm -R: wird zum Zurücksetzen der Cluster-Konfigurationsregeln verwendet
ipvsadm -S: wird zum Speichern geänderter Clusterregeln verwendet
ipvsadm -a: wird verwendet, um einen rs-Knoten hinzuzufügen
ipvsadm -e: wird verwendet, um einen RS-Knoten zu ändern
ipvsadm -d: wird zum Löschen eines RS-Knotens verwendet

TCP-Dienstadresse des Clusters hinzufügen: (externe Anforderungen werden von der in dieser Konfiguration angegebenen VIP verarbeitet)

ipvsadm -A -t 192.168.183.150:80 -s rr

Parameterbeschreibung:

  • -A: Clusterkonfiguration hinzufügen
  • -t: TCP-Anforderungsadresse (VIP)
  • -s: Lastausgleichsalgorithmus

Lastausgleichsalgorithmus:

Algorithmus veranschaulichen
rr Der Polling-Algorithmus verteilt die Anfragen nacheinander an verschiedene RS-Knoten, d. h. er verteilt sie gleichmäßig auf die RS-Knoten. Dieser Algorithmus ist einfach, aber nur für Situationen geeignet, in denen RS-Knoten eine ähnliche Verarbeitungsleistung aufweisen.
wrr Gewichtete Round-Robin-Planung, die Aufgaben entsprechend der Gewichtung verschiedener RSs zuweist. RSs mit höheren Gewichtungen erhalten bei der Erlangung von Aufgaben Vorrang und bekommen mehr Verbindungen zugewiesen als RSs mit niedrigeren Gewichtungen. RSs mit denselben Gewichten erhalten die gleiche Anzahl an Verbindungen.
Wl Planung der gewichteten Mindestverbindungsanzahl unter der Annahme, dass die Vollzeit jedes RS Wi ist, die aktuelle Anzahl der TCP-Verbindungen Ti ist und der RS ​​mit dem kleinsten Ti/Wi als nächster zuzuweisender RS ​​ausgewählt wird
Dh Beim Ziel-Hashing wird die Zieladresse als Schlüsselwort verwendet, um eine statische Hash-Tabelle nachzuschlagen und die erforderlichen RS zu erhalten.
SCH Beim Hashen der Quelladresse wird die Quelladresse als Schlüsselwort verwendet, um eine statische Hash-Tabelle nachzuschlagen und die erforderlichen RS zu erhalten.
Lc Least-Connection-Scheduling, die IPVS-Tabelle speichert alle aktiven Verbindungen. Der LB vergleicht und sendet die Verbindungsanforderung an den RS mit den wenigsten aktuellen Verbindungen.
Lblc Lokalitätsbasiertes Least-Connection-Scheduling: Ordnen Sie Anfragen von derselben Zieladresse demselben RS zu, wenn der Server noch nicht vollständig ausgelastet ist. Andernfalls wird die Anforderung dem RS mit der geringsten Anzahl von Verbindungen zugewiesen und dieser wird bei der nächsten Zuweisung zuerst berücksichtigt.

Konfigurieren Sie rs (2) Knoten im DS:

ipvsadm -a -t 192.168.183.150:80 -r 192.168.183.134:80 -g
ipvsadm -a -t 192.168.183.150:80 -r 192.168.183.135:80 -g

Parameterbeschreibung:

  • -a: Einen Knoten zum Cluster hinzufügen
  • -t: VIP-Adresse angeben
  • -r: gibt die echte Serveradresse an
  • -g: gibt an, dass der LVS-Modus der DR-Modus ist

Nachdem wir den Knoten hinzugefügt haben, überprüfen wir ihn über ipvsadm -Ln und können sehen, dass noch zwei weitere Knoten vorhanden sind.

Zu diesem Zeitpunkt werden die Clientanforderungsdaten und TCP-Kommunikationsdaten in der Clusterliste dauerhaft gespeichert. Um den Effekt besser zu sehen, können wir die Speicherzeit wie folgt auf 2 Sekunden einstellen:

ipvsadm --set 2 2 2

Zu diesem Zeitpunkt fordern wir http://192.168.183.150/ an.

Es kann festgestellt werden, dass die Anforderung zwischen den beiden Nginx-Pollings umgeschaltet wird.

Dies ist das Ende dieses Artikels über das Implementierungsbeispiel zur Verwendung eines Lvs+Nginx-Clusters zum Erstellen einer Architektur mit hoher Parallelität. Weitere relevante Inhalte zum Erstellen eines Lvs Nginx-Clusters mit hoher Parallelität finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Fassen Sie zusammen, wie Sie die Nginx-Leistung bei hoher Parallelität optimieren können
  • Eine kurze Diskussion über die Kerneloptimierung mit hoher Parallelität bei Nginx10m+
  • Detaillierte Erläuterung der Nginx-Optimierung in Szenarien mit hoher Parallelität
  • Nginx+Lua+Redis erstellt hochparallele Webanwendungen

<<:  Verwenden Sie reines CSS, um einen Scroll-Schatteneffekt zu erzielen

>>:  MySQL-Optimierungslösung: Aktivieren Sie das Protokoll für langsame Abfragen

Artikel empfehlen

MySQL-Optimierungslösung: Aktivieren Sie das Protokoll für langsame Abfragen

Inhaltsverzeichnis Vorwort Einrichten der Protoko...

Einführung in die MySQL-Ansicht und Tutorial zur grundlegenden Bedienung

Vorwort Ansicht ist ein sehr nützliches Datenbank...

Allgemeine Probleme mit der Regelpriorität beim Nginx-Standort

Inhaltsverzeichnis 1. Standort / Matching 2. Stan...

Tutorial zu HTML-Tabellen-Tags (13): Regeln für interne Rahmenstilattribute

Mit REGELN kann die Art der inneren Rahmen der Ta...

MySQL-Optimierung: InnoDB-Optimierung

Lernpläne werden leicht unterbrochen und es ist s...

Document Object Model (DOM) in JavaScript

Inhaltsverzeichnis 1. Was ist DOM 2. Elemente aus...

Zusammenfassung ungewöhnlicher JS-Operationsoperatoren

Inhaltsverzeichnis 2. Komma-Operator 3. JavaScrip...

Implementierung des klassischen CSS-Sticky-Footer-Layouts

Was ist ein Sticky-Footer-Layout? Unser übliches ...

Implementierung eines Web-Rechners mit nativem JavaScript

In diesem Artikel wird der spezifische JavaScript...