Wir haben eine Intel I340-T4-Netzwerkkarte mit 4 Ports in einen FreeBSD 9.3-Server 1 eingebaut und für die Verbindungsaggregation im LACP-Modus konfiguriert , um die Zeit zum Spiegeln von 8 bis 16 TiB Daten von einem Master-Dateiserver auf 2 zu verkürzen. 4 Klone parallel. Wir hatten erwartet, eine Gesamtbandbreite von bis zu 4 Gbit / s zu erreichen, aber egal, was wir versucht haben, es kommt nie schneller als eine Gesamtbandbreite von 1 Gbit / s heraus. 2
Wir verwenden dies iperf3
, um dies in einem ruhenden LAN zu testen. 3 Die erste Instanz erreicht erwartungsgemäß fast einen Gigabit, aber wenn wir eine zweite parallel starten, sinken die Geschwindigkeit der beiden Clients auf ungefähr ½ Gbit / s. Durch Hinzufügen eines dritten Clients werden die Geschwindigkeiten aller drei Clients auf ~ ⅓ Gbit / s usw. gesenkt.
Wir haben beim Einrichten der iperf3
Tests darauf geachtet , dass der Datenverkehr von allen vier Testclients über verschiedene Ports in den zentralen Switch gelangt:
Wir haben überprüft, dass jeder Testcomputer einen unabhängigen Pfad zurück zum Rack-Switch hat und dass der Dateiserver, seine Netzwerkkarte und der Switch über die Bandbreite verfügen, um dies zu erreichen, indem wir die lagg0
Gruppe aufteilen und jedem eine separate IP-Adresse zuweisen der vier Schnittstellen auf dieser Intel-Netzwerkkarte. In dieser Konfiguration haben wir eine Gesamtbandbreite von ~ 4 Gbit / s erreicht.
Als wir diesen Pfad eingeschlagen haben, haben wir dies mit einem alten verwalteten SMC8024L2-Switch getan . (PDF-Datenblatt, 1,3 MB.) Es war nicht der High-End-Switch seiner Zeit, aber es soll dazu in der Lage sein. Wir dachten, der Switch könnte aufgrund seines Alters fehlerhaft sein, aber ein Upgrade auf einen viel leistungsfähigeren HP 2530-24G hat das Symptom nicht geändert.
Der HP 2530-24G-Switch behauptet, die vier fraglichen Ports seien tatsächlich als dynamischer LACP-Trunk konfiguriert:
# show trunks
Load Balancing Method: L3-based (default)
Port | Name Type | Group Type
---- + -------------------------------- --------- + ----- --------
1 | Bart trunk 1 100/1000T | Dyn1 LACP
3 | Bart trunk 2 100/1000T | Dyn1 LACP
5 | Bart trunk 3 100/1000T | Dyn1 LACP
7 | Bart trunk 4 100/1000T | Dyn1 LACP
Wir haben sowohl passives als auch aktives LACP ausprobiert.
Wir haben überprüft, dass alle vier NIC-Ports Datenverkehr auf der FreeBSD-Seite erhalten mit:
$ sudo tshark -n -i igb$n
Seltsamerweise tshark
zeigt sich, dass bei nur einem Client der Switch den 1-Gbit / s-Stream auf zwei Ports aufteilt, anscheinend zwischen ihnen. (Sowohl der SMC- als auch der HP-Switch zeigten dieses Verhalten.)
Da die Gesamtbandbreite der Clients nur an einem einzigen Ort zusammenkommt - am Switch im Server-Rack - ist nur dieser Switch für LACP konfiguriert.
Es spielt keine Rolle, in welchem Client wir zuerst starten oder in welcher Reihenfolge wir sie starten.
ifconfig lagg0
auf der FreeBSD-Seite sagt:
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=401bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,VLAN_HWTSO>
ether 90:e2:ba:7b:0b:38
inet 10.0.0.2 netmask 0xffffff00 broadcast 10.0.0.255
inet6 fe80::92e2:baff:fe7b:b38%lagg0 prefixlen 64 scopeid 0xa
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
media: Ethernet autoselect
status: active
laggproto lacp lagghash l2,l3,l4
laggport: igb3 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
laggport: igb2 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
laggport: igb1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
laggport: igb0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
Wir haben so viele Ratschläge im FreeBSD-Netzwerk-Tuning-Handbuch angewendet, wie es für unsere Situation sinnvoll ist. (Vieles davon ist irrelevant, wie das Zeug über das Erhöhen der maximalen FDs.)
Wir haben versucht , das Auslagern der TCP-Segmentierung zu deaktivieren , ohne die Ergebnisse zu ändern.
Wir haben keine zweite 4-Port-Server-Netzwerkkarte, um einen zweiten Test einzurichten. Aufgrund des erfolgreichen Tests mit 4 separaten Schnittstellen gehen wir davon aus, dass keine Hardware beschädigt ist. 3
Wir sehen diese Wege vorwärts, keiner von ihnen ist ansprechend:
Kaufen Sie einen größeren, schlechteren Switch, in der Hoffnung, dass die LACP-Implementierung von SMC einfach nur scheiße ist und der neue Switch besser wird.(Ein Upgrade auf einen HP 2530-24G hat nicht geholfen.)Starren Sie noch einmal auf die FreeBSD-
lagg
Konfiguration und hoffen Sie, dass wir etwas verpasst haben. 4Vergessen Sie die Link-Aggregation und verwenden Sie stattdessen Round-Robin-DNS, um den Lastausgleich zu bewirken.
Ersetzen Sie die Server-Netzwerkkarte und wechseln Sie erneut, diesmal durch 10-GigE- Daten, was etwa dem 4- fachen der Hardwarekosten dieses LACP-Experiments entspricht.
Fußnoten
Warum nicht zu FreeBSD 10 wechseln? Da FreeBSD 10.0-RELEASE weiterhin ZFS-Pool Version 28 verwendet und dieser Server auf ZFS-Pool 5000 aktualisiert wurde, eine neue Funktion in FreeBSD 9.3. Die 10. x- Zeile wird das erst erhalten, wenn FreeBSD 10.1 in etwa einem Monat ausgeliefert wird . Und nein, eine Neuerstellung von der Quelle auf die 10.0-STABLE-Aktualisierung ist keine Option, da dies ein Produktionsserver ist.
Bitte springen Sie nicht zu Schlussfolgerungen. Unsere Testergebnisse später in der Frage zeigen Ihnen, warum dies kein Duplikat dieser Frage ist .
iperf3
ist ein reiner Netzwerktest. Während das letztendliche Ziel darin besteht, diese 4-Gbit / s-Aggregatleitung von der Festplatte zu füllen, ist das Festplattensubsystem noch nicht beteiligt.Vielleicht fehlerhaft oder schlecht designt, aber nicht kaputter als beim Verlassen der Fabrik.
Ich habe schon die Augen verschränkt.
Antworten:
Welcher Lastausgleichsalgorithmus wird sowohl auf dem System als auch auf dem Switch verwendet?
Alle meine Erfahrungen damit sind unter Linux und Cisco, nicht unter FreeBSD und SMC, aber die gleiche Theorie gilt immer noch.
Der Standardmodus für den Lastausgleich im LACP-Modus des Linux-Bonding-Treibers und bei älteren Cisco-Switches wie dem 2950 besteht darin, nur anhand der MAC-Adresse auszugleichen.
Dies bedeutet, wenn der gesamte Datenverkehr von einem System (Dateiserver) zu einem anderen MAC (entweder einem Standard-Gateway oder einer geschalteten virtuellen Schnittstelle auf dem Switch) geleitet wird, sind der Quell- und der Ziel-MAC identisch, sodass immer nur ein Slave verfügbar ist verwendet werden.
In Ihrem Diagramm sieht es nicht so aus, als würden Sie Datenverkehr an ein Standard-Gateway senden, aber ich bin nicht sicher, ob sich die Testserver in 10.0.0.0/24 befinden oder ob sich die Testsysteme in anderen Subnetzen befinden und über weitergeleitet werden eine Layer 3-Schnittstelle am Switch.
Wenn Sie auf dem Switch routen, gibt es Ihre Antwort.
Die Lösung hierfür besteht darin, einen anderen Lastausgleichsalgorithmus zu verwenden.
Auch hier habe ich keine Erfahrung mit BSD oder SMC, aber Linux und Cisco können entweder anhand von L3-Informationen (IP-Adresse) oder L4-Informationen (Portnummer) einen Ausgleich erzielen.
Da jedes Ihrer Testsysteme eine andere IP haben muss, versuchen Sie, einen Ausgleich basierend auf L3-Informationen vorzunehmen. Wenn dies immer noch nicht funktioniert, ändern Sie einige IP-Adressen und prüfen Sie, ob Sie das Lastausgleichsmuster ändern.
quelle
Load Balancing Method: L3-based (default)
. Versuchen Sie dies zu ändern.