Einleitung
In diesem Dokument werden Szenarien beschrieben, in denen eine Polarisierung beim Port-Channel-Lastenausgleich auftreten kann, und es werden Vorschläge gemacht, wie diese verhindert werden können.
Voraussetzungen
Anforderungen
Cisco empfiehlt, dass Sie über Kenntnisse in folgenden Bereichen verfügen:
Verwendete Komponenten
Dieses Dokument ist nicht auf bestimmte Software- und Hardware-Versionen beschränkt.
Die Informationen in diesem Dokument beziehen sich auf Geräte in einer speziell eingerichteten Testumgebung. Alle Geräte, die in diesem Dokument benutzt wurden, begannen mit einer gelöschten (Nichterfüllungs) Konfiguration. Wenn Ihr Netzwerk in Betrieb ist, stellen Sie sicher, dass Sie die möglichen Auswirkungen aller Befehle kennen.
Hintergrund
Bei der Polarisierung wählt der Hash-Algorithmus bestimmte Pfade im Netzwerk aus und lässt redundante Pfade ungenutzt.
Topologie
Konfiguration
N7K1 und N7K2 sind über VPC verbunden, und Po100, Po200, Po300 und Po301 befinden sich im VPC-Port-Channel.
N7K1 und N7K2 fungieren als reine L2-Switches, die nicht geroutet werden.
Auf allen Switches wird derselbe Algorithmus für den Port-Channel-Lastenausgleich ausgeführt.
Das Polarisationsproblem tritt bei Datenverkehr auf, der von N7K1 und N7K2 ausgeht, unabhängig davon, ob sich der Datenverkehr von der Quelle zum Ziel im gleichen VLAN (kein Routing) befand oder ob er sich in verschiedenen VLANs befand, während das Routing auf N7K3 oder N7k4 stattfindet.
Datenverkehrsfluss
Die Quelle sendet mehrere Streams an das Ziel (mit mehreren Quell- und Ziel-IP-Adressen, und die L4-Port-Informationen variieren auch von Paket zu Paket). Ein guter Mix aus Datenverkehr wird verwendet, um sicherzustellen, dass der Datenverkehr in einer idealen Situation gleichmäßig auf die Port-Channel-Teilnehmer-Schnittstellen verteilt wird.
Der Datenverkehr von der Quelle landet auf Nexus 7000/Nexus 7000 und wird dann über Nexus 7000/Nexus 7000 zum Ziel geleitet.
Eine der Verbindungen zwischen den Mitgliedsverbindungen von Po100 und Po200 auf jedem der N7K1 und N7K2 sendet fast 99 % des Datenverkehrs aus, und die andere Verbindung bleibt inaktiv. D. h., auf jedem Switch N7K1 und N7K2 überträgt eine der Verbindungen zwischen 4/2 und 4/3 99 % Unicast-Datenverkehr, während die andere Verbindung weniger als 1 % überträgt. Auf ähnliche Weise werden auf einer der Verbindungen mit den Nummern 92 und 93 99 % und auf der anderen Verbindung weniger als 1 % Datenverkehr übertragen. Die Ausgabe im Abschnitt zur Fehlerbehebung zeigt den Datenverkehr an den Schnittstellen der Po100- und Po200-Mitglieder auf N7K1. Eine ähnliche Ausgabe ist auf N7K2 zu sehen.
Unabhängig vom verwendeten Port-Channel-Lastenausgleichsalgorithmus kann das Problem erkannt werden, solange dasselbe Port-Channel-Lastenausgleichsalgorithmus für das N7K1/N7K2- und das N7K3/N7K4-Paar verwendet wird. Der Befehl zum Überprüfen des Port-Channel-Lastenausgleichsalgorithmus wird hier angezeigt:
N7K1# show port-channel load-balance
Warning: Per Packet Load balance configuration has higher precedence
System config:
Non-IP: src-dst mac
IP: src-dst ip-l4port-vlan rotate 0
Port Channel Load-Balancing Configuration for all modules:
Module 1:
Non-IP: src-dst mac
IP: src-dst ip rotate 0
Module 2:
Non-IP: src-dst mac
IP: src-dst ip rotate 0
Module 3:
Non-IP: src-dst mac
IP: src-dst ip rotate 0
Module 4:
Non-IP: src-dst mac
IP: src-dst ip-l4port-vlan rotate 0
Module 7:
Non-IP: src-dst mac
IP: src-dst ip-l4port-vlan rotate 0
Module 8:
Non-IP: src-dst mac
IP: src-dst ip-l4port-vlan rotate 0
Module 9:
Non-IP: src-dst mac
IP: src-dst ip-l4port-vlan rotate 0
Fehlerbehebung
Wenn auf einem Port-Channel ein ungleichmäßiger Lastenausgleich festgestellt wird, kann dies auf eine Polarisation zurückzuführen sein.
Wenn der Datenverkehr die Switches N7K3 und N7K4 erreicht, wird er über Po301 vom N7K4 und Po300 vom N7K3 an die Switches N7K1/N7K2 weitergeleitet. Hier greift der Lastenausgleichsalgorithmus ein, und einige Datenflüsse werden an N7K1 und andere an N7K2 weitergeleitet.
Zunächst gelangt der gesamte Datenverkehr in die Switches N7K3/N7K4 auf eth1/1. Basierend auf der src-dst-IP-Adresse und den l4-Port-Informationen werden bestimmte Datenflüsse auf der Verbindung zu N7K1 und andere Datenflüsse auf der Verbindung zu N7K2 gehasht. Das Hashing wird auf Basis des rbh-Werts durchgeführt, der vom Switch berechnet wird. Der Einfachheit halber sei angenommen, dass der Switch den eingehenden Datenverkehr basierend auf dem verwendeten Lastenausgleichsalgorithmus in zwei Datenflüsse (Fluss X und Fluss Y) aufteilt. Fluss X wird von einer Port-Channel-Member-Verbindung und Fluss Y von der anderen Port-Channel-Member-Verbindung gesendet.
Wenn der Datenverkehr jetzt auf dem N7K1/N7K2-Paar landet, können zwei Möglichkeiten bestehen. (X und Y sind austauschbar.)
Fall 1:
N7K3 sandte Fluss X an N7K1 und Fluss Y an N7K2
N7K4 sendet Fluss Y an N7K1 und Fluss X an N7K2
Fall 2:
N7K3 sandte Fluss X an N7K1 und Fluss Y an N7K2
N7K4 sendet Fluss X an N7K1 und Fluss Y an N7K2
Im Fall 1 empfangen N7K1 und N7K2 beide Arten von Datenflüssen (Fluss X und Fluss Y). Selbst wenn derselbe Port-Channel-Lastausgleichsalgorithmus wie der von N7K3/N7K4 verwendete Algorithmus verwendet wird, würde keine Polarisation erkannt, da die Datenflüsse aus Po100 und Po200 auf verschiedenen Verbindungen austreten. Daher wird eine bessere Datenverkehrsverteilung zwischen den Port-Channel-Mitgliederschnittstellen erzielt.
In Fall 2 empfängt N7K1 nur Fluss X und N7K2 nur Fluss Y. Dies könnte eine Polarisierung verursachen, wenn der für diese Switches verwendete Port-Channel-Lastausgleichsalgorithmus derselbe ist wie der für das N7K3/N7K4-Paar. Da N7K1 und N7K2 den gleichen Port-Channel-Lastenausgleichsalgorithmus verwenden, sendet N7K1 Datenfluss X nur für eine Po100/Po200-Mitgliedsverbindung, und die andere Mitgliedsverbindung leitet keinen Datenverkehr weiter. Ebenso sendet N7K2 den Fluss Y nur für eine Mitgliedsverbindung von Po100/Po200, und die andere Mitgliedsverbindung leitet keinen Datenverkehr weiter.
Da der Datenverkehr, den die Switches N7K1 und N7K2 empfangen, zu Beginn bereits klassifiziert ist, wird nur eine Port-Channel-Member-Verbindung verwendet, um den gesamten eingehenden Datenverkehr von Switch N7K1/N7K2 zu senden, und es wird nichts von der anderen Member-Verbindung gesendet. Wenn die eingehende Datenverkehrsrate die Bandbreite der einzelnen Port-Channel-Verbindung überschreitet, kann der zusätzliche Datenverkehr verworfen werden, da die andere Port-Channel-Teilnehmer-Verbindung diesen Datenverkehr nicht weiterleiten würde.
Ein ähnliches Problem tritt auf, wenn mehr als zwei Links im Port-Channel verwendet werden. Wenn beispielsweise vier Verbindungen in einem Port-Channel verwendet werden, würde je nach Hashing entweder keine Polarisierung auftreten, oder es würde eine teilweise Polarisierung auftreten, bei der nur zwei der vier Port-Channel-Member-Verbindungen für die Weiterleitung des gesamten eingehenden Datenverkehrs verwendet würden. Die anderen beiden Verbindungen würden nichts weiterleiten.
Die Polarisation wird durch die Konstruktion verursacht und daher ist es wichtig, die Konstruktion zu analysieren, um sicherzustellen, dass keine Polarisation auftritt. Als Nächstes wird die Ausgabe angezeigt, die anzeigt, dass eine Polarisation auf Po100 und Po200 auf N7k1 auftritt (eine ähnliche Ausgabe ist auch auf N7K2 zu sehen).
N7K1# show port-channel summary | i 200
200 Po200(SU) Eth LACP Eth9/2(P) Eth9/3(P)
N7K1# show port-channel traffic interface port-channel 200
NOTE: Clear the port-channel member counters to get accurate statistics
ChanId Port Rx-Ucst Tx-Ucst Rx-Mcst Tx-Mcst Rx-Bcst Tx-Bcst
------ --------- ------- ------- ------- ------- ------- -------
200 Eth9/2 0.0% 99.99% 44.44% 4.00% 0.0% 100.00%
200 Eth9/3 0.0% 0.00% 55.55% 96.00% 0.0% 0.0%
N7K1# show port-channel summary | i 100
100 Po100(SU) Eth LACP Eth4/2(P) Eth4/3(P)
N7K1# show port-channel traffic interface port-channel 100
NOTE: Clear the port-channel member counters to get accurate statistics
ChanId Port Rx-Ucst Tx-Ucst Rx-Mcst Tx-Mcst Rx-Bcst Tx-Bcst
------ --------- ------- ------- ------- ------- ------- -------
100 Eth4/2 0.0% 99.99% 40.55% 7.00% 0.0% 100.00%
100 Eth4/3 0.0% 0.00% 54.44% 93.00% 0.0% 0.0%
Problemumgehungen
In diesem Abschnitt werden einige der Problemumgehungen beschrieben, mit denen sichergestellt wird, dass keine Polarisierung auftritt.
- Richtiges Design: Da die Hauptursache für die Polarisation ein falsches Design ist, sollten Sie das Netzwerkdesign ändern, um sicherzustellen, dass in der Topologie kein Platz für Polarisation ist.
Wenn keine Änderungen am Design möglich sind, können Sie wie folgt vorgehen.
- Verwenden Sie auf jeder Switch-Ebene unterschiedliche Port-Channel-Lastenausgleichsalgorithmen (ein Algorithmus für das N7K1/N7k2-Paar und ein anderer Algorithmus für das N7K3/N7k4-Paar). Wenn der Lastenausgleichsalgorithmus geändert wird, hacken die N7k1/N7k2-Switches den eingehenden Datenverkehr auf der Grundlage anderer Informationen als denen, die von N7k3/N7k4-Switches verwendet werden. Aus diesem Grund verwendet der ausgehende Datenverkehr alle Port-Channel-Member-Links. (Die Entscheidung, welcher Algorithmus ausgewählt wird, hängt von der Art des Datenverkehrs ab, den der Switch empfängt.)
- Wenn Sie denselben Lastenausgleichsalgorithmus verwenden möchten, verwenden Sie auf jeder Ebene der Switches unterschiedliche Rotationswerte. Der
rotate Befehl fügt dem Hash-Algorithmus Zufallszahlen hinzu, indem er die Hash-Eingabe durch benutzerkonfigurierte Bytes ausgleicht. Dadurch wird eine Polarisierung vermieden. (Verwenden Sie einen Rotationswert für das N7k1/N7k2-Paar und einen anderen Rotationswert für das N7k3/N7k4-Paar.)