La haute disponibilité logicielle via Heartbeat

Concepts

Exemples d'applications

"En théorie, il n'y a pas de différences entre la théorie et la pratique. En pratique, il y en a". (Chuck Reid)

Les mécanismes expliqués précédemment sont génériques, et peuvent s'appliquer normalement à toutes les architectures imaginables, comme des serveurs web, serveurs de tamagotchis, ou tout ce que vous pouvez imaginer d'autre. Attention toutefois, de petites subtilités pourront apparaître selon le type de service à faire fonctionner sur les machines.

Les exemples qui suivent, de plus en plus complexes, vont vous faire entrevoir ces subtilités.

Relais de messagerie

Voici un premier exemple simple. Vous souhaitez mettre en place un relais de messagerie dans votre entreprise : un petit serveur Linux sécurisé par vos soins, placé en frontal sur Internet, qui récupère tous les mails et les envoie à votre serveur Exchange dernier cri.

Vous n'avez besoin que d'une seule machine pour faire tout le travail. C'est donc la solution la plus simple, qui ressemblera à peu de choses près à ceci :

Serveurs en haute disponibilité pour relais de messagerie

On notera l'utilisation de deux cartes réseaux sur les serveurs : une pour dialoguer avec les clients, et une pour envoyer les battements de coeurs et autres données liées à la haute disponibilité. Ceci n'est pas indispensable, mais offre quelques menus avantages :


Serveur Web

Votre employeur est ravi des performances du relais de messagerie, et aimerait faire de même avec son site web, qui devient de plus en plus critique pour l'entreprise. Bien configuré, il suffit d'une seule machine pour supporter la charge du serveur web. Vous vous dites-donc que deux machines suffiront. Mais ce n'est pas si simple !

En effet, survient le problème des sessions ! Une session, comme vous le découvrez vite, est un mécanisme permettant d'identifier un utilisateur et de le suivre entre les différentes pages pour lui proposer des services personnalisés, contrôler qu'il ne consulte pas de pages sensibles ou autres. Et ces sessions sont dans la majorité des cas écrites sur la machine.

Si en lisant ces lignes vous venez de vous dire : "Ah, mais oui ! Ca ne va pas marcher du tout !", vous pouvez sauter les paragraphes et vous rendre directement au schéma ci-après, vous venez de tout comprendre aux subtilités de la haute disponibilité. Sinon, reprenons plus doucement :

les sessions sont des fichiers écrits SUR le serveur web, c'est à dire sur la machine qui est active. Si elle tombe en panne et que l'autre s'active à la place, ces fichiers sont perdus... et les personnes connectées se retrouvent déconnectées. En effet, pour la seconde machine, toutes les personnes dialoguant avec elle sont de NOUVEAUX clients. Elle va donc leur redemander de s'identifier.

Pour éviter cela, il faut mettre en commun ces fichiers de session, et de manière plus générale tous les fichiers à même d'être stockés sur une machine donnée (document Word envoyé via un formulaire, etc.). Ceci peut se faire de plusieurs manières :

C'est cette dernière solution qui a été retenue ici, principalement pour introduire l'exemple suivant. Dans la pratique, il conviendra d'étudier les 'pour' et les 'contre' de chaque technique. Voici un rapide résumé non exhaustif des avantages / inconvénients :

rsync serveur de fichiers
Avantages :
  • Envoie juste les parties des fichiers ayant changé, non tout le fichier.
  • Peut compresser les données pour réduire encore le trafic.
  • Synchronisation en temps réel (ce qui est écrit sera retrouvé par l'autre machine en cas de crash).
  • Peu gourmand en ressources processeur.
Inconvénients :
  • Sauvegarde programmée (par exemple toutes les 5 minutes). Les fichiers écrits entre temps sont perdus en cas de crash.
  • Programme très gourmant en ressources processeur.
  • Nécessite une machine supplémentaire ou un équipement de stockage réseau.

La solution finale ressemblera donc à ceci :

Serveurs webs en haute disponibilité

Ici encore, on pourra se passer de la seconde carte réseau et tout faire transiter sur le même commutateur. Cependant, le trafic généré pour le stockage des sessions, fichiers partagés et les données d'heartbeat risquent de ralentir un peu le trafic réseau des clients.


Serveur de fichiers

Si vous avez analysé attentivement la solution précédente, vous vous êtes certainement dit : "oui, mais si je rajoute un serveur de fichier et que c'est lui qui tombe en panne, je fais comment ?". Remarque pertinente. Il n'y a pas le choix, il faut le mettre EGALEMENT en haute disponibilité. Vous découvrez alors avec horreur et consternation qu'il va falloir rajouter une machine de plus à votre parc déjà bien rempli par votre serveur Exchange, vos deux serveurs de relais de messagerie, vos deux serveurs web et votre premier serveur de fichiers.

La solution la plus simple pour créer ce type de serveur est d'utiliser DRBD. C'est un programme qui synchronise en temps réel une partition entre deux machines (une sorte de RAID 1 réseau). Son fonctionnement est le suivant :

Voici le schéma équivalent :

DRBD : réplication de données en RAID 1 réseau

Sa mise en place est expliquée en détail dans un des tutoriels cités dans les références. L'implémentation physique de cette solution ressemble à s'y méprendre à celle du relais de messagerie :

DRBD : Serveurs de fichiers en haute disponibilité

Seule différence notable : le lien 'eth1' sert à envoyer les données de DRBD en plus des données de contrôle de Heartbeat.


Serveurs SQL

Voici enfin le dernier cas étudié ici et le plus complexe : le cas où plusieurs serveurs actifs sont nécessaires en même temps. Prenons pour cet exemple des bases de données en cluster :

Le schéma correspondant est alors :

Cluster SQL en haute disponibilité

On retrouve un peu la même architecture qu'en services actif/passif, sauf que cette fois-ci les gestionnaires sont dissociés des machines proposant les services.

Voilà. Vous avez maintenant vu les principaux mécanismes pour migrer un service en haute disponibilité, avec tous les problèmes cachés qui peuvent en découler. Ces problèmes seront spécifiques à chaque type de service que vous essaierez de mettre en place. Aussi, prenez le temps de bien analyser la situation avant de commencer à implémenter une solution !

Si vous êtes toujours accroché, nous allons pouvoir passer à la dernière étape du processus : mettre la main à la pâte et voir comment configurer les programmes.