Agrégation de liens - linux

De Wiki doc

Révision datée du 18 mai 2024 à 09:48 par Ycharbi (discussion | contributions) (Ajout d'une précision sur l'algorithme de hachage du LACP + remplacement de la balise source obsolète)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)


Le noyau Linux propose de grouper plusieurs interfaces réseau en un agrégat régit par différents modes possibles. L'intérêt est bien souvent de bénéficier d'une haute disponibilité sur un lien mais certains modes peuvent apporter un accroissement de performances lors de cas de figures particuliers.

Les modes de fonctionnements

Les modes proposés, au nombre de 7, sont les suivants:

  • Mode 0 (balance-rr): Aussi connu sous le nom de Round-robin, ce mode permet de transmettre et recevoir les paquets séquentiellement un à un par chaque interface. Il en résulte un équilibrage de la charge.
  • Mode 1 (active-backup) : Dans ce mode, une seule interface est active, tandis que toutes les autres sont en état de sauvegarde. Si l'interface active échoue, une de sauvegarde la remplace en tant que seule active dans la liaison. L'adresse de contrôle d'accès au support (MAC) de l'interface de liaison n'est visible que sur un seul port, ce qui évite toute confusion pour le commutateur. Ce mode offre une tolérance aux pannes.
  • Mode 2 (balance-xor) : L'adresse MAC source utilise une logique exclusive (ou XOR) avec l'adresse MAC de destination. Ce calcul garantit que la même interface esclave est sélectionnée pour chaque adresse MAC de destination. Ce mode assure la tolérance aux pannes et l'équilibrage de charge.
  • Mode 3 (broadcast) : Toutes les transmissions sont envoyées à tous les esclaves. Ce mode assure une tolérance aux pannes.
  • Mode 4 (802.3ad) : Ce mode crée des groupes d'agrégation qui partagent les mêmes paramètres de vitesse et de mode de transmission ([Half-]duplex). Il nécessite un commutateur prenant en charge un lien dynamique IEEE 802.3ad (ou LACP). Le lien qui en résulte permet d'exploiter la bande passante de chaque interface lors d'accès concurrents (cette notion sera abordé un peu plus bas). Il offre une tolérance aux pannes et un équilibrage de charge.
  • Mode 5 (balance-tlb) : Ce mode garantit que la répartition du trafic sortant est définie en fonction de la charge sur chaque interface et que l'une d'elle reçoive tout le trafic entrant. Si elle n'en reçoit pas, une autre est alors assignée à ce rôle. Il offre une tolérance aux pannes et un équilibrage de charge.
  • Mode 6 (balance-alb) : Les paquets reçus sont équilibrés par la négociation du protocole de résolution d'adresse (ARP). Il offre une tolérance aux pannes et un équilibrage de charge (ceci n'est pris en charge que dans les environnements x86).


Quel que soit le mode choisi, les commandes utilisées seront les mêmes. Il faudra simplement spécifier ce choix par son numéro ou le mot clé qui y est associé (écrit entre parenthèses dans la liste ci-dessus).

Vous l'avez probablement remarqué mais le rôle de chacun d'entre eux est plutôt redondant. Honnêtement je n'ai jamais vu autre chose que le mode 4 en condition réelles et je me demande bien à quoi servent les autres. Je pense qu'historiquement ils étaient là avant l'invention du LACP et qu'ils ont permis (par de sacrés bidouilles) de répondre à un besoin maintenant normé. Leur existence actuelle est probablement dû à un désir de conservation de méthodes ingénieuses qui ont fait leurs preuves par le passer.

INFORMATION

Dans le cas du mode 4 (LACP), il est également possible de préciser l’algorithme de hachage utilisé par la liaison (voir xmit_hash_policy. Ceci permet de spécifier le mode de distribution des trames lors d'accès concurrents par des clients vers plusieurs machines servies par LACP (la politique layer3+4 permet d'utiliser 100% de la bande passante des liens composant le LACP dans certains cas). La valeur layer2 est définit par défaut.

Configuration d'un agrégat

Afin de configurer un agrégat de liens sous un Linux récent, il faut les outils du paquet iproute2 installés sur votre machine.

Exemple avec LACP

Je vais présenter les commandes nécessaires à l'établissement d'un agrégat se basant le protocole IEEE 802.3ad. Comme expliqué dans la documentation de celui-ci pour Cisco IOS, il est important de préciser que cette norme ne permet pas d'avoir un tuyau égale à la somme des bandes passantes des liens qui le compose. Le LACP permet de répartir les transferts sur les interfaces qui en font parti. Ainsi, un seul client ne pourra pas bénéficier de plus de la capacité d'un lien mais plusieurs clients pourront chacun utiliser la bande passante d'une interface et donc ne pas se saturer l'un l'autre. Ne vous attendez donc pas à avoir du 5gbps (en couplant 5 interfaces gigabits) lors d'un transfert avec un seul PC (relié en 10gbps). Ce n'est pas ce que permet le LACP (si c'est ce que vous voulez, tournez-vous plutôt vers le Multipath TCP).

La série de commandes qui suit utilise la notion de filtrage de VLAN exploité dans ce document. L'IEEE 802.3ad peut donc tout à fait s'intégrer dans une configuration déjà existante pour peu que vous ayez suffisamment d'interfaces réseau sur votre machine.

# Création d'un pont gérant le 802.1Q
ip link add br0 type bridge vlan_filtering 1
ip link set br0 up

# Création de l'interface d'agrégat
ip link add bond0 type bond
ip link set bond0 type bond miimon 100 mode 4
# Pour préciser la fonction de hachage à utiliser :
# ip link set bond0 type bond miimon 100 mode 4 xmit_hash_policy layer3+4

# Ajout des interfaces physique à celui-ci
ip link set eth0 down
ip link set eth0 master bond0
ip link set eth1 down
ip link set eth1 master bond0
ip link set bond0 up

# Ajout de l'agrégat au pont
ip link set bond0 master br0

# Suppression du VLAN par défaut
bridge vlan del dev br0 vid 1 self
bridge vlan del dev bond0 vid 1 master

# Ajout de VLAN au trunk transporté par l'agrégat
bridge vlan add dev br0 vid 180 tagged self
bridge vlan add dev br0 vid 181 tagged self
bridge vlan add dev bond0 vid 180 tagged master
bridge vlan add dev bond0 vid 181 tagged master

# Création d'interfaces VLAN (SVI)
ip link add link br0 name vlan180 type vlan id 180
ip link set vlan180 up
ip address add 192.168.180.224/24 dev vlan180

ip link add link br0 name vlan181 type vlan id 181
ip link set vlan181 up
ip address add 192.168.181.224/24 dev vlan181

ASTUCE

Pour les suppressions et les retraits d'interfaces, il faut utiliser les mots clés del et nomaster à la place de add et master.

INFORMATION

Le paramètre miimon 100 passé à la définition du type de l'interface bond0 permet de spécifier la fréquence de surveillance de la liaison MII (Medium Indepedant Interface) en millisecondes. Cela détermine la fréquence à laquelle l'état du lien vers chaque esclave est inspecté pour détecter les défaillances de ceux-ci. Une valeur de zéro désactive la surveillance de la liaison MII. Une valeur de 100 est une valeur standard. Source ici et .

Sources