Tutoriel : Mettre en place du channel bonding

Ce tutoriel vous présente le concept et l'installation du channel bonding, système de redondance de cartes réseau.

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

Le Channel bonding, aussi appelé Port trucking, permet d'appliquer une série de politiques prédéfinies sur un ensemble de liens réseau regroupés en un seul. Ce groupe d'interfaces réseau vous donne la possibilité d'effectuer du load-balancing et surtout de la tolérance aux pannes. Sept modes de fonctionnements sont disponibles pour vous permettre d'allier nécessité et flexibilité.
Nous allons étudier à travers cet article les possibilités offertes et leurs mises en application

II. Installation

II-A. Prérequis

Deux prérequis apparaissent au niveau du switch réseau, où sont connectées les interfaces :
- support et configuration du mode « port truking » sur les ports utilisés ;
- support de la norme IEEE 802.3ad.

Pour votre système Linux, il vous faut :
- des cartes réseau (compatibles ethtools et miitools de préférences) ;
- module bonding pour le kernel.

Kernel 2.4.x
Sélectionnez
[*] Network device support
<M> Bonding driver support
Kernel 2.6.x
Sélectionnez
[*] Networking support
<M> Bonding driver support

II-B. Les différents modes

Nous allons voir dans ce chapitre les différents modes proposés par le module bonding.

II-B-1. Mode 0, l'équilibrage de charge


Grâce à l'équilibrage de charge, les paquets transitent sur une carte réseau active, puis sur une autre, séquentiellement. Le débit de la bande passante est augmenté. Si une des cartes réseau vient à tomber en rade, l'équilibre de charge saute cette carte et continue à tourner de manière cyclique.

II-B-2. Mode 1, la sauvegarde active

Ce mode est une simple redondance avec basculement. Une seule interface est active. Dès que sa panne est détectée, une autre interface est activée et prend le relais. Votre bande passante ne change pas.

II-B-3. Mode 2, la balance Xor

Une interface est affectée à l'envoi vers une même adresse MAC. Ainsi les transferts sont parallélisés et le choix de l'interface suit la règle :
(Adresse MAC de la source XOR Adresse MAC de la destination) modulo nombre d'interfaces.

II-B-4. Mode 3, le broadcast

Aucune particularité dans ce cas, toutes les données sont transmises sur toutes les interfaces actives. Aucune autre règle.

II-B-5. Mode 4, la norme 802.3ad

La norme 802.3ad permet l'agrégation des liens, élargissant dynamiquement la bande passante. Les groupes sont créés dynamiquement sur la base d'un paramétrage commun.

II-B-6. Mode 5, la balance TLB

« TLB » pour Traffic Load Balancing.
Le trafic sortant est distribué selon la charge courante (calculée relativement à la vitesse) de chaque interface.
Le trafic entrant est reçu par l'interface courante.
Si l'interface de réception devient inactive, une autre interface prend l'adresse MAC de l'interface inactive.

II-B-7. Mode 6, la balance ALB

« ALB » pour Adaptive load balancing.
C'est un mode étendu de la balance tlb, qui inclut du load balancing en réception. L'équilibrage de charge de réception est réalisé au niveau des réponses ARP. Le module intercepte les réponses ARP et change l'adresse MAC par celle d'une des interfaces.

II-C. Mise en œuvre

II-C-1. Présentation par un script

voyons un script minimal :

 
Sélectionnez
#!/bin/bash
#Chargement du module bonding.
modprobe bonding mode=0 miimon=100 
# On ferme les deux interfaces Ethernet
ifconfig eth0 down    
ifconfig eth1 down    
# On crée une interface bond0, qui reçoit une adresse Mac bidon (cela va changer)
ifconfig bond0 hw ether 11:22:33:44:55:66
# On lance l'interface, comme s'il s'agit d'une interface Ethernet
ifconfig bond0 192.168.0.4 netmask 255.255.255.0 gateway 192.168.0.254 up
# On ajoute les interfaces à bond0
ifenslave bond0 eth0
ifenslave bond0 eth1

Voyons de plus près.

Chargement du module
Deux options ont été incluses ici : et il est possible de mettre dans le fichier /etc/modules.conf le chargement du module bonding.

 
Sélectionnez
alias bond0 bonding
options bond0 mode=0 miimon=100

Ce premier exemple montre le cas d'un seul bonding. Il est en effet possible de mettre plusieurs bonding avec des modes différents.
Pour cela modifions le /etc/modules.conf en conséquence :

 
Sélectionnez
alias bond0 bonding
options bond0 -o bond0 mode=2 miimon=100
alias bond1 bonding
options bond1 -o bond1 mode=1 miimon=100 primary=eth1

Ajout des interfaces dans bond0
La commande ifenslave nous permet d'ajouter à bond0 les interfaces Ethernet (appelées alors interfaces esclaves). Lors de l'ajout de la première interface réseau dans bond0, ce dernier prend l'adresse MAC de cette interface. Les autres interfaces perdent alors leurs adresses MAC, recouvertes par celle de l'interface bond0.

