Open Source im professionellen Einsatz

Linux-Server an ein hochverfügbares Netzwerk anbinden

Doppelt reißfest

Wenn in einem hochverfügbaren Netzwerk eine Komponente ausfällt, darf dies die Funktionstüchtigkeit des Netzes nicht beeinträchtigen. Der Bonding-Kerneltreiber auf Servern schaltet dafür automatisch zwischen mehreren Netzwerk-Schnittstellen des Servers um, die an jeweils anderen Switches hängen.

Knack! - und ein Port am Switch im lokalen Netz fällt aus. Der normale Effekt: Bis der Fehler bemerkt ist und ein Techniker ihn lokalisiert und behebt, vergeht viel wertvolle Zeit. Eine redundante physikalische Verbindung zwischen Server und Switch hätte die Folgen des Hardwaredefekts automatisch abgefangen und kein Netzwerk-Server oder -Client hätte etwas bemerkt.

Zur Verwaltung so einer hochverfügbaren Netzwerkanbindung enthält der Kernel den Bonding-Treiber, der den Traffic automatisch auf eine zweite Ethernet-Netzwerkschnittstelle umleitet - und das sogar transparent für alle angeschlossenen Geräte. Ein Shellskript hilft den Bonding-Verbund überwachen.

Verkabeln für hochverfügbares Netzwerk

In einem hochverfügbarem Netzwerk übernehmen zwei Switches die Funktion eines einzelnen. Jeder Rechner ist über einen weiteren Netzwerk-Controller mit einem Patchkabel am zweiten Switch angebunden. Dabei entscheidet jeder Rechner auch, welchen Switch er verwendet. Ausgehende Pakete senden die Rechner nur an diesen aktiven Switch. Ankommende Pakete finden auf beiden Interfaces Einlass.

Fällt ein Switch zum Beispiel wegen eines Defekts im Netzteil aus, migrieren alle Server ihre aktiven Interfaces auf den verbleibenden Switch und die Server können weiterhin über das Netzwerk Daten austauschen. Fällt jedoch ein Interface aus, ist das oben beschriebene Netzwerk nicht mehr vollständig: Der betroffene Rechner kann keine Pakete von den anderen entgegennehmen, die mit ihren aktiven Interfaces ebenfalls an diesem Switch hängen. Daher verbindet ein Cross-over-Kabel die beiden Switches und bildet einen Switch-Interconnect.

Vorher ist unbedingt zu prüfen, ob die Switches schon über die Uplinks miteinander verbunden sind. Diese Verbindung führt zu einer Schleife, die bei der Verkabelung per Ethernet nicht erlaubt ist.

Wer glaubt, dass der Switch diesen Fehler per Spanning-Tree-Protokoll (STP)[1] abfängt, wiegt sich in trügerischer Sicherheit. STP sollte eine überflüssige Verbindung zwar ignorieren und die Verfügbarkeit des Netzwerks damit erhöhen. In der Praxis bringt jedoch häufig schon ein einziges defektes Gerät im Baum das Protokoll aus dem Tritt und lässt dabei gleich das ganze Rechenzentrum offline gehen.

Bonding-Treiber aktivieren

Im Kernel implementiert der »Bonding«-Treiber die Funktionalität, um das aktive Netzwerk-Interface zu wechseln. Er legt sich zwischen die Netzwerkkarten-Treiber und TCP/IP (Abbildung 1). Die Dokumentation ist in »linux/Documentation/networking/bonding.txt« zu finden und auch online einzusehen, unter anderem auf[2].

Abbildung 1: Der Bonding-Treiber fungiert als Vermittlungsschicht zwischen dem Treiber der Netzwerkkkarte und TCP/IP.

Abbildung 1: Der Bonding-Treiber fungiert als Vermittlungsschicht zwischen dem Treiber der Netzwerkkkarte und TCP/IP.

Der Treiber liegt in der Kernel-Config unter »Network device support | Bonding driver support«. Er muss unbedingt als Modul vorliegen, da der Treiber einige Einstellungen als Modulparameter direkt übergeben bekommt. Bei einem monolithisch gebauten Kernel müsste das System bei jeder Konfigurationsänderung des Bonding-Treibers neu starten, was natürlich als Downtime zählt und in einem hochverfügbarem Umfeld generell abträglich ist.

Der wichtigste Parameter für das Bonding-Modul ist der Bonding-Modus, der per »mode= N« in der Datei »/etc/modules« hinterlegt ist. Mögliche Werte für N sind 0 für Round Robin (Default), 1 für Active Backup und 2 für XOR (siehe Kasten "Die Bonding-Modi"). In einem hochverfügbaren Netzwerk kommt der Modus 1 (Active Backup) zum Einsatz.

Die Bonding-Modi

Der Bonding-Treiber hat drei Betriebsmodi: Round Robin, Active Backup und XOR. Alle drei akzeptieren Pakete an allen Interfaces. Der Betriebsmodus regelt lediglich, über welches Interface Pakete das System verlassen. Der Round-Robin-Modus - also 0 - ist in Kombination mit Switches, die Link-Aggregation unterstützen, interessant. Er bündelt die Kapazität mehrerer Interfaces zu einer dicken Verbindung, die entsprechend mehr Bandbreite bereitstellt. In einem derartigen Setup sind alle zu einem Bonding-Interface gehörenden physischen Interfaces mit dem gleichen Switch verbunden, zusätzlich ist Link-Aggregation am Switch für die entsprechenden Ports aktiviert. Im Round-Robin-Modus verteilen sich die ausgehenden Pakete gleichmäßig auf alle Interfaces.

Der Active-Backup-Modus (1) ist für hochverfügbare Umgebungen geeignet. Hier ist immer ein Interface das aktive. Das andere akzeptiert zwar Pakete, sendet jedoch keine. Dadurch lassen sich die Interfaces mit unterschiedlichen Switches verbinden, ohne dabei die Forwarding-Tabellen der Switches dadurch zu verwirren, dass Pakete vom selben Rechner ständig aus unterschiedlichen Richtungen kommen. Wenn der Bonding-Treiber das aktive Interface ändert, sieht es für die Switches aus, als wäre der Rechner mit einem anderen Switch verbunden.

Der XOR-Modus (2) verwendet das Resultat einer XOR-Verknüpfung zwischen den Hardware-Adressen des Absenders und des Empfängers eines Pakets, um zu entscheiden, über welches Interface das Paket zu verschicken ist. Der Modus erlaubt es, etwas Ähnliches wie Link-Aggregation mit Switches zu implementieren, die Link-Aggregation nicht direkt unterstützen.

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook