Link Aggregation Lastverteilungs-Algorithmen

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

Link Aggregation nach IEEE 802.1AX-2008 (früher IEEE 802.3ad) ermöglicht die Verteilung von Netzwerk-Traffic über mehrere Links. Der Standard gibt im Kapitel 5.2.4 Frame Distributor allerdings keine genauen Vorgaben wie die Ethernet Frames verteilt werden müssen.

In diesem Artikel zeigen wir wie die diversen Hersteller die Frame Verteilung des ausgehenden Traffics implementieren. Diese Informationen erleichtern Ihnen die richtige Konfiguration Ihrer Komponenten für eine effektive Lastverteilung des Netzwerk-Traffics.

NVIDIA Cumulus Linux

Bei der Hash-Berechnung zur Wahl des Links werden die Header-Daten des Pakets verwendet, um zu entscheiden, an welchen Slave das Paket übertragen werden soll:

  • Bei IP-Verkehr verwendet der Switch die Quell- und Zielfelder des IP-Headers für die Berechnung.
  • Bei IP- und TCP- oder UDP-Datenverkehr bezieht der Switch Quell- und Zielports in die Hash-Berechnung ein.

Zudem können durch Konfigurationseingriffe auch weitere Kriterien eingebunden werden.[1]

Cisco

Cisco Switche unterstützen je nach Modell bis zu neun unterschiedliche Frame Distribution Types. Diese können Sie über das distribution-type Kommando konfigurieren. Zu den unterstützten Frame Distribution Type zählen:[2]

  • src-mac — Source MAC addresses
  • dst-mac — Destination MAC addresses
  • src-dst-mac — Source and destination MAC addresses
  • src-ip — Source IP addresses
  • dst-ip — Destination IP addresses
  • src-dst-ip — Source and destination IP addresses (Default)
  • src-port — Source Layer 4 port
  • dst-port — Destination Layer 4 port
  • src-dst-port — Source and destination Layer 4 port

Im Infiniband-Bereich gibt es einen weiteren Modus:[3]

  • round robin

Linux

Linux unterstützt zwei mögliche Frame Distribution Algorithms (unter Linux als transmit hash policy to use for slave selection bezeichnet). Diese können Sie seit Bonding Version 2.6.3 über den xmit_hash_policy Parameter konfigurieren. Mögliche Werte für xmit_hash_policy sind:[4]

  • layer2 (vor Bonding Version 2.6.3 der einzige Algorithmus, ab Bonding Version 2.6.3 Standardeinstellung)
  • layer3+4 (optionaler Algorithmus, verfügbar ab Bonding Version 2.6.3)

Hinweis: Die hier bereitgestellten Informationen beziehen sich auf den Linux Bonding Treiber. Ab Linux Kernel 3.3 gibt es zusätzlich das Teaming Device im Userspace, auf dessen Eigenschaften hier noch nicht eingegangen wird.

layer2

Verwendet ein XOR der Ethernet Quell- und Zieladresse (MAC Adresse des Senders und MAC Adresse des Empfängers):

xmit_hash_policy layer2

Netzwerktraffic, der von diesem Linux-Rechner zu einem bestimmten anderen Rechner übertragen wird geht dabei immer über den gleichen Link (Slave). Netzwerktraffic zu unterschiedlichen Gegenstellen (unterschiedliche MAC Zieladressen) wird auf alle Links (Slaves) verteilt. Dieser Algorithmus ist vollständig 802.3ad compliant.

layer3+4

Dieser Algorithmus verwendet Informationen von höheren Protokollschichten, sofern verfügbar. Das ermöglicht die Verteilung von Traffic zwischen zwei direkten Netzwerk-Peers über mehrere Links (Slaves). Sind beispielsweise zwei Router so miteinander verbunden, werden die Ethernet Frames verteilt, da Informationen von höheren Protokollschichten (z.B. IP Adressen) in den Algorithmus einbezogen werden. Würden nur die MAC-Adressen (wie bei layer2) verwendet, ginge der Traffic immer über den selben Link (Slave). Eine einzelne Verbindung (von IP Adresse A zu IP Adresse B) geht aber nach wie vor immer nur über einen einzelnen Link.

Die Formel für unfragmentierte TCP und UDP Pakete lautet:

xmit_hash_policy layer3+4

Für fragmentierte TCP oder UDP Pakete und anderen IP Protokoll Traffik werden die Quell- und Ziel-Port Informationen ausgelassen. Für non-IP Traffik wird die Formel wie bei layer2 transmit hash policy verwendet.

Diese Policy zielt darauf ab, das Verhalten von bestimmen Switchen (Cisco Switche mit PFC2 sowie einige Foundry and IBM Produkte) nachzuahmen.

Diese Algorithmus ist nicht vollständig 802.3ad compliant. Eine einzelne TCP oder UDP Konversation, die sowohl fragmentierte als auch unfragmentierte Pakete enthält, kann dazu führen dass Pakete über zwei unterschiedliche Interfaces laufen. Das kann zu einer out-of-order Zustellung führen. Die meisten Traffic-Types haben allerdings nicht diese Eigenschaften. TCP wird selten fragmentiert. Und der meiste UDP Traffic ist nicht in derartigen erweiterten Konversationen enthalten. Andere Implementierungen von 802.3ad können diese Non-Compoliance tolerieren oder auch nicht.

FreeBSD

