Channel Bonding sur RHES 5.2

De Le wiki de Fred sur gantzer.eu

Sommaire

Mise en place de la configuration « channel bonding »

Principe

Le channel bonding est l’équivalent de l’etherchannel sous AIX ou du teaming sous Windows. Il s’agit d’un agrégat de ports ethernets. Dans cet exemple, le bonding est configuré en mode failover. Ceci veut dire qu’une seule carte ethernet de l’agrégat est active et que les autres sont présentes en cas de défaillance.

Afin de configurer de manière « intelligente le bonding », il faut répartir les liens en failover sur les cartes physiques différentes. En effet, il ne faut pas que dans le cas de carte ethernet dual port, la perte d’une carte cause la perte de bonding. Il faut croiser le câblage. Le chapitre suivant explique comment faire la corrélation en les cartes physiques et driver.

Repérage des cartes ethernet sur le bus PCI

Afin de pouvoir identifier quel driver « ethx » correspond un port physique, procéder comme suit.

Avec la commande lspci :

  # lspci
  
  01:03.0 VGA compatible controller: ATI Technologies Inc ES1000 (rev 02)
  03:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12)
  04:00.0 PCI bridge: Broadcom EPB PCI-Express to PCI-X Bridge (rev c3)
  05:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12)
  0b:00.0 Fibre Channel: Emulex Corporation Zephyr-X LightPulse Fibre Channel Host Adapter (rev 02)
  0b:00.1 Fibre Channel: Emulex Corporation Zephyr-X LightPulse Fibre Channel Host Adapter (rev 02)
  13:00.0 Fibre Channel: Emulex Corporation Zephyr-X LightPulse Fibre Channel Host Adapter (rev 02)
  13:00.1 Fibre Channel: Emulex Corporation Zephyr-X LightPulse Fibre Channel Host Adapter (rev 02)

Dans cet exemple, on voit que l’on dispose de deux cartes ethernet single port :

  03:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12)
  05:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12)

Légende: 03:00.0 03: numéro du Bus PCI 00: Position sur le bus .0 : numéro du Canal sur le device (.0, .1 sur la carte pci à deux ports)

  • Pour faire la corrélation avec le device logique (ethX):

Aller dans le répertoire cd /sys/class/net

  # cd /sys/class/net
  # ll
  total 0
  drwxr-xr-x 3 root root 0 Nov  5 16:11 eth0
  drwxr-xr-x 3 root root 0 Nov  5 16:11 eth1
  drwxr-xr-x 3 root root 0 Nov  5 16:11 lo
  drwxr-xr-x 3 root root 0 Nov  5 16:11 sit0

Dans chaque repertoire ethx, il y a un lien symbolique qui fait le lien avec le périphérique :

  # ll eth*/device
  lrwxrwxrwx 1 root root 0 Nov 13 15:50 eth0/device -> ../../../devices/pci0000:00/0000:00:06.0/0000:02:00.0/0000:03:00.0
  lrwxrwxrwx 1 root root 0 Nov 13 15:50 eth1/device -> ../../../devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0

Donc, dans cet exemple, eth0 correspond à la carte 03:00.0 et eth1 à la carte 05:00.0.

Vérification de la vitesse des interfaces

Utiliser la commande suivante pour vérifier que les cartes sont bien configurées en 1000/full duplex (c’est surtout vrai pour un lien vers le NAS !!) et que le lien est bien UP :

  # mii-tool –v
  
  eth0: 1000 Mbit, full duplex, link ok
  product info: vendor 00:08:18, model 54 rev 6
  basic mode:   1000 Mbit, full duplex
  basic status: link ok
  capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
  advertising:  100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control

NB: il peut y avoir des messages d'erreur sur mii-tool. ceci est lié au fait que mii-tool n'intègre pas toutes les caratèristiques des nouvelles cartes. Il faut privilégier ethtool danc ce cas

ou bien :

  # ethtool eth1
  
  Settings for eth0:
  Supported ports: [ TP ]
  Supported link modes:   10baseT/Half 10baseT/Full
                          100baseT/Half 100baseT/Full 1000baseT/Full
                      
  Supports auto-negotiation: Yes
       
  Advertised auto-negotiation: Yes
       Speed: 100Mb/s
       Duplex: Half
       Port: Twisted Pair
       PHYAD: 1
       Transceiver: internal
       Auto-negotiation: on
       Supports Wake-on: g
       Wake-on: d
       Link detected: yes


Si besoin, forcer la vitesse avec :

  /sbin/mii-tool -F 1000baseTx-FD eth0

Ou

  ethtool -s eth0 speed 1000 duplex full

Ajouter la commande dans /etc/rc.local pour la prise en compte au boot

NB: dans le cas de machines de production au Dauphiné Libéré, les interface sont en auto-négociation

Définition des interfaces de bonding

Dans cet exemple, nous allons montrer comment définir une interface bonding en mode failover.

NB: Il vaut mieux travailler en mode console, même si ce n’est pas forcément nécessaire car on va redémarrer les services réseau. Si on utilise Putty, ce n’est pas toujours nécessaire car il est capable de raccrocher une session IP perdue.

