LACP mit Cisco unter CentOS konfigurieren

LACP-Setup

LACP-Setup

Verfügt ein Host über mehrere physische Netzwerkadapter, empfiehlt sich die Bündelung der einzelnen Kanäle. Häufig ist die Motivation für eine solche Konfiguration die Erhöhung der maximalen Durchsatzrate. Ein anderer Ansatz ist die Erhöhung der Ausfallsicherheit durch das Definieren von alternativen Netzwerkpfaden. LACP (Link Aggregation Control Protocol, 802.3ad-Standard) kombiniert beide Ansätze, indem mehrere physische Adapter logisch gruppiert werden. Solange genügend physische Pfade existieren, können alle zeitgleich verwendet werden, um Netzwerkverkehr frameweise zu verteilen (zusammenhängende Sitzungen sind hiervon nicht betroffen, um korrekte Paketreihenfolgen zu gewährleisten). Fällt ein Netzwerkpfad aus, wird dies erkannt und der Netzwerkkanal entsprechend neu konfiguriert – man spricht hier auch von dynamischer Kanalbündelung. LACP muss sowohl vom Switch als auch vom angeschlossenen Host unterstützt werden, da eine automatische Konfiguration zwischen beiden Parteien stattfindet.

Switch-Vorbereitungen

Die Konfiguration auf dem Switch variiert je nach Hersteller und Modell. Ich verwende in meinem Home-Lab einen Cisco SG300-28 L3-Switch – hier kann die Konfiguration wie folgt über die Web-Oberfläche vorgenommen werden:

  1. Anklicken von Port Management > Link Aggregation > LAG Management im Seitenmenü links.
  2. Auswählen eines freien LAG-Ports und Anklicken von Edit.
  3. Angeben eines sinnvollen Namens und Auswählen der zu verwendenden Switchports. Bestätigen mit Apply.
  4. Für erweiterte Einstellungen (wie beispielsweise Port Auto-Negotiation, optional): anwählen von LAG Settings im Seitenmenü links. Auswählen des Ports und Anklicken von Edit.
Cisco LAG-Einstellungen

Cisco LAG-Einstellungen

Konfiguration unter CentOS

Die Konfiguration unter Linux variiert je nach Distribution. Ich setze CentOS ein – die folgenden Schritte müssen bei anderen Linux-Distributionen wohl abgeändert werden.

Zuerst muss dafür gesorgt werden, dass das Kernel-Modul für Netzwerk-Bündelung (bonding) beim Booten geladen wird. Für das Modul wird ein Alias der zukünftigen virtuellen Netzwerkkarte vergeben – beispielsweise bond0 für den ersten Bond. Sollen mehrere Bündelungen konfiguriert werden, können mehrere Einträge definiert werden – beispielsweise bond1 und bond2. Anschließend wird das Modul geladen:

# echo "alias bond0 bonding" > /etc/modprobe.d/bonding.conf
# modprobe bond0

Anschließend werden die einzelnen Konfigurationen der Netzwerkschnittstellen angepasst. Bereits vorhandene IP-Informationen werden entfernt und die Schnittstelle als Slave definiert. Bei Enterprise Linux-basierten Linux-Distributionen liegen diese Konfigurationsdateien unterhalb /etc/sysconfig/network-scripts:

# vi /etc/sysconfig/network-scripts/ifcfg-eno1
NAME="eno1"
DEVICE="eno1"
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes

ESC ZZ

Der Schritt wird für alle weiteren Netzwerk-Schnittstellen wiederholt. Anschließend wird eine Konfigurationsdatei für das Bond-Interface erstellt:

# vi /etc/sysconfig/network-scripts/ifcfg-bond0
NAME="bond0"
DEVICE="bond0"
BONDING_OPTS="mode=4 miimon=100"
ONBOOT=yes
BOOTPROTO=static
...

ESC ZZ

Besonders wichtig ist die Zeile BONDING_OPTS, sie definiert Optionen für den Bonding-Treiber. Der Parameter mode gibt hier den Modus des Bondings an, der Wert 4 steht für LACP. miimon definiert die Zeitspanne in Millisekunden, in denen die Netzwerkverbindung auf Konnektivität überprüft wird. Je kleiner der Wert, desto schneller werden Netzausfälle erkannt – 100 ist ein gängiger Standardwert.

Anschließend wird das Netzwerk neugestartet – alternativ kann auch mit ifup lediglich der neu definierte Bond gestartet werden:

# service network restart
# ifup bond0

Wenn alles funktioniert hat, sind im /proc-Dateisystem jetzt Informationen über das Teaming verfügbar:

# less /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

802.3ad info
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
 Aggregator ID: 1
 Number of ports: 2
 Actor Key: 9
 Partner Key: 1000
 Partner Mac Address: xx:xx:xx:xx:xx:xx

Slave Interface: eno1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: xx:xx:xx:xx:xx:xx
...
Slave Interface: eno2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: xx:xx:xx:xx:xx:xx
...

In der Web-Oberfläche des Cisco-Switchs sind nun auch die aktiven Links sichtbar (Port Management > Link Aggregation > LAG Management):

LAG-Links

LAG-Links

Fällt nun ein Link aus, wird dies wie folgt in der Cisco-Weboberfläche (Standby-Member) und im Linux-System angezeigt:

Standby LAG-Link

Standby LAG-Link

# dmesg
...
[277202.078630] tg3 0000:03:00.0 eno1: Link is down
[277202.079761] bond0: link status definitely down for interface eno1, disabling it
[277202.079796] bond0: first active interface up!
# less /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
...
802.3ad info
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
        Aggregator ID: 1
        Number of ports: 1
...
Slave Interface: eno1
MII Status: down
Speed: Unknown
Duplex: Unknown
Link Failure Count: 2
...

Schreibe einen Kommentar