Bonding

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Agrégation/redondance de cartes réseau
Module noyau bonding
État runtime /proc/net/bonding/bondX
Voir aussi Ifenslave · Ethtool · Nmcli

Le bonding regroupe plusieurs interfaces réseau physiques (esclaves) derrière une interface logique unique (bondX), pour de la redondance de lien, de l'agrégation de bande passante, ou les deux selon le mode choisi.

Modes de bonding

Les modes se déclarent numériquement ou par mot-clé :

Mode Mot-clé Comportement
0 balance-rr Répartition (round-robin) séquentielle des paquets sur

chaque interface esclave — équilibrage de charge, mais sans garantie d'ordre à l'arrivée.

1 active-backup Une seule interface active à la fois ; bascule sur

l'esclave restant en cas de panne. Pas d'équilibrage de charge, redondance pure — le mode le plus simple à câbler (aucune configuration côté switch requise).

2 balance-xor L'interface maître prend l'adresse MAC d'une des esclaves.

Une même transmission reste sur une seule interface une fois établie, mais les transmissions se répartissent entre interfaces au fil du temps.

3 broadcast Envoi de chaque paquet sur toutes les interfaces esclaves —

tolérance de panne maximale, aucun gain de bande passante.

4 802.3ad Agrégation de liens selon la norme LACP (802.3ad) — nécessite un

switch compatible et configuré en conséquence côté port.

5 balance-tlb Équilibrage de charge en émission uniquement (transmit

load balancing).

6 balance-alb Équilibrage de charge en émission et en réception

(adaptive load balancing).

En pratique, deux modes couvrent l'essentiel des besoins : active-backup (mode 1) pour de la simple redondance sans dépendre de la configuration du switch, et 802.3ad (mode 4) pour de l'agrégation réelle de bande passante avec un switch qui le supporte.

Options de monitoring du lien

  • miimon=xxx — intervalle en millisecondes entre deux vérifications de
 l'état physique du lien (MII). C'est le seul paramètre réellement indispensable pour détecter
 une panne de câble/interface ; une valeur de 100 à 200 ms est courante.
  • arp_interval=xxx — intervalle en millisecondes du monitoring par requêtes
 ARP, alternative à miimon (0 = inactif par défaut). Utile pour détecter des
 pannes que miimon ne voit pas (lien physique up mais chemin cassé plus loin sur
 le réseau).
  • arp_ip_target=IP1,IP2 — adresses IP cibles des requêtes ARP de monitoring
 (jusqu'à 16, séparées par des virgules). Requis si arp_interval est utilisé.

Il faut spécifier miimon ou la combinaison arp_interval/ arp_ip_target — sans l'un des deux, aucune détection de panne n'est active.

Mise en place

Charger le module

vi /etc/modprobe.d/bonding.conf
alias bond0 bonding

Les options de mode/miimon peuvent aussi être déclarées ici, mais dans ce cas ne pas les répéter dans le fichier ifcfg-bond0 — les deux déclarations rentreraient en conflit.

modprobe bonding

Créer l'interface bond (RHEL/CentOS)

# /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
IPADDR=192.168.132.10
NETMASK=255.255.252.0
GATEWAY=192.168.132.1
USERCTL=no
BOOTPROTO=none
ONBOOT=yes
BONDING_OPTS="mode=1 miimon=100 primary=eth1"

Rattacher chaque interface physique

# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
TYPE=ETHERNET
IPV6INIT=no

Répéter pour ifcfg-eth1 (même contenu, DEVICE=eth1), sans IPADDR sur les interfaces esclaves — l'adresse IP appartient à l'interface bond0, pas aux esclaves.

systemctl restart network     # ou : nmcli connection reload (voir Nmcli)

Vérification

cat /proc/net/bonding/bond0     # état du bond, interface active, esclaves détectés
ip link show

Test de bascule : débrancher (ou ifdown) les interfaces une à une pour vérifier que le service ne coupe pas.

ifdown eth0
cat /proc/net/bonding/bond0

Note : en mode load-balancing (2/5/6), un client distant reste associé à une seule interface physique à un instant T ; si c'est précisément cette carte qui tombe, sa connexion en cours est tout de même coupée — seule une nouvelle connexion sera répartie ailleurs.

Manipulation à chaud

ip link set dev bond0 up
ip link set dev bond0 down

ifenslave bond0 eth0 eth1        # rattacher les esclaves, voir Ifenslave
ifenslave -d bond0 eth2          # détacher une interface du bond
ifenslave -c bond0 eth2          # changer l'interface active (mode actif/passif)

ip link set dev bond0 addr 00:0a:xx:xx:xx:xx
ip addr add 10.158.10.10/24 brd + dev bond0

Fichiers utiles

cat /sys/class/net/bonding_masters              # liste des bonds actifs
echo 1000 > /sys/class/net/bond0/bonding/miimon # ajuster le monitoring à chaud
echo 6 > /sys/class/net/bond0/bonding/mode      # changer de mode à chaud (à froid recommandé)

Logs et débogage

dmesg | grep bonding
grep bonding /var/log/messages*

Activer le mode debug du module (verbeux, à réserver au diagnostic) :

# /etc/modprobe.d/bonding.conf
options bonding debug=1

Voir aussi

  • Ifenslave — rattacher/détacher des interfaces esclaves d'un bond
  • Ethtool — diagnostiquer l'état physique d'une interface avant de la mettre dans un bond
  • Nmcli — équivalent NetworkManager pour créer un bond sur les distributions récentes