Table des matières

Cluster de virtualisations DRBD/OCFS2/Libvirt-kvm/Pacemaker

Présentation de la solution

Ce cluster de virtualisations est basé sur la technologie KVM mettant à profit le support de la virtualisation matérielle au niveau des processeurs. Libvirt, une librairie d'abstraction de la virtualisation, est utilisée pour manipuler les machines virtuelles KVM. En cas d'incompatibilité avec la virtualisation matérielle (et donc avec KVM), qemu peut venir remplacer KVM avec des performances moindre. Un lien réseau dédié entre les machines physiques servira à la réplication DRBD, au maintien du cluster OCFS2, au communication inter-libvirt et à la surveillance de pacemaker.

Pour avoir un système de virtualisation permettant les bascules à chaud des machines virtuelles entre les machines physiques, il est nécessaire d'avoir un espace de stockage partagé et accessible depuis les deux machines physiques. Pour cela nous utiliserons DRBD (en mode primaire/primaire) et le système de fichiers répartis OCFS2. Controld est également présent afin d'avoir un mécanisme de lock partagé (=DLM). Cet espace de stockages contiendra les disques des machines virtuelles (sous la forme de fichiers) et la configuration de la libvirt commune entre les machines.

Pacemaker viendra ensuite se greffer sur l'architecture de virtualisation afin de mettre en place un système de prise de pouls permettant la haute-disponibilité des machines virtuelles. Pacemaker aura pour rôle de surveiller l'état des machines physiques afin d'assurer la reprise des machines virtuelles délaissées par une machines physiques indisponibles. Pacemaker manipulera les machines virtuelles au travers la libvirt.

La compatibilité OCFS2/DRBD est fortement perturbée sur les derniers kernel. Il vaudrait mieux éviter ce couple à l'avenir. Une solution comme Ceph (http://ceph.com/) semble une bonne alternative. Dans la mesure du possible, les clusters incluant de la réplication de système de fichiers sont bien souvent plus stable et plus facilement maintenable en mode actif/passif.

Installation

Mise en place de la prise de pouls avec Pacemaker

Espace de stockage partagé

Gestion de l'espace partagé par Pacemaker

Nous allons faire en sorte que pacemaker gère toute la partie volume partagé. Pour cela, il faut commencer par désactiver le lancement automatique des services associés soit drbd, o2cb et ocfs2. Pour cela :

Arrêtons maintenant manuellement les services en question :

/etc/init.d/ocfs2 stop
/etc/init.d/o2cb stop
/etc/init.d/drbd stop

Nous pouvons maintenant configurer pacemaker afin qu'il gère pour nous ces services :

Mise en place de la virtualisation libvirt-kvm

De la même manière que les drbd et ocfs2, le daemon libvirtd sera géré par Pacemaker. Il faut donc désactiver le lancement automatique du service :

Pacemaker gère désormais libvirtd au travers son script init. Il ne sera lancé qu'après que le volume partagée soit pleinement fonctionnel.

Mise en place d'un accès direct au réseau pour les machines virtuelles

Si vous souhaitez que vos futres machines virtuelles est un accès direct à votre réseau, mettez en place des interfaces bridges. Vos interfaces bridges (br0, br1, …) pourront ensuite être utiliser pour configurer vos machines virtuelles.

Le cluster est en place et fonctionnel. Vous pouvez dés à présent créer vos premières machines virtuelles

Administration du cluster

Création d'une machine virtuelle

Démarrage, arrêt et migration d'une machine virtuelle

Bien qu'il est possible de démarrer ou d'arrêter une machine virtuelle en attaquant directement la libvirt de la machine la faisant ou qui doit la faire tourner, il est préférable de passer vos ordres de démarrage ou d'arrêt de votre machine virtuelle à pacemaker. Cela se justifie pour deux raisons principalement :

Démarrage d'une machine virtuelle

Utiliser la commande suivante :

crm resource start vm-srv1

Arrêt d'une machine virtuelle

Utiliser la commande suivante :

crm resource stop vm-srv1

Migration d'une machine virtuelle

En partant du principe que vous souhaitiez migrer la machine virtuelle srv1 tournant actuellement sur la machine physique srvvirt1 vers la machine physique srvvirt2, utilisez la commande suivante :

crm resource migrate vm-srv1 srvvirt2

Cela aura pour conséquence de créer la règle de localisation suivante dans la configuration de votre cluster :

location cli-prefer-vm-srv1 vm-srv1 \
	rule $id="cli-prefer-rule-vm-srv1" inf: #uname eq srvvirt2

Cette règle est créé afin de s'assurer que ce choix que vous venez de faire, sera appliqué en cas de reboot de la machine par exemple. Elle pourra être supprimée si cela n'est pas se que vous souhaitez. Si vous la supprimez cela n'aura aucune conséquence immédiate (c'est à dire que la machine ne sera pas migrer dans l'autre sens).

Mise en maintenance d'un serveur physique

A des fins de maintenance, il peut être nécessaire de devoir arrêtez toutes les machines tournant sur une machine physique. En réalité, il est plutôt préférable de migrer toutes ces machines vers l'autres serveurs.

Tout les services sont ainsi arrêtés. Pour les relancés, il faut suivre la démarche inverse :

Le cluster est ainsi remonté. En outre les machines virtuelles tournant en temps normal sur notre machine physique sont toujours sur l'autre machine. Pour remettre tout dans un état normal :

Problème connus

o2cb[11515]: ERROR: Setup problem: Couldn't find utility /usr/sbin/ocfs2_controld.pcmk
...
o2cb[11515]: ERROR: ocfs2_controld.pcmk did not come up

Il semble que vous n'avez pas installer le paquet dlm-pcmk. Installer le et relancer corosync

ocfs2_controld[13232]: Unable to connect to CKPT: Object does not exist

Il semble que le service cktp fournis par corosync/openais ne soit pas disponible. Vérifier que le paquet openais est bien installé et que le service cktp est bien lancer par corosync (fichier /etc/corosync/service.d/cktp. Au besoin, référer vous au guide d'installation de OCFS2)

Filesystem[27092]: INFO: Running start for /dev/drbd0 on /var/lib/libvirt
...
lrmd: [26579]: info: RA output: (var_lib_libvirt:1:start:stderr) Cluster stack specified does not match the one currently running
...
Filesystem[27092]: ERROR: Couldn't mount filesystem /dev/drbd0 on /var/lib/libvirt

Cela peut arriver suite à une migration vers openais. Le volume ocfs2 doit être convertie pour être géré par openais. Pour cela, il faut d'abord s'assurer que la partition n'est montée sur aucune des machines puis lancer la commande fsck.ocfs2 sur le volume.