Pour enlever une interface, il suffit de lancer la commande :

 
Sélectionnez
ifenslave -d bondx ethx

Le module bonding redonne alors à ethX sa vraie adresse MAC. Si on enlève la première adresse MAC (celle utilisée par bond0), alors bond0 récupère celle de eth1.

II-C-2. Fichiers de configuration automatique

Voici les fichiers à modifier pour charger au démarrage votre configuration

rajoutez dans /etc/modules.conf
Sélectionnez
alias bond0 bonding
options bond0 mode=0 miimon=100

Sous Red-Hat/Suse
Dans /etc/sysconfig/network/, créé ifcfg-bond0 :

/etc/sysconfig/network/fcfg-bond0
Sélectionnez
ONBOOT=yes
DEVICE=bond0
BOOTPROTO=static
IPADDR=192.168.0.4
NETMASK=255.255.255.0
BROADCAST=192.168.0.255
GATEWAY=192.168.0.254

Préparez chaque interface réseau ethX

/etc/sysconfig/network/ifcfg-eth0
Sélectionnez
ONBOOT=yes
DEVICE=eth0
MASTER=bond0
SLAVE=yes
POST_UP_SCRIPT=ifeneth0
/etc/sysconfig/network/ifcfg-eth1
Sélectionnez
ONBOOT=yes
DEVICE=eth1
MASTER=bond0
SLAVE=yes
POST_UP_SCRIPT=ifeneeth1

Il ne manque que les scripts dans /etc/sysconfig/network/script/

/etc/sysconfig/network/ifeneeth0
Sélectionnez
#!/bin/sh
ifenslave bond0 eth0
/etc/sysconfig/network/ifeneeth1
Sélectionnez
#!/bin/sh
ifenslave bond0 eth1

Sous debian

/etc/network/interfaces
Sélectionnez
auto eth0
auto eth1

auto bond0
iface bond0 inet static
    address 192.168.0.1
    network 255.255.255.0
    gateway 192.168.0.254
    up /sbin/ifenslave bond0 eth0 eth1

II-D. Options du module bonding

Voici donc une série d'options pour le module bonding qui permet d'ajuster finement le fonctionnement de votre bonding.

Option

Description

Primary

Uniquement pour active-backup. Favorise une interface esclave. Celle-ci redeviendra active dès qu'elle le peut, même si une autre interface est active.

updelay

(0 par défaut) Temps de latence entre la découverte de la reconnexion d'une interface et de sa réutilisation.

downdelay

(0 par défaut) Temps de latence entre la découverte de la déconnexion d'une interface et de sa désactivation de bond0.

miimon

(0 par défaut) Fréquence de surveillance des interfaces par Mii ou ethtool. La valeur conseillée est 100.

use_carrier

(1 par défaut) Utilisation de la surveillance des interfaces par « carrier ».

arp_interval

(en ms) Système de surveillance par ARP, évitant l'utilisation de miitool et ethtool. Si aucune trame n’est arrivée pendant l'arp_interval, on envoie par cette interface jusqu'à 16 requêtes ARP à 16 adresses IP. Si aucune réponse n'est obtenue, l'interface est désactivée.

arp_ip_target

Liste des adresses IP, séparées par une virgule, utilisée par la surveillance ARP. Si aucune n'est renseignée, la surveillance ARP est inactive.

II-E. Quelques exemples

Une simple redondance avec priorité sur eth1

 
Sélectionnez
#!/bin/bash
modprobe bonding -o bond0 mode=1 miimon=100 priority=eth1
ifconfig eth0 down    
ifconfig eth1 down    
ifconfig bond0 hw ether 11:22:33:44:55:66
ifconfig bond0 192.168.0.4 netmask 255.255.255.0 gateway 192.168.0.254 up
ifenslave bond0 eth0
ifenslave bond0 eth1

Un équilibrage de charge avec vérification par requêtes ARP

 
Sélectionnez
#!/bin/bash
modprobe bonding -o bond1 mode=0 arp_interval=1000 arp_ip_target=216.239.57.104
ifconfig eth0 down    
ifconfig eth1 down    
ifconfig eth2 down
ifconfig bond1 hw ether 11:22:33:44:55:77
ifconfig bond1 192.168.1.5 netmask 255.255.255.0 gateway 192.168.1.254 up
ifenslave bond1 eth0
ifenslave bond1 eth1
ifenslave bond1 eth2

III. Tableau récapitulatif des modes

Mode

Description

Load-Balancing

0

l'équilibrage de charges

entrante

1

la sauvegarde active

aucune

2

la balance Xor

entrante

3

le broadcast

aucune

4

la norme 802.3ad

aucune

5

la balance TLB

entrante

6

la balance ALB

entrante et sortante

IV. Conclusion

La redondance des cartes réseau est souvent perçue comme inutile et couteuse malgré une installation simple.
Avec ces sept modes de fonctionnements, vous avez la possibilité d'obtenir une interface réseau haute disponibilité, répondant même à des besoins précis pour le load-balancing. Alors, pourquoi s'en priver?

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2006 Sylvain Luce. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.