Ethernet bonding Konfiguration IEEE 802.3ad (LACP)

Bei Ethernet bonding geht es um ein Verfahren zur Bündelung mehrerer physikalischer LAN-Schnittstellen zu einem logischen Kanal. LACP (=Link Aggregation Control Protocol) ist ein Netzwerkprotokoll nach IEEE 802.3ad zur dynamischen Bündelung von physikalischen Netzwerkverbindungen.

Außerdem sind folgende Bezeichnungen gängig:

  • Bonding, im Linux Umfeld.
  • Etherchannel, bei Cisco.
  • Link Aggregation (LAG), bei IEEE
  • Port Aggregation, bei Hewlett-Packard.
  • Trunking, bei Sun Microsystems, aber auch bei anderen Herstellern.
  • Bündelung, als deutscher Begriff für die Ethernet-Kanal-Bündelung.

Ziele der Bündelung sind im Allgemeinen eine höhere mögliche Übertragungsgeschwindigkeit und/oder höhere Verfügbarkeit.

Grundlegende Verfahren:

  • Roundrobin: Hier werden alle zur Verfügung stehenden Leitungen abwechselnd der Reihe nach benutzt.
  • DA-Trunking: Hier wird anhand des Modulo der Destination-MAC-Adresse die elementare Schnittstelle gewählt.
  • SA-Trunking: Hier wird anhand des Modulo der Source-MAC-Adresse die elementare Schnittstelle gewählt.
  • SA-DA-Trunking: Hier wird anhand des Modulo der Source-MAC-Adresse und der Destination-MAC-Adresse die elementare Schnittstelle gewählt.
  • Adaptives-Trunking: Hier wird erst bei 100% Auslastung der ersten elementaren Schnittstelle eine weitere zugeschaltet.
  • Dynamisches-Trunking: Mit Hilfe des proprietären PAgPs, oder des IEEE konformen LACP lassen sich dynamische Etherchannels definieren.
Modus Name Nummer Switch-config-Änderung nötig? Ziel Funktion
balance-rr 0 N load balancing und Fehlertoleranz Pakete werden gleichmäßig im round-robin-Verfahren über die Slaves verteilt
active-backup 1 N Fehlertoleranz Nur der Primary ist aktive, Slaves werden nur aktiv falls dieser ausfällt; in diesem Fall wird gratuitous ARPs auf dem Slave ausgeführt und wieder auf den Primary zurückgeschaltet sobald dieser verfügbar wird.
balance-xor 2 N load balancing und Fehlertoleranz Pakete werden nach einer einer XOR-Policy (xmit_hash_policy) über die Schnittstellen verteilt
broadcast 3 N Fehlertoleranz Pakete werden über alle Schnittstellen rausgesendet
802.3ad 4 J load balancing mehrere Schnitstellen mit gleichen Charakteristiken (Geschwindigkeit/Duplex-mode) werden zu einem Bündel konfiguriert. Achtung: unterschiedliche Switche setzen den 802.3ad mode u.U. anders um.
balance-tlb 5 N adaptives load balancing und Fehlertoleranz mehrere Schnitstellen werden zu einem Bündel konfiguriert, je nachdem ob tlb_dynamic_lb auf 0 oder 1 gesetzt ist, wird der Datenverkehr nach Hash-Funktion oder Last (relativ zum maximal-speed) verteilt. Ausfälle von Slaves werden durch übernahme der MAC aufgefangen.
balance-alb 6 N adaptives load balancing und Fehlertoleranz wie balance-tlb, nur das auch der empfangene Traffic über die Slaves ausbalanciert wird, durch Umschreibung der ARP-Antworten bzw. Aushandlung.

Einstellungen

aptitude install ifenslave-2.6

Bei neueren System heißt das Paket etwas anders:

aptitude install ifenslave

Beispiel: Zwei Netzwerkkarten em1 und em2, im Fehlerfall (Switchausfall, Kabel gezogen etc.) soll vom master (em1) auf die zweite Karte (em2) umgeswitcht werden.

Die Datei /etc/network/interfaces könnte so aussehen:

auto em1
iface em1 inet manual
	bond-master bond0
	bond-primary em1
	bond-mode active-backup

auto em2
iface em2 inet manual
	bond-master bond0
	bond-primary em1
	bond-mode active-backup

auto bond0
iface bond0 inet static
	address x.x.x.x
	netmask 255.255.255.0
	network y.y.y.0
	broadcast y.y.y.255
	gateway y.y.y.1
	# dns-* options are implemented by the resolvconf package, if installed
	dns-nameservers z1.z1.z1.z1 z2.z2.z2.z2

	bond_mode active-backup
	bond-slaves none
	bond_miimon 100  # monitoring frequency in ms
	bond_downdelay 200 # wait time before disabling or enabling an interface in ms
	bond_updelay 200

Primary anzeigen:

cat /sys/class/net/bond0/bonding/primary

Slaves anzeigen:

cat /sys/class/net/bond0/bonding/slaves

Aktiver Slave:

cat /sys/class/net/bond0/bonding/active_slave
#! /bin/sh
 
echo "Slaves = $(cat /sys/class/net/bond0/bonding/slaves)"
echo "Primary = $(cat /sys/class/net/bond0/bonding/primary)"
echo "Active Slave = $(cat /sys/class/net/bond0/bonding/active_slave)"
 
r=$(pidof dhclient)
test -n "$r" && ps $r
 
r=$(pidof wpa_supplicant)
test -n "$r" && ps $r
cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: em1 (primary_reselect always)
Currently Active Slave: em1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200

Slave Interface: em1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 84:2b:2b:de:ad:a0
Slave queue ID: 0

Slave Interface: em2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 84:2b:2b:de:ad:a2
Slave queue ID: 0

Ein Um- und zurückschwenken auf die Slave-Leitung und wieder zurück sieht so aus:

bnx2 0000:01:00.0 em1: NIC Copper Link is Down
bond0: link status down for active interface em1, disabling it in 200 ms
bond0: link status definitely down for interface em1, disabling it
bond0: making interface em2 the new active one
bnx2 0000:01:00.0 em1: NIC Copper Link is Up, 1000 Mbps full duplex
bond0: link status up for interface em1, enabling it in 200 ms
bond0: link status definitely up for interface em1, 1000 Mbps full duplex
bond0: making interface em1 the new active one

siehe auch: https://wiki.debian.org/Bonding

  • 2 oder mehr Bonding-Geräte: modprobe bonding max_bonds=2

FIXME