FreeBSD verwendet einen Hash des Protokoll Headers. Der Hash beinhaltet dabei:[5]

  • Ethernet Quell- und Zieladresse (MAC Adresse des Senders und MAC Adresse des Empfängers)
  • VLAN-tag (falls verfügbar)
  • IPv4/IPv6 Quell- und Zieladresse (falls verfügbar)

Frühere Switche

Im folgenden Abschnitt sind zu Dokumentationszwecken noch Beispiele von älteren Switchen erwähnt, die nicht mehr aktiv zum Verkauf angeboten werden.

NVIDIA ONYX

Mögliche Kriterien für die Wahl des Links bei Switchen mit NVIDIA ONYX Betriebssystem.[6]

NVIDIA beschreibt im Kapitel 5.3.3 Link Aggregation Group (LAG) - Commands des Mellanox Onyx User Manual folgende möglichen Methoden zur Lastverteilung:[6]

  • destination-ip
  • destination-mac
  • destination-port
  • source-destination-ip
  • source-destination-mac (Default)
  • source-destination-port
  • source-ip
  • source-mac
  • source-port

Standardmäßig werden also die Quell- und Ziel-MAC-Adressen (source-destination-mac) für die Wahl des Links verwendet. Es ist jedoch auch möglich mehrere Kriterien einzubeziehen, zum Beispiel:

switch (config)# port-channel load-balance ethernet destination-ip source-port source-ma

3Com

3Com beschreibt im Kapitel Load Sharing Criteria for Link Aggregation Groups des Switch 4500G Family Configuration Guide die möglichen Kritierien zur Lastverteilung. Sie können z.B. beim 3com 4500G eine der folgenden Kriterien (oder eine beliebige Kombination davon) auswählen:[7]

  • MAC addresses carried in packets
  • IP addresses carried in packets
  • Port numbers carried in packets

Konkret gibt es die folgenden möglichen Kriterien:

  • Use a source IP address alone.
  • Use a destination IP address alone.
  • Use a source MAC address alone.
  • Use a destination MAC address alone.
  • Combine a source IP address and a destination IP address.
  • Combine a source IP address and a source port number.
  • Combine a destination IP address and a destination port number.
  • Combine any two or all three of the following elements: ingress port number, source MAC address, and destination MAC address.

Intel Modular Server Ethernet Switch

Der Intel Modular Server Ethernet Switch verwendet eine MAC-basierte Lastverteilung:[8]

  • für bekannten Unicast:
    Selected_trunk_member = (6_LSB_Src_MAC Xor 6_LSB_Dst_MAC) % number_of_trunk_members_in_trunk_ID
  • für unbekannten Unicast/Multicast/Broadcast:
    Selected_trunk_member = (3_LSB_Src_MAC Xor 3_LSB_Dst_MAC) % number_of_trunk_members_in_trunk_ID

6_LSB und 3_LSB stehen jeweils für die sechs bzw. drei 'Least Significant Bits' (also die letzten sechs bzw. drei Bits). Die Funktionsweise einer solchen MAC-basierten Lastverteilung sind weiter unten im Bereich Nortel erklärt.

Nortel

Nortel bietet Link Aggregation unter der Bezeichnung Multi-Link Trunking (MLT). Bei den Ethernet Routing Switches der 5000 Series können Sie zwischen folgenden Load-Balancing Alorithmen wählen:[9]

  • MAC-based (basic) load balancing
  • IP-based (advanced) load balancing

Nortel verwendet dabei folgenden Algorithmus:

{(A XOR B) MOD x}

Die Variablen A und B haben dabei folgende Bedeutungen:

  • im MAC-based (basic) load balancing mode:
    A und B stehen für die letzten drei (least significant) Bits in der Quell- und Ziel-MAC-Adresse.
    x steht für die Anzahl der aktiven MLT Links.
  • im IP-based (advanced) load balancing mode
    A und B stehen für die letzten drei (least significant) Bits in der Quell- und Ziel-IP-Adresse.
    x steht für die Anzahl der aktiven MLT Links.

Beispiel MAC-based load balancing

In diesem Beispiel mit vier aktiven Links werden Daten von der folgenden Quell- zur Ziel-MAC-Adresse übertragen:

  • Quell-MAC-Adresse: 0x0000A4F8B321 - das letzte Byte ist 0x21 (= Binär 00100001) - die letzten drei Bits sind also 001
  • Ziel-MAC-Adresse: 0x0000A2123456 - das letzte Byte ist 0x56 (= Binär 01010110) - die letzten drei Bits sind also 110

Somit lautet hier die Formel zur Auswahl des Links:

{(001 XOR 110) MOD 4}
001 XOR 110 = 111 (binär) = 7 (dezimal)
7 MOD 4 (dezimal) = 3 (dezimal)

Es wird also der Link Nummer 3 verwendet.

Einzelnachweise


Foto Werner Fischer.jpg

Autor: Werner Fischer

Werner Fischer arbeitet im Product Management Team von Thomas-Krenn. Er evaluiert dabei neueste Technologien und teilt sein Wissen in Fachartikeln, bei Konferenzen und im Thomas-Krenn Wiki. Bereits 2005 - ein Jahr nach seinem Abschluss des Studiums zu Computer- und Mediensicherheit an der FH Hagenberg - heuerte er beim bayerischen Server-Hersteller an. Als Öffi-Fan nutzt er gerne Bus & Bahn und genießt seinen morgendlichen Spaziergang ins Büro.


Das könnte Sie auch interessieren

10 Gigabit Ethernet
BiDi Transceiver
Link Layer Discovery Protocol