Network Bonding & Teaming on RHEL (Artikel 082)
Konfiguration von Hochverfügbarkeit auf Netzwerk-Ebene. Vergleich zwischen klassischem Bonding und dem (veralteten) Teaming-Konzept in der Red Hat Familie.
# Bonding & Teaming: Redundantes Netzwerk unter RHEL
TL;DR / Management Summary In der RHEL-Welt gab es lange zwei parallele Konzepte für die Bündelung von Netzwerkkarten: Bonding (Kernel-basiert) und Teaming (User-Space-basiert via
teamd). Wichtigste Info: Ab RHEL 9 ist Teaming offiziell veraltet (deprecated). Wir setzen im Enterprise-Umfeld wieder voll auf das klassische Linux-Bonding, da es performanter ist und eine bessere Hardware-Unterstützung bietet. Das Ziel: Ausfallsicherheit gegen Switch- oder Kabeldefekte.
# 1. Einführung & Architektur
Bonding vs. Teaming.
- Bonding: Läuft im Kernel. Es ist schnell, robust und wird von fast allen Tools unterstützt.
- Teaming: Wollte die Komplexität in den User-Space verlagern, konnte sich aber nie durchsetzen und wird nun von Red Hat wieder entfernt.
# Der Bond-Workflow (Mermaid)
graph TD
A[Logical Device: bond0] --> B[Slave NIC 1: eth0]
A --> C[Slave NIC 2: eth1]
B --- D[Switch A]
C --- E[Switch B]
subgraph "Modes"
F[Active-Backup: Mode 1]
G[LACP: Mode 4]
end
A --- F
A --- G
# 2. LACP Bond erstellen (Enterprise Standard)
Maximale Bandbreite und Redundanz.
Wir nutzen LACP (802.3ad), was einen Switch-Stack oder einen Switch mit LACP-Support voraussetzt.
# Schritt 1: Bond-Master anlegen
sudo nmcli con add type bond con-name bond0 ifname bond0 bond.options "mode=802.3ad,miimon=100"
# Schritt 2: Physikalische Slaves hinzufügen
sudo nmcli con add type ethernet con-name bond0-port1 ifname eth0 master bond0
sudo nmcli con add type ethernet con-name bond0-port2 ifname eth1 master bond0
# Schritt 3: IP auf dem Bond setzen
sudo nmcli con mod bond0 ipv4.addresses 192.168.10.20/24 ipv4.method manual
sudo nmcli con up bond0
# 3. Active-Backup (Wenn der Switch kein LACP kann)
Der sicherste Failover-Weg.
Hier ist nur eine Karte aktiv. Die zweite übernimmt erst, wenn der Link der ersten Karte stirbt.
sudo nmcli con add type bond con-name bond0 ifname bond0 bond.options "mode=active-backup,miimon=100"
# 4. Day-2 Operations: Status & Diagnose
Funktioniert das Failover?
# Den Kernel-Status prüfen (Die Wahrheit)
cat /proc/net/bonding/bond0
Hier sehen Sie:
- Welcher Port aktuell
Activeist. - Ob der
LACP Partner(Switch) korrekt antwortet. - Wie viele
Link Failuresaufgetreten sind.
# NetworkManager Sicht
nmcli con show bond0
# 5. Troubleshooting & “War Stories”
Wenn der Link hakt.
# Story 1: “Der LACP-Blackout”
Symptom: Nach dem Aktivieren von LACP ist der Server nicht mehr erreichbar. cat /proc/net/bonding/bond0 zeigt, dass keine LACP-Pakete vom Switch empfangen werden.
Ursache: Der Switch-Port steht noch auf “Access” und nicht auf “LACP / Port-Channel”.
Lösung: Stellen Sie sicher, dass der Switch-Admin den channel-group mode active gesetzt hat. Tipp: Nutzen Sie erst active-backup, um den Zugriff zu behalten, während Sie den Switch konfigurieren.
# Story 2: “MTU-Mismatch beim Bonding”
Symptom: Der Bond ist up, aber große Pakete (NFS/iSCSI) gehen verloren.
Ursache: Die Slaves haben unterschiedliche MTU-Werte oder der Bond-Master hat eine andere MTU als die Slaves.
Lösung: Setzen Sie die MTU immer auf dem Bond-Master. Der NetworkManager wendet dies automatisch auf die Slaves an:
sudo nmcli con mod bond0 802-3-ethernet.mtu 9000.
# 6. Fazit & Empfehlung
- RHEL 9: Nutzen Sie kein Teaming mehr. Migrieren Sie bestehende Teaming-Konfigurationen zu Bonding.
- Monitoring: Überwachen Sie
/proc/net/bonding/bondX. Ein Server, der auf einer Karte “humpelt”, ist ein ungelöstes Ticket. - miimon: Ein Wert von
100msist der Enterprise-Standard für die Überprüfung des Link-Status.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Bond Status (Kernel) | cat /proc/net/bonding/bond0 |
| Bond-Optionen ändern | nmcli con mod bond0 bond.options "mode=1,miimon=100" |
| Slaves anzeigen | `nmcli con show |
| Slave entfernen | nmcli con delete bond0-port1 |
| Primary Slave setzen | nmcli con mod bond0 bond.options "primary=eth0" |