Agrégation de liens Ethernet sous CentOS 6

Voici comment configurer une agrégation de liens sur les ports Ethernet dans CentOS6 et RH6.
Dans mon cas, j’ai deux cartes (eth0 & eth1) qui formeront une interface d’agrégat (bond0).

L’agrégation peut fonctionner suivant plusieurs modes qui détermineront son fonctionnement:

Mode 0 : Round Robin , équilibrage de charge

La transmission des paquets se fait de façon séquentielle sur chacune des cartes actives dans l’agrégat. Ce mode augmente la bande passante et gère la tolérance de panne.

Mode 1 : Active – passive

Ce mode ne gère que la tolérance de panne. Si une des interfaces est désactivée, une autre du bond prend le relais.

Mode 2 : 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.

Mode 3 : Broadcast

Tout le trafic est envoyé par toutes les interfaces

mode 4 : 802.3ad ou LCAP

Ce mode s’appuie sur la norme IEEE 802.3ad Dynamic link aggregation. Toutes les interfaces du groupe sont agrégées de façon dynamique, ce qui augmente la bande passante et gère la tolérance de panne. Cela implique que le switch gère le 802.ad et les interfaces soient compatibles mii-tool et/ou ethtool.

mode 5 : balance-tlb

Adaptive transmit load balancing : seule la bande passante en sortie est load balancée selon la charge calculée en fonction de la vitesse, ceci pour chaque interface. Le flux entrant est affecté à l’interface courante. Si celle-ci devient inactive, une autre prend alors l’adresse MAC et devient l’interface courante.

mode 6 : balance-alb

Adaptive load balancing : ce mode inclut en plus du tlb un load balancing sur le flux entrant et seulement pour un trafic IPV4. L’équilibrage est réalisé au niveau ARP. Le module intercepte les réponses pour y réécrire l’adresse MAC de l’une des interfaces du bond tout en tenant compte des spécificités du protocole ARP. La répartition entre les différentes interfaces, se fait de façon séquentielle ( round robin ).

 

Configuration du noyau via le fichier bonding.conf:

vi /etc/modprobe.d/bonding.conf

 

et on y ajoute cela:

alias bond0 bonding

 

Pour afficher les informations du module d’agrégation:

modinfo bonding

 

Désactivation de NetworkManager:

chkconfig NetworkManager off
service NetworkManager stop


Création de l’interface bond0 :

vi /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
IPADDR=192.168.122.9
NETMASK=255.255.255.0
GATEWAY=192.168.122.1
TYPE=Bond
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
BONDING_OPTS="mode=0 miimon=100"

Le paramètre « BONDING_OPTS » décrit le mode qui sera utilisé.
Dans notre cas, nous avons configuré l’interface pour fonctionner en mode 0 (Round Robin) et nous avons défini la fréquence des MII link monitoring à 100 (en millisecondes).

 

Modification/Création des deux interfaces qui vont être agrégées :

vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
HWADDR=52:54:00:2f:e1:87
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
SLAVE=yes

vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
HWADDR=52:54:00:fe:50:1c
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
SLAVE=yes

Redémarrage du service réseau:

service network restart

Vérification de l’agrégation:

ifconfig

bond0     Link encap:Ethernet  HWaddr 52:54:00:2F:E1:87
inet adr:192.168.122.9  Bcast:192.168.122.255  Masque:255.255.255.0
adr inet6: fe80::5054:ff:fe2f:e187/64 Scope:Lien
UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
RX packets:782 errors:0 dropped:0 overruns:0 frame:0
TX packets:282 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:0
RX bytes:49341 (48.1 KiB)  TX bytes:31605 (30.8 KiB)

eth0      Link encap:Ethernet  HWaddr 52:54:00:2F:E1:87
adr inet6: fe80::5054:ff:fe2f:e187/64 Scope:Lien
UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
RX packets:56921 errors:0 dropped:60 overruns:0 frame:0
TX packets:25795 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:83123782 (79.2 MiB)  TX bytes:1776097 (1.6 MiB)
Interruption:11 Adresse de base:0x8000

eth1      Link encap:Ethernet  HWaddr 52:54:00:2F:E1:87
adr inet6: fe80::5054:ff:fe2f:e187/64 Scope:Lien
UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
RX packets:1528 errors:0 dropped:0 overruns:0 frame:0
TX packets:449 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:418511 (408.7 KiB)  TX bytes:106471 (103.9 KiB)
Interruption:10 Adresse de base:0xa000

