Configuration de l'IPMP

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

1 Introduction

Le multiacheminement sur réseau IP (IPMP, IP Network Multipathing) permet de détecter les défaillances des interfaces physiques et de basculer en transparence l'accès au réseau pour un système présentant plusieurs interfaces sur une même liaison IP. IPMP permet également de répartir la charge des paquets pour les systèmes dotés de plusieurs interfaces.

L'équivalent sous Linux s'appelle le bonding et sous BSD un trunk.

IPMP améliore la fiabilité, la disponibilité et les performances du réseau des systèmes dotés de plusieurs interfaces physiques. Il arrive parfois qu'une interface physique ou le matériel réseau connecté à cette interface présente une défaillance ou requière des opérations de maintenance. Habituellement, il devient alors impossible de contacter le système par le biais de toutes les adresses IP associées à l'interface défaillante. En outre, toute connexion existante vers le système utilisant ces adresses IP est perturbée.

L'utilisation d'IPMP permet de configurer une ou plusieurs interfaces physiques dans un groupe IPMP. Une fois la configuration IPMP terminée, le système contrôle automatiquement les interfaces du groupe IPMP. En cas de défaillance ou de retrait pour maintenance d'une interface du groupe, IPMP effectue une migration automatique, ou basculement, des adresses IP de l'interface. Le destinataire de ces adresses est une interface en fonctionnement au sein du groupe IPMP de l'interface défaillante. La fonction de basculement IPMP permet de conserver la connectivité et empêche toute perturbation des connexions existantes. En outre, IPMP répartit le trafic réseau sur l'ensemble des interfaces du groupe IPMP, ce qui permet d'améliorer les performances réseau globales. Ce processus est appelé répartition de charge.

2 Configuration

2.1 Prérequis

IPMP est intégré au système d'exploitation Solaris et ne requiert aucun matériel spécial. Toute interface prise en charge par le système d'exploitation Solaris peut être utilisée avec IPMP. Cependant, la configuration et la topologie de votre réseau doivent respecter les exigences suivantes relatives à IPMP :

  • Toutes les interfaces d'un groupe IPMP doivent disposer d'adresses MAC uniques. Notez que par défaut, les interfaces réseau de systèmes SPARC partagent la même adresse MAC. Par conséquent, vous devez modifier explicitement l'adresse par défaut afin d'utiliser IPMP sur des systèmes SPARC.
  • Toutes les interfaces d'un groupe IPMP doivent être du même type de média (Ethernet avec Ethernet, Fibre avec Fibre, mais pas de mix).
  • Toutes les interfaces d'un groupe IPMP doivent se trouver sur la même liaison IP (même subnet).
  • En fonction de vos exigences en matière de détection de défaillance, vous devrez soit utiliser des types spécifiques d'interfaces réseau, soit configurer des adresses IP supplémentaires sur chaque interface réseau.

2.2 /etc/hosts

Il va falloir configurer le fichier hosts afin de lui renseigner les IP des machines, des IP de tests et des vip :

Configuration File /etc/hosts
#
# Internet host table
#
::1             localhost
127.0.0.1       localhost
192.168.0.72    sun-node1
192.168.0.74    sun-node1-if2
192.168.0.73    sun-node1-test-e1000g0
192.168.0.77    vip1
192.168.0.78    vip2

2.3 /etc/netmasks

Il va maintenant falloir mettre le network et le subnet dans le fichier /etc/netmasks :

Configuration File /etc/netmasks
#
# The netmasks file associates Internet Protocol (IP) address
# masks with IP network numbers.
#
#       network-number  netmask
#
# The term network-number refers to a number obtained from the Internet Network
# Information Center.
#
# Both the network-number and the netmasks are specified in
# "decimal dot" notation, e.g:
#
#               128.32.0.0 255.255.255.0
#
192.168.0.0     255.255.255.0

2.4 Création d'un groupe IPMP

Il va falloir créer un groupe IPMP et y insérer des cartes réseaux dedans. Si nous souhaitons maintenant avoir de la tolérance de pannes, il va falloir activer une IP de test. Cette IP ne fera donc pas partie des VIP (Virtual Private Interface). Configurez donc comme ceci :

