Ausgleich des Datenverkehrs zwischen Webservern mithilfe von IP CEF auf Netzwerkgeräten

Die Aufgabe bestand darin, eine fehlertolerante Lösung für zwei Webserver zu implementieren und nach Möglichkeit einen Lastausgleich zwischen Webservern zu implementieren, da manchmal eine Datenbank nicht alle Anforderungen erfüllen konnte. Es war nicht möglich, spezielle Geräte zu kaufen, in deren Zusammenhang das folgende Schema erfunden wurde. Vielleicht ist die Idee nicht originell, aber im Internet habe ich so etwas nicht gefunden. Unsere Topologie lautet wie folgt:

Mein Bild
Es gibt einen Cisco Router, der Webserver ins Internet bringt. Zwei Webserver unter Centos 7 mit Nginx. Die IP-Adressen des ersten und zweiten Webservers lauten 192.168.20.176/24 bzw. 192.168.20.177/24. Um den Plan zu implementieren, müssen Webserver dieselbe sekundäre IP-Adresse festlegen. Dies kann eine beliebige private IP-Adresse sein, die in Ihrem Netzwerk nicht verwendet wird. Ich habe 192.168.120.175 ausgewählt und mit der sekundären IP-Adresse der eth0-Hauptschnittstelle der Webserver registriert. Unter Centos wird dazu die Datei eth0: 0 im Verzeichnis / etc / sysconfig / network-scripts / erstellt. Dateiinhalt:

TYPE="Ethernet" DEVICE=eth0:0 BOOTPROTO="static" IPADDR=192.168.120.175 NETMASK=255.255.255.255 ONBOOT="yes" 

Es ist wichtig zu beachten, dass die Maske 255.255.255.255 verwendet wird, wodurch IP-Konflikte vermieden werden, da Webserver sie nicht zum Generieren von Datenverkehr verwenden. Wir werden sozusagen Loopback-Schnittstellen auf Webservern haben.

Danach kann der Router den Lastausgleich mithilfe des statischen Routings implementieren. Diese Technologie wird mithilfe von IP Cef auf Cisco-Routern implementiert. Link hier . Andere Anbieter haben möglicherweise bestimmte Nuancen.

In Cisco kann die Thread-Verteilung auf zwei Arten erfolgen:

  • Pro Ziel (Standard). Wir brauchen diese Option. Alle Pakete eines Streams werden an einen von zwei Servern gesendet. Das Funktionsprinzip besteht darin, dass der Hash anhand der Quell- und Ziel-IP-Adressen berechnet wird und abhängig von diesem Hash entweder die erste Route (Server) oder die zweite ausgewählt wird. Als nächstes werden wir dieses Verhalten leicht ändern.
  • Pro Paket. Diese Option passt nicht zu uns, da der Ausgleich für Pakete erfolgt. Grob gesagt das erste Paket auf der ersten Route, das zweite Paket auf der zweiten.

Mit Hilfe der Befehle schreiben wir zwei Routen vor:

 ip route 192.168.120.175 255.255.255.255 GigabitEthernet0/0 192.168.20.176 ip route 192.168.120.175 255.255.255.255 GigabitEthernet0/0 192.168.20.177 

Somit werden beide Routen in der Routing-Tabelle installiert und entlang dieser wird eine Lastverteilung durchgeführt:

Mein Bild

Wir prüfen auch, ob die Ausgleichsmethode richtig ausgewählt ist:

Mein Bild

Die Quell-IP-Adresse ändert sich und die Ziel-IP bleibt immer in Ruhe. Dies kann bei NAT die Ausgleichsgleichmäßigkeit beeinträchtigen. Für die Optimierung können Sie den Quellport berücksichtigen, der je nach Client-Sitzung zufällig unterschiedlich ist. Verwenden Sie dazu den folgenden Befehl:

 ip cef load-sharing algorithm include-ports source 

Sie müssen auch statisches NAT konfigurieren, um Webanforderungen an die Adresse 192.168.120.175 umzuleiten:

 ip nat inside source static tcp 192.168.120.175 80 interface GigabitEthernet0/1 80 

Was bekommen wir? Anfragen von Benutzern aus dem Internet werden an unseren Router gesendet, der sie je nach Quellport in TCP nach Flows auf unsere Server verteilt. Wenn Sie eine neue Sitzung öffnen, gelangt der Client möglicherweise zum neuen Server.

Was passiert, wenn einer der Server abstürzt? Die Route, die zu diesem Server führte, wird aus der Routing-Tabelle entfernt. Um diesen Prozess zu optimieren, können Sie IP SLA verwenden. Überwachen Sie den Status von Servern, indem Sie alle 10 Sekunden einen Ping-Befehl senden:

 ip sla 10 icmp-echo 192.168.20.176 frequency 10 ip sla schedule 10 life forever start-time now ip sla 20 icmp-echo 192.168.20.177 frequency 10 ip sla schedule 20 life forever start-time now 

Fügen Sie als Nächstes die Überwachung zu den entsprechenden Routen hinzu:

 ip route 192.168.120.175 255.255.255.255 GigabitEthernet0/0 192.168.20.176 track 10 ip route 192.168.120.175 255.255.255.255 GigabitEthernet0/0 192.168.20.177 track 20 

IP SLA auf Cisco-Routern ermöglicht auch die Überwachung durch HTTP-GET-Anforderungen, mit deren Hilfe der Absturz des Webservers nicht nur durch seine Abwesenheit im Netzwerk, sondern auch bei Ausfall des Webdienstes ermittelt werden kann.

Um ein solches Schema zu erstellen, sind daher keine zusätzlichen Geräte und keine Software für Webserver erforderlich. Sie benötigen lediglich einen Router, der den Datenverkehr ausgleichen kann.

Source: https://habr.com/ru/post/de418915/


All Articles