Agrégation de liens (bonding) sous Linux (Debian/Ubuntu)

Qu'est-ce que l'agrégation de liens (ou network bonding) ?

L'agrégation de liens consiste à regrouper plusieurs ports réseau pour en faire un seul. Cette technique permet d'avoir soit de la redondance, soit d’augmenter le débit, soit les deux.

Prérequis

Pour faire la suite, il faut :

  • Une machine sous Debian/Ubuntu avec au minimum deux cartes réseau
  • Un switch sur le même lan

Il n'y a pas besoin d'avoir un switch programmable, à 15k euros, un simple switch à 30 euros fait l'affaire, du moins selon ce que l'on veut faire.

Configuration/Installation

Dans un premier temps, il faut installer le paquet ifenslave-2.6 :

# apt-get install ifenslave-2.6

Ensuite, il faut modifier le fichier interfaces (/etc/network/interfaces).
Dans l'exemple ci-dessous, je pars du principe que les deux cartes sont eth0 et eth1, voici ce qu'il suffit de mettre dans le fichier eni :

auto lo
iface lo inet loopback
auto bond0 
iface bond0 inet dhcp
        bond-slaves eth0 eth1 
        bond_mode 0
        bond_miimon 100

Et c'est tout ! Aucune mention des cartes eth0 et eth1 n'est à faire, c'est via l'option bond-slaves que les cartes physiques sont précisées.
Il ne restera plus qu'à faire un ifup bond0 pour que l'interface s'active et obtienne une adresse IP automatiquement via DHCP.

Quelques précisions, le mode de l'agrégation (bond_mode) peut prendre différentes valeurs. Il est possible de mettre la valeur en texte ou avec le numéro.

  • balance-rr ou 0 : Ce mode permet de répartir le trafic sur les différents liens en utilisant l'algorithme round-robin, il n'y a pas besoin d'équipement spécifique de l'autre côté. Si un des liens ne fonctionne plus, une redondance est assurée.
  • active-backup ou 1 : Ce mode permet d'utiliser une interface pour transmettre, l'autre prenant le relais en cas de problème. Il n'y aucune augmentation de débit, uniquement de la redondance.
  • balance-xor ou 2 : Dans ce mode, les paquets sont transmis via une des cartes qui est choisie en fonction de l'adresse MAC de destination.
  • broadcast ou 3 : Les paquets sont transmis simultanément sur toutes les cartes.
  • 802.3ad ou 4 : Nommé aussi Dynamic link aggregation, il utilise la norme IEEE du même nom et le switch doit supporter ce mode.
  • balance-tlb ou 5 : Ceci permet une répartition du trafic émis sur les différentes cartes en fonction de la charge de système. N'importe quel switch est compatible avec ce mode.
  • balance-alb ou 6 : Ce mode est équivalent au précédent mais permet en plus une répartition du trafic reçu sur les différentes cartes. Tout comme le mode 5, cette fonction reste compatible avec n'importe quel switch.

Pour avoir plus d'info sur les différents modes possibles, il faut consulter la doc ici (anglais).
Dans mon cas, j'ai opté pour le mode d'agrégation en round-robin, mon but n'étant pas de chercher à avoir la meilleure redondance mais les meilleures performances.

Test

En guise de test, j'ai utilisé iperf.
Dans mon cas, j'ai fais un agrégat de deux cartes 100 Mbits sur un switch giga, et la deuxième machine utilisée pour les tests est reliée via un lien giga ethernet.

En théorie, cette configuration permet d'avoir 200 Mbits full-duplex, dans la pratique j'obtiens plutôt du 150 Mbits full-duplex :

[  3]  0.0-10.0 sec    186 MBytes    156 Mbits/sec
[  4]  0.0-10.1 sec    182 MBytes    152 Mbits/sec

Ceci vient sûrement de la machine qui est assez vieille et l'opération de bonding a tendance à solliciter le CPU.

Le téléchargement d'un fichier de 200 M en http sur le réseau local donne quasiment 20 Mo/s comme résultat :

wget http://p1e1g/fic -O/dev/null
....
2014-05-24 22:45:53 (18,4 MB/s) - «/dev/null» sauvegardé [209715200/209715200]

Ce qui donne 147,2 Mbits/sec.

À noter, tous les tests ont été faits en utilisant le protocole TCP, il est probable que ce mode de fonctionnement perturbe des streamings en UDP, mais je n'ai pas fait de test.

Haut de page