Was sind die Unterschiede zwischen den Channel-Bonding-Modi unter Linux?


8

Unter Linux können Sie mehrere Netzwerkschnittstellen zu einer "verbundenen" Netzwerkschnittstelle kombinieren, um ein Failover bereitzustellen.

Es gibt jedoch mehrere Modi, von denen einige keine Switch-Unterstützung erfordern. Ich bin bei meinem Wechsel nicht darauf beschränkt, dass ich einen der Modi verwenden kann.

Beim Lesen über die verschiedenen Modi ist jedoch nicht sofort klar, welche Vor- und Nachteile die einzelnen Modi haben.

  1. Bieten einige Modi ein schnelleres Failover?
  2. Was ist mit den Auswirkungen auf die CPU-Last für jeden Modus?
  3. Welche Modi können die Bandbreite kombinieren, anstatt nur Redundanz bereitzustellen?
  4. Gibt es Einschränkungen dafür?
  5. Benötigt balance-rr Schalterunterstützung?
  6. Verlässlichkeit? Welche Erfahrungen haben Sie langfristig gemacht?

Sie haben das Kernel-Bonding-Howto gelesen , nicht wahr ? Es sollte Ihre Fragen beantworten.
The-Wabbit

Ja, es sagt Ihnen bis zu einem gewissen Grad, was sie tun. Es sagt Ihnen jedoch nicht, wie gut sie in einer Produktionsumgebung funktionieren. Einige sagen "keine Switch-Unterstützung erforderlich". Während andere keinen Kommentar haben und Sie raten lassen.
Matt

Ich bin mir nicht sicher, warum die Abstimmung. Dies ist eine absolut gültige Frage und zum Thema, nicht wahr?
Matt

Wer auch immer die Abwärtsabstimmung und / oder die Abschlussabstimmung durchgeführt hat, geben Sie bitte einen Grund an, damit ich zumindest die Chance bekommen kann, die Frage zu verbessern.
Matt

Ich vermute, dass die Abstimmung abgelehnt wurde, weil die Art und Weise, wie Ihre Frage gestellt wird, den Anschein erweckt, als hätten Sie nicht viel recherchiert oder die Dokumentation gelesen, bevor Sie sie gestellt haben. Siehe den Tooltipp zum Abstimmen.
Zoredache

Antworten:


9
  1. Der größte Faktor beim Failover ist die Geschwindigkeit, mit der ein Verbindungsfehler erkannt wird. Ziehen Sie das Kabel vom Host ab und alle funktionieren ziemlich gut. Lassen Sie einen Live-Link auf einem ansonsten toten Switch und die meisten Modi (mit Ausnahme derjenigen, die Beacons / Keepalives unterstützen) senden einen Teil Ihres Datenverkehrs nirgendwo hin.

  2. Im Allgemeinen ist der Netzwerkverkehr Interrupt-gesteuert. Die verschiedenen Hashing-Algorithmen werden keinen bedeutenden Unterschied machen.

  3. Jeder Modus, der nicht aktiv / Standby oder Broadcast-All ist, teilt den Datenverkehr in unterschiedlichem Maße. Einige Modi können pro Paket ausgeglichen werden, andere arbeiten pro Fluss. Ersteres verteilt die Last gleichmäßiger, während letzteres in tatsächlichen Netzwerken weitaus nützlicher ist (sprich: funktional / stabil).

  4. Ja, es gibt Einschränkungen für jeden Modus, aber wir müssen viel mehr über Ihre Anwendung wissen, um mit ihnen sprechen zu können.

  5. Nur LACP / 802.3ad (Modus 4) erfordert ausdrücklich die Unterstützung des Switches. Nur weil Sie mit einem bestimmten Muster an den Switch senden, bedeutet dies nicht, dass der Switch auf die gleiche Weise an Sie zurücksendet.

  6. Der einzige Modus, dem ich in der Produktion eher vertraue, ist 802.3ad, der mit einem entsprechend konfigurierten Switch sicherstellt, dass nur die richtigen Links im Kanal landen, und ein gewisses Maß an Symmetrie bei der gemeinsamen Nutzung des Datenverkehrs und eine vorhersehbare Reaktion bietet, wenn a Link ist ausgefallen. Dieser Modus vermeidet auch einige häufig auftretende, aber unangenehme Probleme (z. B. Unicast-Flooding). Aktiv / Standby ist ebenfalls weit verbreitet. Die anderen Modi können unter bestimmten Umständen erforderlich sein, sind jedoch meiner Meinung nach schmerzhafter.

Andere Flow / MAC / IP-basierte Ausgleichsmodi oder Aktiv / Standby können ebenfalls in Ordnung sein und sind möglicherweise erforderlich, wenn nicht verwaltete Switches verwendet werden.


10

Die meisten dieser Punkte werden in der /usr/src/linux/Documentation/networking/bonding.txtDokumentationsdatei aus dem Linux-Quellpaket Ihrer Lieblingsdistribution ausführlich beschrieben . Die Failover-Geschwindigkeit wird für die meisten Modi über den Parameter "miimon" gesteuert, sollte jedoch nicht zu niedrig eingestellt werden. Normalwerte liegen sowieso unter einer Sekunde.

