Watchdog IPMI

Parmi les composantes couramment fournies par l’interface IPMI (voir IPMI : Intelligent Platform Management Interface), on note la présence d’un « watchdog » (voir « Un “watchdog” veille sur vos serveurs« ) pilotable depuis Linux (trouvé sur IBM, DELL, etc).

Rappel

Le « watchdog » est un décompteur qui égraine les secondes d’une valeur donnée (exemple 300 pour 5 minutes) jusqu’à zéro. Toutes les X secondes (X < 300 dans l’exemple), le démon « watchdog », ré-initialise le décompte. Si le système d’exploitation est crashé, le démon ne ré-initialise plus le décompteur. Arrivé à zéro, le décompteur effectue une action demandée (en générale redémarrage de la machine – « hard reset »).

Installation

Afin d’être utilisé, le watchdog doit être activé dans le BIOS de la machine. Vérifiez que tel est bien le cas pour votre configuration. Exemple sur un Dell R510 :

BIOS Dell R510 - Activation du Watchdog

Pour contrôler et utiliser votre watchdog, le support « IPMI Watchdog Timer » doit être activé dans le noyau. Vérifiez que le module est bien présent sur votre système :

root@srv:~# find /lib/modules/`uname -r` -iname *watchdog*
/lib/modules/2.6.32-5-amd64/kernel/drivers/char/ipmi/ipmi_watchdog.ko
...

Enfin l’installation du paquet « watchdog » fournira les binaires nécessaires à la configuration et à l’utilisation du service :

root@srv:~# aptitude install watchdog
...

ou « yum install watchdog » sur les dérivés de Red Hat et « emerge -av watchdog » sous Gentoo Linux.

Configuration

La configuration ce décompose en 2 partie :

  • configuration du démon ;
  • configuration du module.

Configuration du démon watchdog

Toute la configuration du démon s’effectue dans le fichier « /etc/watchdog ». Une configuration minimale consiste à renseigner les variables « watchdog-device« , qui spécifie le point d’accès au décompteur, et « interval » qui définit l’intervalle de temps au bout duquel le décompteur sera ré initialisé :

root@srv:~# sed -e '/^#\|^$/d' /etc/watchdog.conf 
watchdog-device         = /dev/watchdog
interval                = 10

Pour plus de détails sur les autres options disponibles consultez « Un “watchdog” veille sur vos serveurs » sur Admin Linux.

Configuration du module « ipmi_watchdog »

Le module « ipmi_watchdog » accepte un certain nombre de paramètres lors de son chargement qui configurent le comportement qu’adoptera le décompteur matériel.

root@srv:~# modinfo ipmi_watchdog
...
description:    watchdog timer based upon the IPMI interface.
...
parm:           ifnum_to_use:The interface number to use for the watchdog timer.  Setting to -1 defaults to the first registered interface
parm:           timeout:Timeout value in seconds.
parm:           pretimeout:Pretimeout value in seconds.
parm:           action:Timeout action. One of: reset, none, power_cycle, power_off.
parm:           preaction:Pretimeout action.  One of: pre_none, pre_smi, pre_nmi, pre_int.
parm:           preop:Pretimeout driver operation.  One of: preop_none, preop_panic, preop_give_data.
parm:           start_now:Set to 1 to start the watchdog assoon as the driver is loaded. (int)
parm:           nowayout:Watchdog cannot be stopped once started (default=CONFIG_WATCHDOG_NOWAYOUT) (int)

Au minimum, vous devrez renseigner le paramètre « action » qui précise l’action à effectuer en cas d’expiration du décompte « timeout » (par défaut « rien »).

« timeout » Est la durée en secondes avant expiration du décompte (et donc exécution de « action »). Par défaut, cette valeur est initialisée à 300 (5 minutes).

En complément du module du watchdog, vous devrez charger les modules d’accès à l’IPMI que sont « ipmi_si » et « ipmi_devintf » :

root@srv:~# modprobe ipmi_si
root@srv:~# modprobe ipmi_devintf
root@srv:~# modprobe ipmi_watchdog timeout=300 action=reset

Pour que ces modules soient chargés au démarrage de votre serveur ajoutez les à votre fichier « /etc/modules » :

root@srv:~# cat /etc/modules 
...
ipmi_si
ipmi_devintf
ipmi_watchdog timeout=300 action=reset

Utilisation, contrôles et tests

Une fois les modules chargés, et le démon configuré lancez le service « watchdog » :

root@srv:~# /etc/init.d/watchdog start 
Starting watchdog daemon....

Vous pouvez contrôler que le démon fonctionne via « ps » :

root@srv:~# ps aux | grep watchdog
...
root      7048  0.0  0.0   3928   492 ?        Ss   15:03   0:00 /usr/sbin/watchdog
...

Le processus « /usr/sbin/watchdog » est le garant du fonctionnement de votre système. S’il s’arrête brusquement (freeze de la machine ou défaillance), la machine redémarrera une fois le délai « timeout » écoulé.

Contrôle du fonctionnement

L’interface « ipmitool » permet de contrôler le bon fonctionnement du timer. Commencez par installer l’utilitaire « ipmitool » :

root@srv:~# apt-get install ipmitool
...

(ou « yum install ipmitool », ou encore « emerge -av ipmitool » en fonction de votre distribution).

Le status du watchdog est accessible sous « mc watchdog » (pour « management controler ») de l’interface « ipmitool » :

root@srv:~# ipmitool mc watchdog get
Watchdog Timer Use:     SMS/OS (0x44)
Watchdog Timer Is:      Started/Running
Watchdog Timer Actions: Hard Reset (0x01)
Pre-timeout interval:   0 seconds
Timer Expiration Flags: 0x10
Initial Countdown:      300 sec
Present Countdown:      398 sec
  • Watchdog Timer Is : reseigne sur l’état du watchdog (ici le watchdog et en marche : « Started/Running ») ;
  • Watchdog Timer Actions : action effectuée en cas d’expiration du délai « Initial Countdown » (« Hard Reset » dans cet exemple) ;
  • Initial Countdown : délai après lequel l’action « Watchdog Timer Actions » est effectuée :
  • Present Countdown : état du décompteur. Si cette valeur arrive à « 0 », le système executera « Watchdog Timer Actions ».

Si vous appelez régulièrement cette commande vous verrez varier la valeur de « Present Countdown ». Elle ne doit pas descendre sous « Initial Countdown » (définit au chargement du module) – interval (définit dans « /etc/watchdog.conf ») :

"Initial Countdown" - "Present Countdown" < "interval"

Test de fonctionnement

Le test de fonctionnement est des plus brutaux… Il consiste soit à effectuer un kernel panic (voir “kernel panic” : Faites paniquer votre noyau Linux), soit à tuer le processus « watchdog » :

root@srv:~# ps aux | grep watchdog
...
root      7048  0.0  0.0   3928   492 ?        Ss   15:03   0:00 /usr/sbin/watchdog
...
root@srv:~# kill -9 7048

Vous pouvez observer l’évolution du décompte… :

root@srv:~# watch -n3 ipmitool mc watchdog get
Every 3.0s: ipmitool mc watchdog get                    Thu Sep  8 17:27:14 2011
 
...
Initial Countdown:      300 sec
Present Countdown:      209 sec

… jusqu’au redémarrage du serveur (quand « Present Countdown » = 0).

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *