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