NFS en haute disponibilité

NFS est un service délicat à mettre en haute disponibilité. Sans configuration soigneuse, les clients NFS ont tendance à se figer en attente d'un aquittement d'entrée/sortie sur le partage. Ce guide expose la configuration adéquate pour une bascule transparente du service NFS sous Linux.

Configuration HA pour OpenSVC

Créer un service HA, en utilisant le guide High Availability setup.

Make sure the <OSVCETC>/nfssvc.d symlink points to a directory hosted on a shared filesystem, handled by the nfssvc OpenSVC service. This howto uses /nfssvc as the root service shared filesystem.

On the master node

$ mkdir -p /nfssvc/etc/init.d
$ ln -s /nfssvc/etc/init.d /etc/opensvc/nfssvc.d

Configuration NFS

Le service NFS sous Linux utilise /var/lib/nfs pour stocker à la fois les méta-données privées au noeud et celles qui doivent basculer. La complexité dans la mise en haute disponibilité est de séparer ces deux types de données.

Démarrage du serveur NFS

Le démarrage du service NFS sera pris en charge par le service OpenSVC. Il faut donc arrêter le service NFS et inhiber son démarrage au boot des serveurs.

Sur les deux noeuds

$ /etc/init.d/nfs stop
$ /etc/init.d/nfslock stop

$ chkconfig nfs off
$ chkconfig nfslock off

Créer le lanceur du service OpenSVC.

On the master node:

$ cat <<EOF >/etc/opensvc/nfssvc.d/nfs
#!/bin/bash

nfsstart(){
        /etc/init.d/nfs start
        /etc/init.d/nfslock start
}

nfsstop(){
        /etc/init.d/nfslock stop
        /etc/init.d/nfs stop
}

case "$1" in
start)
        nfsstart
        ;;
stop)
        nfsstop
        ;;
restart)
        nfsstop
        nfsstart
        ;;
*)
        echo "usage $0 { start | stop | restart }"
        ;;
esac

exit 0
EOF

And activate this script.

On the master node

$ cd /etc/opensvc/nfssvc.d
$ ln -s nfs S10nfs
$ ln -s nfs K10nfs

Données propres aux noeuds

Les données qui doivent rester locales aux noeuds sont contenues dans le pseudo système de fichiers RPC pipefs. Sont point d'ancrage par défaut est /var/lib/nfs/rpc_pipefs. Comme /var/lib/nfs doit être déplacé dans l'arborescence du système de fichier basculable, il faut changer l'emplacement de ce point d'ancrage.

Créer le nouveau point d'ancrage.

Sur les deux noeuds

$ mkdir /var/lib/rpc_pipefs

Changer ces fichiers de configurations du système pour utiliser ces nouveaux points d'ancrage.

Sur les deux noeuds

/etc/modprobe.d/modprobe.conf.dist
/etc/idmapd.conf

Données propres au service

/var/lib/nfs contient des données essentielles pour la reprise des sessions clientes. C'est pourquoi ce répertoire doit suivre le service en cas de bascule.

On the master node

$ mkdir -p /nfssvc/var/lib
$ mv /var/lib/nfs /nfssvc/var/lib/nfs

La liste des exports devrait également se déplacer avec le service, pour éviter une dérive de configuration entre les deux noeuds.

On the master node

$ mv /etc/exports /etc/opensvc/nfssvc.d/

Sur les deux noeuds

$ ln -sf /nfssvc/var/lib/nfs /var/lib/nfs
$ ln -sf /etc/opensvc/nfssvc.d/exports /etc/exports

Configurer nfs pour écouter sur l'adresse internet du service

Sur les deux noeuds

Modifier STATD_HOSTNAME dans /etc/sysconfig/nfs

Epilogue

Rebooter les noeuds pour activer l'utilisation du nouvel emplacement de rpc_pipefs et commencer à tester des bascules.