System-Linux

Aller au contenu | Aller au menu | Aller à la recherche

Configuration bonding avec deux cartes réseaux ou plus...

bonding jpg

Bondons ensemble...!

La technique de bonding appelée Channel bonding ou Port trucking consiste à regrouper des liens réseaux/interfaces/cartes réseaux afin de mettre en place du load balancing et/ou améliorer la tolérance de pannes.

Pour mettre cette technique en place vous aurez besoin du module kernel : bonding

Il existe 7 mode différents de bonding en gros 7 options pour ce module les voici : Il est biensur possible d'utiliser plus de 2 interfaces réseaux.

Dans l'exemple que je vous propose nous disposons d'un serveur avec une carte eth0 et une carte eth1 non utilisée, n'oubliez pas de brancher eth1 physiquement et sur un switch diffèrent de celui de eth0 si possible.

  • Le mode 0 ou équilibrage de charge :

Les paquets réseaux passe sur une carte réseau qui est active, puis sur une autre, séquentiellement. Le débit de la bande passante est augmenté (ex: eth0 + eth1) . Si une des cartes réseaux tombe en panne, le bonding ne l'utilisera plus et utilisera les autres.

  • le mode 1 ou sauvegarde active :

Une seule interface réseau est utilisée. Si un panne est détectée sur celle ci , l'autre interface est activée et prend le relais. La bande passante est donc celle que peut supporter la carte active.

  • le mode 2 ou 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.

  • Le mode 3 ou broadcast :

Les données sont transmises sur toutes les interfaces réseaux actives.

  • Le mode 4 ou 802.3ad :

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

  • Le mode 5 ou Traffic load balancing :

Le trafic sortant est distribué selon la charge courante calculée selon la vitesse de chaque cartes réseaux. Le trafic entrant est reçu par l'interface courante. Si l'interface de réception des données passe en inactive, une autre carte prend son adresse MAC.

  • Le mode 6 ou Adaptive load balancing :

C'est un mode étendu du mode 5, qui inclut le load balancing aussi 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 de ses interfaces actives.

Pré-requis :

Votre kernel linux doit être compilé avec les options suivantes (ici : kernel 2.6) :

[*] Networking support
<*> Bonding driver support

Si vous êtes sous Debian vous aurez surement a faire quelque chose dans ce genre :

aptitude install ifenslave-2.6

Faites un petit coup d'aptitude search bonding aussi.

Installation :

Tout d'abord vous aurez le fichier /etc/modprobe.conf à modifier pour charger le module bonding.

Il faut terminé la configuration avant de redémarrer votre serveur ou de charger le module a la main :

modprobe bonding

Sinon vous risquez de rencontrer quelques soucis.

Éditez modprobe.conf est ajoutez y :

### Module Bonding
alias bond0 bonding
options bond0 miimon=100 mode=0

J'ai choisi le mode 0 pour sont augmentation de bande passante et sa tolérance aux pannes, je n'avais que deux cartes réseaux mais vous pouvez le mettre en place avec autant d'interface que vous voulez.

Il est possible d'avoir plusieurs bond dans ce cas il faudrait rajouter par exemple :

options bond1 miimon=80 mode=1

miimon est l'intervale de temps pour passer sur une autre interface en cas de soucis.

Désactivez toutes les cartes réseaux que vous allez utiliser dans votre bonding :

ifconfig eth0 down	
ifconfig eth1 down

Création de l'interface bond0 :

ifconfig bond0 hw ether AA:BB:CC:11:22:ZZ

Lancez l'interface bond0 avec l'ip désirez :

ifconfig bond0 172.16.1.3 netmask 255.00.0.0 gateway 172.16.1.100 up

Ajoute les interfaces esclaves que vous voulez utilisez avec bond0 :

ifenslave bond0 eth0
ifenslave bond0 eth1

Si un jour vous avez besoin de libérer une interface :

ifenslave -d bond0 ethX

Maintenant rendez vous dans : /etc/sysconfig/network/ pour la création des fichiers de configurations (sous Redhat ou Centos).

ifcfg-bond0 :

DEVICE=bond0
ONBOOT=yes
BOOTPROTO=none
IPADDR=172.16.1.3
NETMASK=255.0.0.0
BROADCAST=172.16.0.255
GATEWAY=172.16.1.100
USERCTL=no

ifcfg-eth0 :

DEVICE=eth0
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes

ifcfg-eth1 :

DEVICE=eth1
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes

Pour Debian ou Ubuntu ça serait plus :

Éditez : /etc/network/interfaces

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

J'ai fais un mini script pour installer le tout rapidement et facilement sur un serveur utilisant eth0 et disposant d'une autre interface : eth1, qui s'ennuyait : Il est biensur à adapter à votre besoin, il sauvegarde les fichiers de configuration avant modification puis enlève la configuration de eth0 et la met à bond0 ensuite il ajoute eth0 et eth1 en esclave de bond0, le tout en générant les fichiers de configuration pour chaque interfaces.

bonding.sh

Bondingement votre.

Par GanGan | le vendredi, février 12 2010 07:00

Commentaires

1. Benjamin

vendredi, février 12 2010 | 09:04

Merci beaucoup pour ce tutoriel très clair et très instructif :)

2. Dju

jeudi, février 25 2010 | 23:28

hmmm... je dois avoir l'esprit mal placé car en lisant le titre, j'ai cru à une blague de gros troll g33k :D
Bref, merci pour cet article très intéressant, ça me resservira sûrement sur mes serveurs dell qui ont 2 interfaces réseau dont une qui s'ennuie.... :)

3. jdouille

mercredi, juin 9 2010 | 09:26

merci pour l'info, c'est de loin la fiche la plus renseignée sur le bonding :)
fourni avec script s'il vous plait

tu déchire !
bonne continuation

4. raybones

jeudi, août 26 2010 | 01:10

Bonjour,

Merci pour cet excellent article.
Mais qu'en est-il des switchs? Voient-ils arriver la meme mac-address sur 2 ports différents (probleme... --> cisco).

Merci d'avance,