Petite présentation de l'agrégation de liens réseau
Présentation générale
L'agrégation de liens réseau (généralement appelé bonding en anglais dans le noyau Linux) est une technique de réseau informatique qui permet de regrouper plusieurs interfaces réseau en un seul lien logique. Elle peut être implémentée selon différentes méthodes.
La manière dont on souhaite utiliser les interfaces réseau agrégées décidera du mode dans lequel configurer l'agrégation. Selon le mode choisi, celle-ci fournira :
- une tolérance de panne ;
- et/ou la répartition de la charge réseau sur les différentes interfaces (permettant de bénéficier de la bande passante de chacune des interfaces agrégées).
D'après la page wikipedia sur l'agrégation de liens, selon le contexte, la notion d'agrégation de liens peut être désignée sous de nombres appellations telles que LAG (Link Aggregation Group) ; interface ou port bonding, teaming, trunking, bundling, channel ; multi-link trunking (MLT), network fault tolerance (NFT), etc.
Les différents mode d'agrégation du pilote Linux
Les modes d'agrégation proposés par le pilote d'agrégation du noyau Linux sont les suivants :
balance-rr
: les paquets sont envoyés sur chacun des liens à tour de rôle (Round Robin), ce qui permet une répartition de charge et une tolérance de panne. C'est le mode par défaut si aucun n'est précisé.active-backup
: politique actif/sauvegarde : une interface doit être désignée comme primaire (à l'aide de l'optionprimary
), et seule celle-ci sera utilisée tant qu'elle est disponible. Une des autres interfaces sera utilisée seulement si l'interface primaire devient défaillante. Ce mode fournit de la tolérance de panne.balance-xor
: ce mode est similaire àbalance-rr
, mais les paquets sont envoyés à travers une des interfaces selon une politique de hachage (utilisant par défaut l'opération logique xor, mais la fonction de hachage peut être paramétrée). Ce mode permet une répartition de charge et une tolérance de panne.broadcast
: tous les paquets sont diffusés sur toutes les interfaces à la fois. Ce mode permet une tolérance de panne.802.3ad
: ce mode utilise toutes les interfaces agrégées selon la spécification IEEE 802.3ad (aussi appelé le protocole LACP), mais nécessite que le commutateur réseau (switch) auquel sont connectées les interfaces prenne en compte ce protocole (et généralement que ce commutateur soit configuré en fonction).balance-tlb
: (Transmit Load Balancing) répartition de charge en transmission. Les paquets sont envoyés soit en fonction de la charge des interfaces, soit en fonction d'une méthode de hachage. Seule une interface reçoit les paquets.balance-alb
: (Adaptive Load Balancing), fonctionne commebalance-tlb
en émission, mais la réception est répartie sur plusieurs interfaces, sans nécessiter le support du commutateur réseau (en répartissant les adresses physiques des interfaces selon les interlocuteurs réseau).
Ces descriptions des modes d'agrégation sont un résumé en français des descriptions détaillées figurant à la section 2 - Bonding Driver Options du document Linux Ethernet Bonding Driver HOWTO (en anglais).
Configuration à l'aide du script ifenslave
Le script shell ifenslave
(fourni sous Debian GNU/Linux par le paquet
ifenslave) permet de configurer manuellement une agrégation d'interfaces
depuis le shell. Les liens d'agrégation configurés ainsi utiliseront uniquement
le mode balance-rr
.
Il nécessite le chargement du module noyau bonding
qui, s'il n'est pas
fait automatiquement, peut se faire manuellement à l'aide de la commande
modprobe bonding
.
Les interfaces agrégées se nomment traditionnellement bond0
, bond1
, etc.
La page de manuel ifenslave(8) (en anglais) donne un exemple d'utilisation simple :
Bien entendu, cette configuration ne survivra pas au redémarrage de la machine
et doit être intégrée aux fichiers de configuration du réseau utilisés par
votre système, comme le fichier /etc/network/interfaces
généralement utilisé
sous les serveurs utilisant Debian (ce qui permet également de choisir un autre
mode d'agrégation que balance-rr
).
Configuration via le fichier interfaces
sous Debian
Sur les serveurs utilisant GNU/Linux, l'agrégation est généralement configurée
simplement en modifiant le fichier /etc/network/interfaces
. Pour une
utilisation sur une station de travail (par exemple pour l'agrégation de lien
filaire et sans fil d'un ordinateur portable), il est généralement aussi
possible d'effectuer l'opération à l'aide des interfaces graphiques de
configuration réseau, mais cet aspect n'est pas abordé ici.
L'exemple donné ci-dessous agrège les interfaces eth0
et eth1
dans
l'interface maître bond0
qui utilise le mode 802.3ad
(c'est à dire le
protocole LACP), qui doit
généralement également être paramétré sur le commutateur réseau. Si votre
commutateur ne prend pas en compte ce protocole, choisissez, en fonction de vos
besoin, un mode qui ne nécessite pas de collaboration spéciale du commutateur.
Désactivez d'abord les interfaces réseau à agréger (avec les commandes
ifdown eth0
et ifdown eth1
dans cet exemple), et modifiez le fichier
interfaces
pour utiliser quelque chose comme ceci :
iface bond0 inet static
# Configuration normale de l'interface
address 10.31.1.5
netmask 255.255.255.0
network 10.31.1.0
gateway 10.31.1.254
# Configuration de l'agrégation
bond-slaves eth0 eth1
bond-mode 802.3ad
bond-miimon 100
# Les paramètres ci-dessous sont facultatifs
bond-updelay 200
bond-downdelay 200
Une fois l'interface bond0 activée avec ifup bond0
(et si votre commutateur
a été correctement configuré si vous utilisez le mode 802.3ad), votre
agrégation devrait être active. Le fichier /proc/net/bonding/bond0
vous
renseignera sur son état (et d'autres informations utiles peuvent être trouvées
dans /sys/class/net/bond0/bonding/
).