Some IT infos

Aller au contenu | Aller au menu | Aller à la recherche

Haute dispo, la suite: serveur NFSv4 en Master/Slave

48 heures entre les deux articles, c'etait un poil moins simple...
Pré-requis: savoir faire un DRBD et passer de l'un a l'autre.

Le but est de monter deux VM avec IP1 et IP2, et avoir une IPV qui sera attaché soit à VM1ou VM2 suivant qui aura le service nfsv4. Chaque VM se partage via DRBD le stockage. La machine primary a le montage du disque /local et le service nfs. Comme c'est du NFSv4, c'est statefull, donc le /var/lib/nfs contient des informations importantes à mettre à disposition de l'autre VM en cas de bascule. Et le service nfs ne demarrera pas sans ce dossier -> Il sera mis sur le /local dans un dossier ".private", et /var/lib/nfs sera un lien symbolique vers ce répertoire. Le délai de bascule est de 90s suivant le contenu de /proc/fs/nfsd/nfsv4leasetime

Les logiciels

apt-get install pacemaker drbd8-utils nfs-kernel-server psmisc; update-rc.d drbd disable 2; update-rc.d nfs-kernel-server disable 2
On retire les scripts, c'est le pacemaker qui va demarrer lui même les services, et il aime pas quand c'est pas lui qui fait le boulot (psmisc est nécessaire pour avoir /bin/fuser, j'ai passé 4h dessus pour vous).

La conf Corosync

Puis sur le serveur VM1, changer le demarrage automatique, et le fichier de conf de /etc/corosync/corosync.conf

sed -i 's/START=no/START=yes/' /etc/default/corosync

interface {
            ringnumber: 0
            bindnetaddr: AAA.BBB.CCC.DDD
            mcastaddr: 224.0.0.EEE 
            mcastport: 1974
    }

Mettre une EEE entre 128 et 200 pour suivre les RFC. AAA.BBB.CCC.DDD est votre IP virtuelle IPV

Générer une clef et la copier sur l'autre serveur, puis redemarrer les services corosync

corosync-keygen
scp /etc/corosync/authkey VM2:/etc/corosync/authkey
scp /etc/corosync/corosync.conf VM2:/etc/corosync/corosync.conf
scp /etc/default/corosync VM2:/etc/default/corosync

Sur la VM1 primary

mount /dev/drbd1 /local
mkdir /local/.private
mv /var/lib/nfs /local/.private/

Etre sur d'avoir bien arreté les serveurs NFS sur les deux VM, puis sur les deux serveurs:

rm -fr /var/lib/nfs; ln -s /local/.private/nfs /var/lib/nfs

La conf Pacemaker

Un outil qu'il est bien.

crm configure edit vous lance un bon vieux vi de derrière les faggots.

node VM1 \
       attributes standby="off"
node VM2 \
       attributes standby="off"
primitive p_drbd_VMS ocf:linbit:drbd \
       params drbd_resource="VMS" \
       op monitor interval="20" role="Master" \
       op monitor interval="30" role="Slave"
primitive p_fs_vms ocf:heartbeat:Filesystem \
       params device="/dev/drbd1" directory="/local" fstype="ext3" \
       op monitor interval="30s"
primitive p_ip_nfs ocf:heartbeat:IPaddr2 \
       params ip="AAA.BBB.CCC.DDD" cidr_netmask="ZZ" \
       op monitor interval="10s"
primitive p_nfs_service lsb:nfs-kernel-server \
       op monitor interval="10"
group g p_fs_vms p_ip_nfs p_nfs_service
ms ms_drbd_VMS p_drbd_VMS \
        meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
colocation c_drbd_and_mount inf: ms_drbd_VMS:Master g
order o_drd_before_fs inf: ms_drbd_VMS:promote p_fs_vms:start
order o_nfsservice_after_fs inf: p_fs_vms:start p_nfs_service:start

Changer dans property, ce qui va bien:

property $id="cib-bootstrap-options" \
        stonith-enabled="false" \
        no-quorum-policy="ignore" 
...

Les primitives commencent par un p_ et sont utilisé ensuite dans les autres objets. On peut definir un type d'objet comme ms pour Master/Slave, grouper un ensemble d'objets, comme ici le fait d'avoir l'IP le service nfs et le filesystem monté.

Le groupe est juste la pour pouvoir simplifier les écritures. Si on veux que ces services tournent sur le même serveur, il faut dire qu'ils sont localisé au même endroit avec colocation. A charge de pacemaker de résoudre les contraintes pout qu'ils arrivent tous au meme endroit.

L'ordre de démarrage étant important, on peut le spécifier via les order. Attention, si un order échoue, le système peut basculer l'ordre en sens inverse.

Les commandes qui vont bien pour crm

Pour basculer d'un serveur a l'autre:

crm_ressource --resource p_nfs_service --move

Pour faire oublier des erreurs d'une primitive, par ex le montage du drbd:

crm_ressource --resource p_fs_vms --cleanup

Conclusion

Encore une techno que j'aurai du mettre en place dès le début. Me fallait juste du temps pour tester ...

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.

Fil des commentaires de ce billet