Configuration File /etc/hostname.e1000g0
192.168.0.72 netmask + broadcast + group ipmp0 up
addif 192.168.0.73 deprecated -failover netmask + broadcast + up

Configuration File /etc/hostname.e1000g1
192.168.0.74 netmask + broadcast + group ipmp0 standby up

Voici les significations :

  • deprecated : Indique que l'adresse test n'est pas utilisée pour les paquets sortants.
  • failover : Indique que l'adresse test ne bascule pas en cas de défaillance de l'interface.
  • standby : Marque l'interface comme étant l'interface de réserve.

Redémarrer ensuite pour appliquer la conf et vérifier qu'au reboot elle est bien prise en compte.

2.5 Modifier le temps de probing

Si vous souhaitez changer l'interval de check auquel le système va détecter la déconnection d'une interface, éditez le fichier suivant :

Configuration File /etc/default/mpathd
#
#pragma ident   "@(#)mpathd.dfl 1.2     00/07/17 SMI"
#
# Time taken by mpathd to detect a NIC failure in ms. The minimum time
# that can be specified is 100 ms.
# 
FAILURE_DETECTION_TIME=10000
#
# Failback is enabled by default. To disable failback turn off this option
#
FAILBACK=yes
#
# By default only interfaces configured as part of multipathing groups 
# are tracked. Turn off this option to track all network interfaces 
# on the system
#
TRACK_INTERFACES_ONLY_WITH_GROUPS=yes

3 Tests

Pour tester maintenant, c'est assez simple, regardez les config actuelles :

Command ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000 
e1000g0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
        inet 192.168.0.72 netmask ffffff00 broadcast 192.168.0.255
        groupname ipmp0
        ether 0:1e:68:49:ae:98 
e1000g0:1: flags=9040843<UP,BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER> mtu 1500 index 2
        inet 192.168.0.73 netmask ffffff00 broadcast 192.168.0.255
e1000g0:2: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
        inet 192.168.0.74 netmask ffffff00 broadcast 192.168.0.255
e1000g1: flags=69040842<BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,NOFAILOVER,STANDBY,INACTIVE> mtu 0 index 3
        inet 0.0.0.0 netmask 0 
        groupname ipmp0
        ether 0:1e:68:49:ae:99

Ici on peu clairement voir les interfaces IPMP ainsi que l'interface qui est en standby et inactive.
Maintenant, si on débranche la première interface, la bascule va se faire tout seul :-) :

Command ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000 
e1000g0: flags=19000802<BROADCAST,MULTICAST,IPv4,NOFAILOVER,FAILED> mtu 0 index 2
        inet 0.0.0.0 netmask 0 
        groupname ipmp0
        ether 0:1e:68:49:ae:98 
e1000g0:1: flags=19040803<UP,BROADCAST,MULTICAST,DEPRECATED,IPv4,NOFAILOVER,FAILED> mtu 1500 index 2
        inet 192.168.0.73 netmask ffffff00 broadcast 192.168.0.255
e1000g1: flags=21040842<BROADCAST,RUNNING,MULTICAST,DEPRECATED,IPv4,STANDBY> mtu 1500 index 3
        inet 192.168.0.72 netmask ffffff00 broadcast 192.168.0.255
        groupname ipmp0
        ether 0:1e:68:49:ae:99 
e1000g1:1: flags=21000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4,STANDBY> mtu 1500 index 3
        inet 192.168.0.74 netmask ffffff00 broadcast 192.168.0.255

Là l'interface est passée en failed. Et il n'y a pas eu de coupure pendant cette période. L'interface qui est en standby n'est maintenant plus inactive. Donc maintenant c'est fonctionnel, et si on rebranche l'intercace, on repasse comme dans la configuration précédente.

4 Ressources

http://docs.sun.com/app/docs/doc/820-2982/ipmptm-1?l=fr&a=view
http://www.eng.auburn.edu/~doug/howtos/multipathing.html