lo        Link encap:Boucle locale
inet adr:127.0.0.1  Masque:255.0.0.0
adr inet6: ::1/128 Scope:Hôte
UP LOOPBACK RUNNING  MTU:65536  Metric:1
RX packets:40 errors:0 dropped:0 overruns:0 frame:0
TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:0
RX bytes:3178 (3.1 KiB)  TX bytes:3178 (3.1 KiB)


On peut également voir son bon fonctionnement avec la commande ip:

ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
link/ether 52:54:00:2f:e1:87 brd ff:ff:ff:ff:ff:ff
inet6 fe80::5054:ff:fe2f:e187/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
link/ether 52:54:00:2f:e1:87 brd ff:ff:ff:ff:ff:ff
inet6 fe80::5054:ff:fe2f:e187/64 scope link
valid_lft forever preferred_lft forever
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 52:54:00:2f:e1:87 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.9/24 brd 192.168.122.255 scope global bond0
inet6 fe80::5054:ff:fe2f:e187/64 scope link tentative dadfailed
valid_lft forever preferred_lft forever

On peut également afficher les paramètres de l’agrégation, comme le mode utilisé et l’interface esclave:

cat /proc/net/bonding/bond0

Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Speed: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 52:54:00:2f:e1:87
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 52:54:00:fe:50:1c
Slave queue ID: 0

 

Configuration d’un alias ip sur l’agrégation:

cp -p /etc/sysconfig/network-scripts/ifcfg-bond0 /etc/sysconfig/network-scripts/ifcfg-bond0:1
vi /etc/sysconfig/network-scripts/ifcfg-bond0:1

 

Et nous allons adapter les parametres « DEVICE » et « IPADDR » comme ci dessous:

DEVICE=bond0:1
IPADDR=192.168.122.19
NETMASK=255.255.255.0
GATEWAY=192.168.122.1
TYPE=Bond
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
BONDING_OPTS="mode=0 miimon=100"

Redémarrez le service réseau:

service network restart

Vérification:

ifconfig

bond0     Link encap:Ethernet  HWaddr 52:54:00:2F:E1:87
inet adr:192.168.122.9  Bcast:192.168.122.255  Masque:255.255.255.0
adr inet6: fe80::5054:ff:fe2f:e187/64 Scope:Lien
UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
RX packets:1298 errors:0 dropped:0 overruns:0 frame:0
TX packets:431 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:0
RX bytes:78505 (76.6 KiB)  TX bytes:55055 (53.7 KiB)

bond0:1   Link encap:Ethernet  HWaddr 52:54:00:2F:E1:87
inet adr:192.168.122.19  Bcast:192.168.122.255  Masque:255.255.255.0
UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1

eth0      Link encap:Ethernet  HWaddr 52:54:00:2F:E1:87
adr inet6: fe80::5054:ff:fe2f:e187/64 Scope:Lien
UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
RX packets:57180 errors:0 dropped:60 overruns:0 frame:0
TX packets:25870 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:83138488 (79.2 MiB)  TX bytes:1790539 (1.7 MiB)
Interruption:11 Adresse de base:0x8000

eth1      Link encap:Ethernet  HWaddr 52:54:00:2F:E1:87
adr inet6: fe80::5054:ff:fe2f:e187/64 Scope:Lien
UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
RX packets:1786 errors:0 dropped:0 overruns:0 frame:0
TX packets:524 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:433021 (422.8 KiB)  TX bytes:116177 (113.4 KiB)
Interruption:10 Adresse de base:0xa000

lo        Link encap:Boucle locale
inet adr:127.0.0.1  Masque:255.0.0.0
adr inet6: ::1/128 Scope:Hôte
UP LOOPBACK RUNNING  MTU:65536  Metric:1
RX packets:40 errors:0 dropped:0 overruns:0 frame:0
TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:0
RX bytes:3178 (3.1 KiB)  TX bytes:3178 (3.1 KiB)

On peut également voir son bon fonctionnement avec la commande ip:

ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
link/ether 52:54:00:2f:e1:87 brd ff:ff:ff:ff:ff:ff
inet6 fe80::5054:ff:fe2f:e187/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
link/ether 52:54:00:2f:e1:87 brd ff:ff:ff:ff:ff:ff
inet6 fe80::5054:ff:fe2f:e187/64 scope link
valid_lft forever preferred_lft forever
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 52:54:00:2f:e1:87 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.9/24 brd 192.168.122.255 scope global bond0
inet 192.168.122.19/24 brd 192.168.122.255 scope global secondary bond0:1
inet6 fe80::5054:ff:fe2f:e187/64 scope link tentative dadfailed
valid_lft forever preferred_lft forever

Derniers Articles