Network Interface Bonding besteht aus der Aggregation von zwei oder mehr physischen Netzwerkschnittstellen, die als slaves
bezeichnet werden , unter einer logischen Schnittstelle namens master
oder bond
Schnittstelle. Je nach Verbindungsmodus kann eine solche Einrichtung nützlich sein, um Fehlertoleranz und/oder Lastausgleich zu erreichen. In diesem Tutorial lernen wir die verfügbaren Bonding-Modi kennen und wie man ein Netzwerk-Bonding unter RHEL 8 / CentOS 8 erstellt.
In diesem Tutorial lernen Sie:
- Was ist Network Interface Bonding
- So konfigurieren Sie Netzwerkschnittstellen-Bonding auf RHEL 8 / CentOS 8
- Was sind die verschiedenen Bindungsmodi
Der Bond-Status, wie er vom Linux-Kernel gesehen wird
Softwareanforderungen und verwendete Konventionen
Kategorie | Anforderungen, Konventionen oder verwendete Softwareversion |
---|---|
System | RHEL 8 / CentOS 8 |
Software | Das Dienstprogramm nmtui zur Steuerung des NetworkManager-Daemons. Die Anwendung ist in einer minimalen Systeminstallation enthalten. |
Andere | Root-Rechte zum Ändern von Systemeinstellungen |
Konventionen | # – erfordert, dass bestimmte Linux-Befehle mit Root-Rechten ausgeführt werden, entweder direkt als Root-Benutzer oder durch Verwendung von sudo Befehl$ – erfordert, dass bestimmte Linux-Befehle als normaler, nicht privilegierter Benutzer ausgeführt werden |
Welcher Verbindungsmodus?
Es gibt grundsätzlich 7 Bindungsmodi, die wir verwenden können:
Round Robin
Pakete werden gleichmäßig in sequentieller Reihenfolge an alle Slave-Schnittstellen (von der ersten bis zur letzten) verteilt. Dieser Modus bietet sowohl Lastausgleich als auch Fehlertoleranz, benötigt jedoch Unterstützung auf den Switches.
Aktive Sicherung
Es wird nur die primäre Slave-Schnittstelle verwendet. Wenn es fehlschlägt, wird an seiner Stelle ein anderer Slave verwendet. Es bietet nur Fehlertoleranz; es gibt keine besonderen Anforderungen.
XOR (exklusives ODER)
Abhängig vom Hash der Quell- und Ziel-MAC-Adressen, berechnet mit der folgenden Formel:
, werden Pakete übertragen und einem der Slave-Interfaces zugewiesen[(source MAC address XOR’d with destination MAC address) modulo slave count]
Dieser Modus bietet sowohl Fehlertoleranz als auch Lastenausgleich.
Ausstrahlung
Wenn dieser Modus verwendet wird, werden alle Pakete auf allen Slave-Schnittstellen übertragen, wodurch Fehlertoleranz, aber kein Lastausgleich bereitgestellt wird.
802.3ad
Dieser Modus nutzt die IEEE 802.3ad Link Aggregation, die auf den Switches unterstützt werden muss. Erstellt Aggregationsgruppen mit denselben Geschwindigkeits- und Duplexeinstellungen. Sendet und empfängt auf allen Slaves in der aktiven Gruppe. Bietet sowohl Lastausgleich als auch Fehlertoleranz.
Adaptive Lastverteilung beim Senden
Ausgehende Pakete werden abhängig von ihrer Auslastung über die Slave-Schnittstellen übertragen, und eingehender Datenverkehr wird vom aktuellen Slave empfangen. Fällt dieser aus, übernimmt ein anderer Slave dessen MAC-Adresse. Dieser Modus bietet Fehlertoleranz und Lastausgleich.
Adaptives Load-Balancing
Funktioniert wie das Adaptive Transmit Load Balancing
, stellt aber auch inbound
zur Verfügung Ausgleich über ARP
(Address Resolution Protocol) Verhandlung.
Die Umwelt
Für dieses Tutorial arbeiten wir an einem virtualisierten Red Hat Enterprise Linux 8 System. Um unsere Netzwerkbindung zu erstellen, werden wir mit nmtui
arbeiten , ein Dienstprogramm für die Textbenutzeroberfläche, das zur Steuerung von NetworkManager
verwendet wird Dämon. Die gleichen Operationen können jedoch mit nmcli
durchgeführt werden Befehlszeilendienstprogramm oder über die GUI mit dem Network Manager Connection Editor
.
Das System verfügt derzeit über zwei ethernet
Links, enp1s0
und enp7s0
:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:cb:25:82 brd ff:ff:ff:ff:ff:ff 3: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:32:37:9b brd ff:ff:ff:ff:ff:ff
Erstellen der Netzwerkverbindung
Als erstes löschen wir die aktuell vorhandenen Konfigurationen für die Slave-Schnittstellen. Dies ist nicht unbedingt erforderlich, da wir solche Konfigurationen an Ort und Stelle bearbeiten könnten, aber um von vorne zu beginnen, werden wir auf diese Weise vorgehen. Rufen wir nmtui
auf :
$ sudo nmtui
Aus dem Hauptmenü wählen wir „Verbindung bearbeiten“ und bestätigen.
Nmtui-Hauptmenü.
Wir wählen zuerst die zu löschende Verbindung in der Liste aus und gehen dann weiter zu <Delete>
. Abschließend bestätigen wir:
Nmtui-Verbindungsliste.
Abschließend bestätigen wir, dass wir die Verbindung löschen möchten:
Nmtui-Bestätigungsaufforderung zum Löschen einer bestehenden Verbindung.
Wir wiederholen den Vorgang für die andere Schnittstelle. Sobald wir alle vorhandenen Konfigurationen entfernt haben, können wir die bond
erstellen Schnittstelle. Wir wählen <Add>
im Menü und aus der Liste der Verbindungstypen wählen wir Bond
:
Auswahlmenü für den Nmtui-Verbindungstyp.
Es öffnet sich ein neues Fenster, in dem wir unsere Schnittstelle konfigurieren können. In diesem Fall verwende ich, auch wenn es völlig optional ist, bond0
sowohl als Profil- als auch als Gerätename. Der wichtigste Teil ist jedoch die Auswahl der Slave-Schnittstellen, die dem Bond hinzugefügt werden sollen. In den BOND Slaves
Menü auf <Add>
klicken , und wählen Sie den Typ der hinzuzufügenden Slave-Verbindung aus, in diesem Fall ethernet
.
Nmtui-Menü zur Auswahl des Slave-Verbindungstyps.
Geben Sie den Gerätenamen ein, wählen Sie <OK>
und bestätigen. Der Vorgang muss für jede der Slave-Schnittstellen wiederholt werden.
Nmtui-Schnittstelle zum Bearbeiten der Slave-Verbindung.
Im nächsten Schritt wählen Sie den bonding mode
aus :Für dieses Tutorial verwenden wir Active Backup
ein. Wir wählen die entsprechende Option im Menü und geben im Feld „Primär“ den Namen der primären Slave-Schnittstelle an. Zum Schluss wählen wir einfach <OK>
um die Erstellung der Bindungsschnittstelle zu bestätigen.
Das Network-Bonding-Setup.
Wir können jetzt das nmtui
verlassen Anwendung. Um zu überprüfen, ob die Bindungserstellung erfolgreich war, können wir den folgenden Befehl ausführen:
$ ip addr show bond0
Das Ergebnis ist folgendes:
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 52:54:00:cb:25:82 brd ff:ff:ff:ff:ff:ff inet 192.168.122.164/24 brd 192.168.122.255 scope global dynamic noprefixroute bond0 valid_lft 3304sec preferred_lft 3304sec inet6 fe80::48:d311:96c1:89dc/64 scope link noprefixroute valid_lft forever preferred_lft forever
Die ifcfg
Konfigurationsdateien, die sich auf unsere Konfiguration beziehen, wurden innerhalb von /etc/sysconfig/network-scripts
generiert Verzeichnis:
$ ls /etc/sysconfig/network-scripts ifcfg-bond0 ifcfg-enp1s0 ifcfg-enp7s0
Um den aktuellen Status von bond0
anzuzeigen Schnittstelle, wie sie vom Kernel gesehen wird, können wir ausführen:
$ cat /proc/net/bonding/bond0
Die Ausgabe des Befehls ist unten aufgeführt:
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: fault-tolerance (active-backup) Primary Slave: enp1s0 (primary_reselect always) Currently Active Slave: enp1s0 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: enp1s0 MII Status: up Speed: Unknown Duplex: Unknown Link Failure Count: 0 Permanent HW addr: 52:54:00:cb:25:82 Slave queue ID: 0 Slave Interface: enp7s0 MII Status: up Speed: Unknown Duplex: Unknown Link Failure Count: 0 Permanent HW addr: 52:54:00:32:37:9b Slave queue ID: 0
Wir können sehen, wie beide Slave-Schnittstellen aktiv sind, aber nur enp1s0
aktiv ist, da es als primärer Slave verwendet wird.
Testen der aktiven Sicherung
Wie können wir überprüfen, ob unsere Konfiguration funktioniert? Wir können die primäre Slave-Schnittstelle herunterfahren und sehen, ob die Maschine immer noch auf Pings reagiert. Um die Schnittstelle herunterzufahren, führen wir Folgendes aus:
$ sudo ip link set enp1s0 down
Reagiert die Maschine noch? Lassen Sie es uns überprüfen:
$ ping -c3 192.168.122.164 PING 192.168.122.164 (192.168.122.164) 56(84) bytes of data. 64 bytes from 192.168.122.164: icmp_seq=1 ttl=64 time=0.385 ms 64 bytes from 192.168.122.164: icmp_seq=2 ttl=64 time=0.353 ms 64 bytes from 192.168.122.164: icmp_seq=3 ttl=64 time=0.406 ms --- 192.168.122.164 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 88ms rtt min/avg/max/mdev = 0.353/0.381/0.406/0.027 ms
Es tut! Mal sehen, wie sich der Status der Anleihe geändert hat:
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) Bonding Mode: fault-tolerance (active-backup) Primary Slave: enp1s0 (primary_reselect always) Currently Active Slave: enp7s0 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: enp1s0 MII Status: down Speed: Unknown Duplex: Unknown Link Failure Count: 1 Permanent HW addr: 52:54:00:cb:25:82 Slave queue ID: 0 Slave Interface: enp7s0 MII Status: up Speed: Unknown Duplex: Unknown Link Failure Count: 0 Permanent HW addr: 52:54:00:32:37:9b Slave queue ID: 0
Wie Sie sehen können, da wir die primäre Slave-Schnittstelle heruntergefahren haben (enp1s0
), der andere Slave, enp7s0
wurde als Backup verwendet und ist jetzt das aktuell aktive. Außerdem der Link Failure Count
für den primären Slave erhöht und ist jetzt 1
.
Schlussfolgerungen
In diesem Tutorial haben wir gelernt, was ein Netzwerk-Bonding ist und welche Möglichkeiten es gibt, ein Netzwerk-Bonding zu konfigurieren. Außerdem haben wir mit Active Backup
eine Netzwerkverbindung zwischen zwei Ethernet-Schnittstellen erstellt Modus. Mit Red Hat Enterprise Linux 7 wurde ein neues Konzept eingeführt, network teaming
. In einigen Aspekten ähnelt Teaming dem Bonding, ist aber anders implementiert und hat mehr Funktionen. Wir werden es in zukünftigen Artikeln behandeln.