Exemple de configuration : Les interfaces eth0 et eth5 seront agrégées pour le bonding.

  • Définition des fichiers de configuration réseau:
  cd /etc/sysconfig/network-scripts
  
  # vi  ifcfg-bond0
  
  DEVICE=bond0
  IPADDR=10.xxx.129.33
  NETMASK=255.255.255.0
  NETWORK=10.xxx.129.0
  BROADCAST=10.xxx.129.255
  GATEWAY=10.xxx.129.10
  ONBOOT=yes
  BOOTPROTO=none
  USERCTL=no
  BONDING_OPTS="miimon=100 mode=1 primary=eth0"

NB1 : Le mode 1 correspond au mode « fault-tolerance (active-backup) ». On privilégie eth0 comme interface active par défaut dans le bonding.

NB: les bonding options sont passées directement dans le fichier de configuration bonding ifcfg-bondx au lieu du /etc/modprobe.conf car il y a un bug sur cette version de noyau empêchant de définir plusieurs primary sur plusieurs interfaces de bonding.

  # vi  ifcfg-eth0
  
  DEVICE=eth0
  HWADDR=00:22:64:0D:85:00
  USERCTL=no
  ONBOOT=yes
  MASTER=bond0
  SLAVE=yes
  BOOTPROTO=none
  PEERDNS=no


  # vi  ifcfg-eth5
  
  DEVICE=eth5
  HWADDR=00:1F:29:5B:FC:75
  ONBOOT=yes
  USERCTL=no
  MASTER=bond0
  SLAVE=yes
  BOOTPROTO=none

NB: Dans la conf ifcfg-bond0, la gateway n'est pas obligatoire. C’est juste un exemple pour la définition de la gateway dans un bonding. Si on a une gateway par défaut pour toutes les interfaces, la gateway est définie dans le fichier /etc/sysconfig/network

  • Mise à jour du noyau (pour une seule interface de bonding) :
  # cp /etc/modprobe.conf /etc/modprobe.conf.sauve
  # vi /etc/modprobe.conf
  
  alias eth0 bnx2
  alias eth1 bnx2
  alias eth2 e1000e
  alias eth3 e1000e
  alias eth4 e1000e
  alias eth5 e1000e
  alias scsi_hostadapter cciss
  alias scsi_hostadapter1 ata_piix
  alias bond0 bonding

Attention : Si on a plusieurs interfaces de bonding, il faut recréer un alias de la facon suivante :

  alias eth0 bnx2
  alias eth1 bnx2
  alias eth2 e1000e
  alias eth3 e1000e
  alias eth4 e1000e
  alias eth5 e1000e
  alias scsi_hostadapter cciss
  alias scsi_hostadapter1 ata_piix
  alias bond0 bonding
  alias bond1 bonding


  • Redémarrage de la couche réseau
  service network restart

NB : un reboot peut être nécessaire au cas ou le module ne soit pas rechargé correctement

  • Vérification que le bonding est bien monté
  # ifconfig -a
  bond0  Link encap:Ethernet  HWaddr 00:22:64:0D:85:00
         inet addr:10.xxx.129.33  Bcast:10.228.129.255  Mask:255.255.255.0
         inet6 addr: fe80::222:64ff:fe0d:8500/64 Scope:Link
         UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
         RX packets:9085 errors:0 dropped:0 overruns:0 frame:0
         TX packets:1631 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:3807773 (3.6 MiB)  TX bytes:464212 (453.3 KiB)
  
  eth0   Link encap:Ethernet  HWaddr 00:22:64:0D:85:00
         inet6 addr: fe80::222:64ff:fe0d:8500/64 Scope:Link
         UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
         RX packets:5381 errors:0 dropped:0 overruns:0 frame:0
         TX packets:1607 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000
         RX bytes:2060997 (1.9 MiB)  TX bytes:459614 (448.8 KiB)
         Interrupt:185 Memory:f8000000-f8012100
  
  eth5   Link encap:Ethernet  HWaddr 00:22:64:0D:85:00
         inet6 addr: fe80::222:64ff:fe0d:8500/64 Scope:Link
         UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
         RX packets:3704 errors:0 dropped:0 overruns:0 frame:0
         TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:100
         RX bytes:1746776 (1.6 MiB)  TX bytes:4598 (4.4 KiB)
         Memory:fdfa0000-fdfc0000


Il est intéressant de voir que les adresses MAC pour bond0, eth0 et eth5 sont les mêmes.

  • Vérification que le bonding et bien actif
  # cat /proc/net/bonding/bond0
  
  Ethernet Channel Bonding Driver: v3.2.4 (January 28, 2008)
  
  Bonding Mode: fault-tolerance (active-backup)
  Primary Slave: eth0
  Currently Active Slave: eth0
  MII Status: up
  MII Polling Interval (ms): 100
  Up Delay (ms): 0
  Down Delay (ms): 0
  
  Slave Interface: eth0
  MII Status: up
  Link Failure Count: 0
  Permanent HW addr: 00:22:64:0d:85:00
  
  Slave Interface: eth5
  MII Status: up
  Link Failure Count: 0
  Permanent HW addr: 00:1f:29:5b:fc:75
  

On peut voir que c’est eth0 qui est active pour l’instant.


fix de la table de routage

Il y a une entrée en 169.254.0.0 de la table de routage.

Ceci est lié à l’APIPA (Automatic Private IP Addressing) Normalement, ça ne monte que lorsque l’on est en DHCP... un petit bug...


Ajouter dans /etc/sysconfig/network:

  NOZEROCONF=yes 

redemarrer les services réseau et vérifier par netstat -r

Outils personnels
Navigation