Agrégation de liens Ethernet

Rédigé par Nicolas Sulek Aucun commentaire
Classé dans : Réseau Mots clés : Bonding, kernel
Le noyau Linux comporte des mécanismes permettant de faire de l'agrégation de liens réseaux. Ainsi, on peut par exemple regrouper deux cartes réseaux physique en une seule interface virtuelle, ce qui apporte vitesse et/ou redondance. Nous allons voir comment mettre en place une agrégation de liens Ethernet (Ethernet bonding) sous Debian.


Modes d'agrégations de liens


Le noyau Linux propose plusieurs modes pour l'agrégation de liens, chacun avec des contraintes et des objectifs particuliers :

  • Round Robin : les paquets sont transmis à chaque interface esclave de l'agrégat suivant le principe du tourniquet. Ce mode permet de faire de la tolérance de panne et de la répartition de charge, mais il nécessite un switch spécifique.

  • Active Backup : une seule interface de l'agrégat est active à tout moment. Si l'interface tombe, une autre interface de l'agrégat devient active et prend le relais en récupérant l'adresse MAC de l'interface défaillante. Ce mode permet uniquement la tolérance de panne mais ne nécessite pas de switch particulier.

  • Balance XOR : les transmissions sont réparties sur l'interface esclave choisie suivant la règle adresse MAC de la source XOR adresse MAC de la destination. Donc le même esclave est choisi pour chaque destination MAC. Ce mode permet de faire de la tolérance de panne et de la répartition de charge, mais nécessite un switch spécifique.

  • Broadcast : transmet tout ce qui arrive sur l'ensemble des interfaces esclaves de l'agrégat. Il permet uniquement la tolérance de panne et nécessite un switch particulier.

  • 802.3ad : c'est le mode classique IEEE 802.3ad d'agrégation de liens dynamiques (LCAP). Il nécessite à la fois un switch ayant le support du protocole 802.3ad et des pilotes pour les cartes réseaux constituant l'agrégat capables d'envoyer leur vitesse et leur mode de fonctionnement au switch.

  • Balance TLB (Traffic Transmit Load Balancing) : dans ce mode, le trafic entrant est reçu uniquement sur l'interface esclave active et le trafic sortant est réparti sur l'ensemble des interfaces esclaves en fonction de leur charge respective. Il ne nécessite aucun switch particulier.

  • Balance ALB (Adaptive Load Balancing) : fournit à la fois la répartition de charge pour l'envoi (TLB) et la répartition de charge à la réception pour IPv4 en utilisant la négociation ARP. Ce mode ne nécessite aucun switch spécifique, mais il requiert la capacité de changement d'adresse MAC pour chaque périphérique réseau composant l'agrégat quand il est utilisé.


Mise en place de l'agrégation


Installation des logiciels nécessaires


Pour que l'agrégation de liens fonctionne, il faut que le noyau Linux ait été compilé avec l'option bonding activée. Sous Debian, c'est sous forme de module standard qu'on la retrouve.

Afin d'interagir avec le noyau, il faut ensuite installer la suite d'outils ifenslave qui permettra de manipuler les agrégats de liens.

Pour un noyau 2.6, il faut installer ifenslave-2.6 :
apt-get install ifenslave-2.6

Pour un noyau 2.4, c'est le paquet ifenslave-2.4
apt-get install ifenslave-2.4

Création de l'agrégat


Ensuite, tout se passe dans le fichier /etc/network/interfaces.

Par exemple, pour déclarer un agrégat composé des interfaces Ethernet eth0 et eth1, il faut éditer /etc/network/interfaces :
iface bond0 inet static
address 192.168.0.2
netmask 255.255.255.0
network 192.168.0.0
gateway 192.168.0.1
up /sbin/ifenslave bond0 eth0
up /sbin/ifenslave bond0 eth1

en prenant bien soin de commenter les lignes paramétrant les interfaces eth0, eth1, … dans ce même fichier (en rajoutant en début de ligne un # ).

Ici, on a déclare un agrégat bond0 composé de deux interfaces réseaux, eth0 et eth1, ayant pour adresse IP 192.168.0.2. eth0 et eth1 n'ont aucun paramètre IP de renseigné.

Configuration de l'agrégat


Il ne reste plus qu'à paramétrer le module bonding, en choisissant notamment le mode de fonctionnement de l'agrégat. Tout se fait en passant les options désirées au module.

Les options du module bonding sont :

  • arp_ip_target : destination ARP

  • arp_interval : intervalle arp

  • xmit_hash_policy : méthode de hachage XOR (0 pour la couche 2 (defaut), 1 pour la couche 3+4)

  • lacp_rate : taux de réception LACPDU depuis un partenaire 802.3ad

  • primary : périphérique principal à utiliser

  • mode : mode de fonctionnement de l'agrégat : 0 pour le Round Robin, 1 pour l'Active Backup, 2 pour le Balance XOR, 3 pour le broadcast, 4 pour le mode 802.3ad, 5 pour le Balance TLB et 6 pour le Balance ALB

  • use_carrier : utilisation de netif_carrier_ok au lieu de MII ioctls dans miimon

  • downdelay : délai avant de considérer que le lien est tombé

  • updelay : délai avant de considérer que le lien est monté

  • miimon : intervalle de vérification du lien

  • max_bonds : nombre max de périphériques agrégés.


Les paramètres les plus importants sont le mode, le downdelay, le updelay et le miimon.

Une fois décidé, il faut éditer le fichier /etc/modprobe.d/arch/i386 en rajoutant par exemple :
alias bond0 bonding
options bonding mode=6 miimon=100 downdelay=100 updelay=100

Ici, bond0 fonctionne donc en mode Balance ALB avec un intervalle de vérification de 100 ms, un délai avant de considérer le lien tombé de 100ms et un délai avant de considérer le lien monté de 100ms.

Les commentaires sont fermés.