Hier sind die besten Teile, die ich fertiggestellt habe:

   balance-rr or 0
       Round-robin policy: Transmit packets in sequential
       order from the first available slave through the
       last. This mode provides load balancing and fault
       tolerance. 


   active-backup or 1
       Active-backup policy: Only one slave in the bond is
       active.  A different slave becomes active if, and only
       if, the active slave fails. The bond's MAC address is
       externally visible on only one port (network adapter)
       to avoid confusing the switch.

       This mode provides fault tolerance. The "primary"
       option affects the behavior of this mode.

   balance-xor or 2
       XOR policy: Transmit based on the selected transmit
       hash policy.  The default policy is a simple [(source
       MAC address XOR'd with destination MAC address) modulo
       slave count].  Alternate transmit policies may be
       selected via the xmit_hash_policy option.

       This mode provides load balancing and fault tolerance.

   broadcast or 3
       Broadcast policy: transmits everything on all slave
       interfaces.  This mode provides fault tolerance.

   802.3ad or 4
       IEEE 802.3ad Dynamic link aggregation.  Creates
       aggregation groups that share the same speed and
       duplex settings.  Utilizes all slaves in the active
       aggregator according to the 802.3ad specification.

       Slave selection for outgoing traffic is done according
       to the transmit hash policy, which may be changed from
       the default simple XOR policy via the xmit_hash_policy
       option. Note that not all transmit policies may be 802.3ad
       compliant, particularly inregards to the packet mis-ordering
       requirements of section 43.2.4 of the 802.3ad standard.
       Differing peer implementations will have varying tolerances for
       noncompliance.

       Note: Most switches will require some type of configuration
       to enable 802.3ad mode.

   balance-tlb or 5
       Adaptive transmit load balancing: channel bonding that
       does not require any special switch support.  The
       outgoing traffic is distributed according to the
       current load (computed relative to the speed) on each
       slave.  Incoming traffic is received by the current
       slave.  If the receiving slave fails, another slave
       takes over the MAC address of the failed receiving
       slave.

   balance-alb or 6
       Adaptive load balancing: includes balance-tlb plus
       receive load balancing (rlb) for IPV4 traffic, and
       does not require any special switch support.

       When a link is reconnected or a new slave joins the
       bond the receive traffic is redistributed among all
       active slaves in the bond by initiating ARP Replies
       with the selected MAC address to each of the
       clients. The updelay parameter must
       be set to a value equal or greater than the switch's
       forwarding delay so that the ARP Replies sent to the
       peers will not be blocked by the switch.

balance-rr, active-backup, balance-tlb und balance-alb benötigen keine Switch-Unterstützung.

balance-rr steigert die Leistung zum Preis der Fragmentierung, ist bei einigen Protokollen (CIFS) und bei mehr als 2 Schnittstellen schlecht.

balance-alb und balance-tlb funktionieren möglicherweise nicht mit allen Schaltern ordnungsgemäß. Es gibt häufig einige Arp-Probleme (einige Computer können beispielsweise keine Verbindung herstellen). Möglicherweise müssen Sie verschiedene Einstellungen (miimon, updelay) anpassen, um ein stabiles Netzwerk zu erhalten.

balance-xor erfordert möglicherweise eine Switch-Konfiguration oder nicht. Sie müssen eine Schnittstellengruppe ( nicht LACP) für HP- und Cisco-Switches einrichten , aber anscheinend ist dies für D-Link-, Netgear- und Fujitsu-Switches nicht erforderlich.

802.3ad erfordert unbedingt eine LACP-Gruppe auf der Switch-Seite. Es ist insgesamt die am besten unterstützte Option zur Leistungssteigerung.

Hinweis: Was auch immer Sie tun, eine Netzwerkverbindung wird immer über eine und nur eine physische Verbindung hergestellt. Wenn Sie also GigE-Schnittstellen aggregieren, kann eine Dateiübertragung von Maschine A zu Maschine B nicht mehr als 1 Gigabit / s betragen, selbst wenn jede Maschine über 4 aggregierte GigE-Schnittstellen verfügt (unabhängig vom verwendeten Bonding-Modus).


Beachten Sie, dass 802.3ad die Verwendung von LACP nicht vorschreibt. LACP ist nur ein Steuerprotokoll für die Konfiguration der dynamischen Verbindungsaggregation. Ohne LACP können Sie ein statisches LA-Setup durchführen.
The-Wabbit

1
Das stimmt, aber die meisten Switches erlauben keine Konfiguration der statischen Linkaggregation und rufen Aggregate im "LACP-Modus" auf.
Wazoox

802.3ad definiert sowohl statisches LA als auch LACP. Wenn ein Switch behauptet, 802.3ad zu erfüllen, muss er beide implementieren. Jedes Switch-Modell, das ich zur Hand hatte und das LACP implementierte, implementierte auch statisches LA.
The-Wabbit

1

Die Kerneldokumente beantworten einige dieser Fragen:

Ethernet-Bonding


1
Bitte verbringen Sie einige Zeit damit, diese Antwort zu verbessern, ohne nur einen Link bereitzustellen. Der Link ist nützlich, aber die Antworten hier sollten mehr als nur ein Link zur Dokumentation sein.
Zoredache

Danke für diesen Link. Abschnitt 12.1.1 Auswahl des MT-Bonding-Modus für die Einzelschaltertopologie ist das, wonach ich gesucht habe.
Matt

Ja, deshalb habe ich den Link nur kommentarlos
eingefügt ;-)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.