Netzwerk/bonding

Aus SchnallIchNet
< Netzwerk(Weitergeleitet von Netzwerk/NIC bonding)
Wechseln zu: Navigation, Suche

02.04.2007 : Die Begriffe "NIC-Bonding" und "Link Aggregation" stehen für die logische Zusammenfassung von 2 oder mehreren physikalischen Netzwerkkarten, um entweder ein Load-Balancing und/oder eine höhere Ausfallsicherheit zu erreichen...

Gehen wir einmal von dem Beispiel aus, daß man ein Server in seinem LAN hat, über den erstens extrem viel Datenverkehr läuft und der zweitens absolut nicht ausfallen darf (in diesem Beispiel geht es um eine defekte Netzwerkkarte oder einen defekten Port an dem entsprechenden Switch). Mittels "NIC-Bonding" kann man nun zwei physikalische Netzwerkkarten zu einer neuen, logischen zusammenfassen.

Zur Vorbereitung sollte unser Server zwei Netzwerkkarten eingebaut bekommen, die auch vom Linux-Kernel erkannt werden. In meinem Beispiel sollen die beiden Karten "eth1" und "eth2" zusammengefasst werden. Zurerst schauen wir aber mittels "mii-tool" (apt-get install mii-diag), ob die Links in Ordnung sind :

mii-tool
eth0: negotiated 100baseTx-FD, link ok
eth1: negotiated 100baseTx-FD, link ok
eth2: negotiated 100baseTx-FD, link ok


Nun sollten wir die Module "bonding" (für das eigentliche Zusammenfassen) und "mii" (für die Überwachung des Link-Status) laden (und am besten auch gleich in die Datei /etc/modules eintragen, damit sie beim nächsten Bootvorgang automatisch geladen werden) :

modprobe bonding
modprobe mii

Bei einem "ifconfig -a" sollte man jetzt bereits ein neues Interface mit Namen "bond0" sehen :

mars:~# ifconfig -a
bond0    Link encap:Ethernet  HWaddr 00:00:00:00:00:00
        BROADCAST MASTER MULTICAST  MTU:1500  Metric:1
        RX packets:0 errors:0 dropped:0 overruns:0 frame:0
        TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:0
        RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

...

Nun brauchen wir noch das Debian-Paket "ifenslave" :

apt-get install ifenslave

Als nächstes editieren wir mit dem Texteditor unserer Wahl die Datei /etc/modprobe.d/aliases und fügen ff. Zeilen hinzu (meine Netzwerkkarten brauchen den "via_rhine"-Treiber - das muss entsprechend angepasst werden) :

alias bond0 bonding
alias eth1 via_rhine
alias eth2 via_rhine
options bonding mode=0 miimon=100

Anmerkung zum bonding mode:

Modus Bezeichnung Zweck Beschreibung
0 balance-rr Lastverteilung & Ausfallsicherheit Die genutzte Netzwerkschnittstelle wird im Round-Robin-Verfahren festgelegt, das heißt die verfügbaren Schnittstellen werden in Senderichtung wechselweise genutzt. In Empfangsrichtung kann max. die Geschwindigkeit einer einzelnen Schnittstelle erreicht werden - je mehr Teilnehmer, umso mehr Upload-Gesamtbandbreite, denn diese werden auf die übrigen freien Schnittstellen aufgeteilt.
1 active-backup Ausfallsicherheit Nur eine Schnittstelle ist aktiv, im Fehlerfalle wird eine der anderen im Verbund genutzt. die Netzwerkkarten können über verschiedene Switches angebunden werden.
2 balance-xor Lastverteilung & Ausfallsicherheit Es wird für jede Gegenstelle im Netzwerk eine zu nutzende Netzwerkschnittstelle zugewiesen, die Zuordnung geschieht über den Modulo der Division zwischen der Formel (Quell-MAC-Adresse XOR Ziel-MAC-Adresse) und der Anzahl der Slave-Schnittstellen.
3 broadcast Ausfallsicherheit Daten werden auf allen Netzwerkschnittstellen gesendet. Die Nutzung mehrerer Switches ist möglich.
4 802.3ad Lastverteilung & Ausfallsicherheit 802.3ad ist ein Standard der IEEE, der die Bündelung mehrerer Schnittstellen mit gleichen Übertragungseinstellungen (Geschwindigkeit und Duplex-Einstellungen) erlaubt, um eine höhere Bandbreite zu erhalten. Es kann nur ein Switch verwendet werden, dieser muss 802.3ad unterstützen. ethtool oder mii-tool wird benötigt.
5 balance-tlb Lastverteilung Es wird für jede Gegenstelle im Netzwerk eine zu nutzende Netzwerkschnittstelle zugewiesen. Das Verfahren hierzu ist jedoch komplexer und effizienter als bei balance-xor. Das Programm ethtool wird benötigt.
6 balance-alb Lastverteilung Erweitertes balance-tlb, zusätzlich zur MAC-basierten Zuordnung der Schnittstellen für ausgehende Verbindungen werden eingehende Verbindungen auf die Schnittstellen verteilt. Das Programm ethtool wird benötigt.


Ferner sollte ff. Zeile in die Datei /etc/modprobe.d/actions :

probeall bond0 eth1 eth2 bonding

Mit ff. Aufruf werden die Konfigurationsdateien mit den eben gemachten Verädnerungen aktualisiert :

update-modules

Nun editieren wir die Konfigurationsdatei für die Interfaces und IP-Adresse /etc/network/interfaces :

auto bond0
       iface bond0 inet static
       address 192.168.0.100
       netmask 255.255.255.0
       hwaddress ether 00:40:33:E2:65:87
       gateway 192.168.0.1
       up ifenslave bond0 eth1 eth2
       down ifenslave -d bond0 eth1 eth2
Achtung.jpeg für die Karten eth1 und eth2 bitte keine(!) Konfiguration vornehmen!!

Nun laden wir das "bonding"-Modul nochmal neu ...

rmmod bonding
modprobe bonding

... und starten unser Netzwerk neu :

/etc/init.d/networking stop
/etc/init.d/networking start

Sollten keine Fehler zu sehen sein, sollte man bei dem Aufruf von "ifconfig -a" nun bei den Interfaces "bond0", "eth1" und "eth2" überall die gleichen MAC- und IP-Adressen sehen.

Nun kann man spasseshalber einmal das Netzwerkkabel von "eth1" oder "eth2" ziehen und sich die Kernel-Meldungen anschauen, man sollte so etwas wie "eth1 has failed, eth2 becoming primary" usw. sehen.

Verbindet man die beiden Netzwerkkarten über verschiedene Switches oder VLANs, erhöht man entsprechend die Ausfallsicherheit. Bei unserem Beispiel werden die Netzwerkpakete im sogenannten "Round-Robin-Verfahren" verteilt, sprich, sie werden abwechselnd über die eine und die andere Netzwerkkarte versendet.

Neben unserem Beipiel (bonding mode=0 - siehe oben) gibt es noch andere Bonding-Verhaltensvarianten: alle verfügbanre Modi sind in der Kernel-Dokumentation "kernel/Documentation/net/bonding.txt" im Detail aufgeführt.

Achtung.jpeg bei bestimmten Bonding-Methoden bedarf es spezieller Switches,

beispielsweise bei der Bonding-Methode "802.3ad". Bei den Varianten "active-backup", "balance-tlb" und "balance-alb" bedarf es keiner spezieller Switches.