Niveau :      
Résumé :

HA Cékoikece

Qu'est-ce que la haute disponibilité ? Déjà on ne dit pas HD mais HA (high availability) ;-).

Il s'agit de fournir un taux de disponibilité très important. En général la disponibilité se mesure en 9, deux 9, trois 9 ... Cela indique le pourcentage de disponibilité. Deux 9 c'est 99%, sur un an ça correspond à 88h de non disponibilité. C'est assez faible.

Mais faible ou élevé, tout dépend de ce dont on parle. Si on parle d'un site web, 99% c'est faible mais suffisant, si on parle d'un service financier on préfèrera 99.999%

Les pannes

Les causes des indisponibilités peuvent être multiple :

  • bug
  • erreur humaine
  • coupure de courant
  • chalutier qui coupe un câble
  • bombe H sur batiment
  • ...

Les éléments pouvant être coupés sont nombreux :

  • électricité
  • salle d'hébergement
  • électronique
  • disques
  • réseau
  • système d'exploitation
  • logiciel

Que faire ?

Pour éviter d'avoir trop de problèmes la meilleurs solution est ... d'ajouter des problèmes.

C'est comme pour le fromage, ajouter du fromage ajoute des trous, ajouter des trous enlève du fromage. De même ajouter des machines ajoute des problèmes ajouter des problèmes enlève de la disponibilité.

Un bon exemple du succès de la méthode est celui des avions. Savez-vous qu'il y a plusieurs avaries par jour sur des avions en vol dans le monde ? Non ? Hé bien c'est tout simplement parce que tout est multiplié dans un avion et qu'un réacteur qui ne marche plus, ce n'est pas si grave, il y en a d'autres. Du coup la probabilité que tout tombe en panne en même temps est beaucoup plus faible. Et les cas graves sont très rares, surtout au vu du nombre de vols quotidiens.

Dans l'informatique c'est pareil, tout peut être doublé, voire triplé :

  • l'électricité : l'arrivée électrique, l'onduleur, le générateur
  • la climatisation
  • les serveur double alim
  • les routeurs /switchs / firewall double attachés
  • les baies doublées et séparées
  • les datacenter doublés
  • les disques doublés, en raid ou en san
  • les serveurs doublés
  • les os différents

Technologies

A chaque fois que vous multipliez quelque chose, il faut vérifier que la technologie située sur la couche du dessus le supporte. A quoi bon mettre du loadbalancing sur une application qui stocke toutes ses informations en local !

Pour faire de la haute disponibilité, c'est en général la notion de failover qui prédomine. Si un câble réseau tombe, un deuxième prend le relai. Si une alimentation grille, on va utiliser une autre ...

Cette notion a l'avantage d'être simple et d'avoir moins d'impacts sur la couche du dessus. En revanche elle est en générale plus lente à être mise en place car on fait en sorte de ne pas impacter le reste du monde. Mais bien évidemment tout dépend de ce dont on parle. Le failover en électricité est instantané. Par contre le failover sur une base oracle est un poil plus long à activer.

Une deuxième notion de haute disponibilité est plus liée à la montée en charge : le loadbalancing. Une fois mis en place dans le but de gérer une montée en charge il peut aussi servir à faire de la haute disponibilité. En général cette mise en place implique une complexité plus grande, mais aussi une réactivité plus grande.

Et c'est là qu'on arrive à une confusion courante.

Il est important de ne pas confondre haute disponibilité et montée en charge !

Si vous installez un service sur 3 machines, 2 pour gérer la montée en charge et la 3e pour la haute disponibilité. Il faut considérer cette 3e comme éteinte. Il ne faut jamais dire qu'on va utiliser temporairement cette machine pour gérer des pics de charge. Tout d'abord parce qu'en informatique le temporaire dure longtemps (allez en parler aux stagiaires qui ont mis les dates sur 2 chiffres en 1970 dans une base de données) et ensuite parce que la perte de cette machine ne doit pas provoquer de problème sur le service quelle que soit la situation.

En résumé, le même matériel ne peut pas servir à la fois à la haute disponibilité ET à la montée en charge !

Solutions

Cet article n'est qu'un aperçu, vais donc simplement évoquer ici différentes solution "logicielles" de haute disponibilité sans entrer dans les détails. Si cela vous intéresse allez y jeter un œil :

  • keepalived est un loadbalancer réseau, il permet de gérer à la fois le loadbalancing de connexions TCP ou UDP vers plusieurs machines et la redondance du loadbalancer.
  • heartbeat un démon qui surveille en continu l'activité de machine apparié et déclence certaines actions en cas de besoin (comme récupérer son ip). Le site en lui-même est une très bonne ressource sur la haute disponibilité
  • mysql cluster est un moyen de faire tourner plusieurs serveurs mysql en parallèle sur la même base de données et donc d'augmenter à la fois les performances et la disponibilité
  • memcached est un moyen de partager des ressources entre des applications distribuées sur plusieurs machines sous la forme clé/valeur. Il ne garanti pas la disponibilité des données et donc est plus proche du cache que de la haute dispo
  • haproxy est un loadbalancer HTTP, c'est-à-dire qu'il fait reverse proxy et redirige les requêtes vers plusieurs serveurs web en fonction de leur activité.
  • ofcs2 est du loadbalancing appliqué aux systèmes de fichier. Deux machines peuvent accéder en même temps à un fichier situé sur le même disque (réseau de préférence).

...

Et j'en oublie des centaines d'autres, à vous de vous faire une idée de ce qui est possible en allant chercher l'outil qui vous convient le mieux.