====== 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: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.
===== Links =====
* [[https://www.kernel.org/doc/Documentation/networking/bonding.txt|Linux Ethernet Bonding Driver HOWTO]]
* [[wp>Channel bonding]]
* [[wp>Link aggregation]]
* [[wpde>Etherchannel]]
* [[http://www.thomas-krenn.com/de/wiki/Link_Aggregation_und_LACP_Grundlagen|Link Aggregation und LACP Grundlagen]]
* [[http://www.debianadmin.com/linux-ethernet-bonding-configuration.html|Linux Ethernet Bonding Configuration]]
===== Verfahren bei Linux =====
^ 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
===== Anwendung bei Windows =====
FIXME