Haute disponibilité : HAProxy, Keepalived, Pacemaker et Corosync
Quitter

Leçon 1 sur 12 · Fondamentaux

Chiffrer la disponibilité : SLA, MTTR, RTO, RPO et points uniques de défaillance

40 min Debian 12 Versions Debian 12, Rocky 9, Ubuntu 24.04

Objectif

Avant d'installer HAProxy ou Pacemaker, savoir ce que l'on doit garantir : mesurer la disponibilité réelle d'un service, comprendre ce qui la fait baisser, et repérer les composants dont la panne arrête tout.

L'essentiel

  • La disponibilité se calcule à partir des incidents réels, en suivant les règles du contrat (ce qui est exclu, comment on mesure).
  • A = MTBF ÷ (MTBF + MTTR) : on gagne autant en réparant plus vite (MTTR) qu'en tombant moins souvent (MTBF).
  • RTO (durée d'arrêt acceptable) et RPO (perte de données acceptable) se traduisent directement en technologies : bascule automatique ou manuelle, réplication synchrone ou asynchrone, sauvegarde.
  • Un point unique de défaillance (SPOF) est tout élément présent en un seul exemplaire sur le chemin d'une requête : un serveur, mais aussi un commutateur, une alimentation, un certificat, un administrateur.
  • Ajouter de la redondance ajoute de la complexité : chaque mécanisme de bascule devient lui-même une source de pannes s'il n'est pas testé.

Les bases (tableau des « neuf », SLA d'un fournisseur cloud, règle 3-2-1) sont dans le cours Cloud — fondamentaux ; le SLO et le budget d'erreur dans Observabilité. Ici, on passe au calcul sur une plateforme que vous exploitez vous-même.


1. Mesurer une disponibilité au sens du contrat

Un contrat de service (SLA) précise toujours :

Clause Exemple Effet sur le calcul
Période de mesure mois civil 30 jours = 43 200 min, 31 jours = 44 640 min
Exclusions maintenances annoncées 48 h avant, force majeure ces minutes ne comptent pas
Définition de « indisponible » la page d'accueil ne répond pas en moins de 5 s depuis deux sondes une lenteur peut compter comme une panne
Pénalité avoir de 10 % sous 99,9 %, 25 % sous 99 % ce que coûte le dépassement

Le calcul sur un journal d'incidents :

# date;type;minutes;description
awk -F';' '$2=="imprevu" {s += $3} END {printf "%.2f %%\n", 100 * (1 - s/43200)}' incidents.csv

Le chiffre « contractuel » n'est pas le chiffre vécu par les clients : une maintenance planifiée d'une heure un samedi soir ne compte pas dans le SLA, mais la boutique était bien fermée. Suivez les deux : la disponibilité contractuelle (pour les pénalités) et la disponibilité réelle (pour décider des investissements).

2. MTBF, MTTR : réparer vite compte autant que ne pas tomber

  • MTBF (mean time between failures) : temps moyen entre deux pannes.
  • MTTR (mean time to repair/restore) : temps moyen pour rétablir le service.
A = MTBF / (MTBF + MTTR)

Une panne par mois (MTBF ≈ 720 h) réparée en 4 h  : 720 / 724   = 99,45 %
La même panne réparée en 30 min                    : 720 / 720,5 = 99,93 %

Le MTTR se décompose : détecter (supervision), diagnostiquer (journaux, procédures), réparer (accès, pièces, sauvegardes), vérifier. Une bascule automatique réduit surtout la réparation ; une bonne alerte réduit la détection. Une équipe d'astreinte à Casablanca qui reçoit l'alerte en 1 minute au lieu de 20 gagne plus qu'avec un second serveur mal configuré.

3. RTO et RPO : du besoin métier à la technique

Besoin exprimé RTO RPO Réponse technique typique
« Le site vitrine peut attendre le lendemain » 24 h 24 h sauvegarde nocturne, restauration manuelle
« La boutique ne doit pas fermer plus de 15 min » 15 min 5 min deux serveurs, bascule manuelle guidée, réplication asynchrone
« Les paiements ne doivent jamais être perdus » 1 min 0 cluster avec bascule automatique, réplication synchrone, fencing

Points à retenir :

  • RPO = 0 exige une réplication synchrone (DRBD protocole C, PostgreSQL synchronous_commit) : chaque écriture attend le second serveur, donc la latence augmente.
  • Le RPO réel d'une sauvegarde quotidienne est de 24 h dans le pire cas (panne juste avant la sauvegarde suivante), pas « quelques heures ».
  • Le RTO réel se mesure lors d'un test de bascule, chronomètre en main. Un RTO jamais testé est une hypothèse.

4. Inventorier les points uniques de défaillance

Suivez le chemin d'une requête, du client jusqu'au disque, et notez chaque étape :

client ─► DNS ─► lien Internet ─► pare-feu ─► ml-lb-01 ─► ml-web-0[1-3] ─► ml-app-0[1-2] ─► ml-db-0[1-2]
                                                    │
                                              ml-nfs-01 (fichiers clients)
# Un inventaire simple : composant;rôle;exemplaires
awk -F';' 'NR > 1 && $3 == 1 {print "SPOF :", $1, "(" $2 ")"}' architecture.txt

Les SPOF que l'on oublie le plus souvent :

Catégorie Exemples
Réseau un seul commutateur de cœur, un seul lien opérateur, deux liens… chez le même opérateur
Électricité deux alimentations sur la même multiprise, un seul onduleur
Services partagés DNS interne, NTP, annuaire LDAP, serveur NFS, registre d'images
Éléments logiques un certificat TLS, un nom de domaine qui expire, une clé de licence
Humain une seule personne connaît la procédure ou détient les accès

Pour chaque SPOF, trois réponses possibles : le doubler, réduire son MTTR (pièce de rechange, procédure écrite, supervision de l'expiration), ou accepter le risque en l'écrivant noir sur blanc.

5. Le prix de la redondance

Doubler un composant ne double pas la fiabilité si :

  • les deux exemplaires partagent une cause commune (même baie, même version logicielle boguée, même configuration erronée poussée partout) ;
  • le mécanisme de bascule n'est jamais testé ;
  • personne ne remarque qu'un des deux est déjà en panne (redondance « dormante » : on découvre la panne du second le jour où le premier tombe).

Règle d'exploitation : toute redondance doit être supervisée. Un répartiteur qui sert le trafic avec un seul serveur sur trois vivant doit lever une alerte, même si les clients ne voient rien.

Selon la version

Point Debian 12 / Ubuntu 24.04 Rocky 9
Paquets de haute disponibilité dépôt principal (haproxy, keepalived, pacemaker, pcs, drbd-utils) haproxy, keepalived en AppStream ; pacemaker, pcs dans le dépôt HighAvailability à activer (dnf config-manager --set-enabled highavailability)
Outil de gestion du cluster pcs ou crmsh pcs
Module DRBD paquet drbd-utils + module noyau (DRBD 9 via le dépôt du projet) dépôt ELRepo ou paquets du projet

Pièges fréquents

  • Compter les maintenances planifiées dans un calcul de SLA qui les exclut, ou l'inverse : lisez le contrat avant de calculer.
  • Confondre RPO et fréquence de sauvegarde : une sauvegarde toutes les 24 h donne un RPO de 24 h, pas de 12 h « en moyenne ».
  • Oublier les dépendances : deux serveurs web redondants qui montent le même NFS unique restent à la merci de ce NFS.
  • Promettre 99,99 % (4 min par mois) avec une procédure de bascule manuelle qui demande 20 minutes.

Lab

Sur une machine Debian 12, vous disposez du journal d'incidents de septembre de la boutique MasterLinux et d'un inventaire de son architecture. Vous allez :

  1. calculer la disponibilité au sens du contrat ;
  2. dire si le SLA de 99,9 % est tenu ;
  3. calculer le MTTR ;
  4. extraire la liste des points uniques de défaillance ;
  5. donner le RPO réel d'une sauvegarde nocturne unique.

Quiz

  1. Pourquoi deux équipes peuvent-elles annoncer deux disponibilités différentes pour le même mois ?
  2. Une panne par mois, réparée en 30 minutes au lieu de 4 heures : quel indicateur s'améliore ?
  3. Quelle réplication faut-il pour un RPO de zéro, et quel en est le coût ?
  4. Citez trois points uniques de défaillance qui ne sont pas des serveurs.
  5. Qu'est-ce qu'une redondance « dormante » et comment l'éviter ?
Réponses
  1. Elles n'appliquent pas les mêmes règles : exclusions (maintenances planifiées), définition de l'indisponibilité, période de mesure.
  2. Le MTTR, donc la disponibilité : A = MTBF ÷ (MTBF + MTTR) passe d'environ 99,45 % à 99,93 %.
  3. Une réplication synchrone (DRBD protocole C, réplica PostgreSQL synchrone) ; chaque écriture attend la confirmation du second serveur, la latence augmente.
  4. Un commutateur unique, un lien opérateur, une alimentation, un certificat TLS, un nom de domaine, le DNS interne, une seule personne qui connaît la procédure.
  5. Un exemplaire de secours déjà en panne sans que personne ne le sache ; on l'évite en supervisant chaque membre, pas seulement le service global.

Exercices pratiques

À réaliser sur Debian 12

Faites ce lab sur votre machine

Le terminal, c’est le vôtre : une VM Linux (VirtualBox, VMware, Hyper-V, WSL…) ou Docker/Podman. L’outil ml prépare l’exercice et corrige votre travail ; la leçon se valide toute seule ici.

Créez un compte gratuit pour obtenir votre commande personnelle et faire valider vos labs automatiquement.

Créer mon compte

Tâches à réaliser

  1. Le contrat (SLA) de la boutique MasterLinux exclut les maintenances planifiées. À partir de /root/ha/incidents.csv (mois de septembre, 30 jours), calculez la disponibilité mesurée au sens du contrat et écrivez-la avec deux décimales (ex. 99.95) dans /root/ha/dispo.txt.
    Afficher un indice30 jours = 43 200 minutes. Ne comptez que les lignes « imprevu » : 38 + 21 + 27,4.
    Voir la solution
    awk -F";" '$2=="imprevu"{s+=$3} END{printf "%.2f\n", 100*(1-s/43200)}' /root/ha/incidents.csv > /root/ha/dispo.txt

    Vérification : grep -Eqx " *99[.,]80 *%? *" /root/ha/dispo.txt

  2. Le SLA promet 99,9 %. Est-il tenu ce mois-ci ? Écrivez oui ou non dans /root/ha/sla.txt.
    Afficher un indiceComparez votre résultat à 99,90.
    Voir la solution
    echo non > /root/ha/sla.txt

    Vérification : grep -Eqix " *non *" /root/ha/sla.txt

  3. Calculez le temps moyen de rétablissement (MTTR) des incidents imprévus, en minutes, et écrivez le nombre dans /root/ha/mttr.txt.
    Afficher un indiceMTTR = durée totale des pannes imprévues ÷ nombre de pannes imprévues.
    Voir la solution
    awk -F";" '$2=="imprevu"{s+=$3;n++} END{print s/n}' /root/ha/incidents.csv > /root/ha/mttr.txt

    Vérification : grep -Eqx " *28([.,]8)? *" /root/ha/mttr.txt

  4. Dans /root/ha/architecture.txt, la troisième colonne donne le nombre d'exemplaires de chaque composant. Écrivez dans /root/ha/spof.txt le nom de chaque point unique de défaillance, un par ligne.
    Afficher un indiceUn composant présent en un seul exemplaire est un point unique : awk -F';' '$3==1{print $1}'
    Voir la solution
    awk -F";" '$3==1{print $1}' /root/ha/architecture.txt > /root/ha/spof.txt

    Vérification : test -s /root/ha/spof.txt && test "$(tr -d ' \r' < /root/ha/spof.txt | grep -v '^$' | sort | paste -sd, -)" = "ml-lb,ml-nfs,sw-coeur"

  5. La base n'a pas de réplica : une seule sauvegarde complète par nuit, à 02:00. Quelle est, en heures, la perte de données maximale possible (RPO réel) ? Écrivez le nombre dans /root/ha/rpo.txt.
    Afficher un indiceImaginez la panne la plus mal placée : juste avant la sauvegarde suivante.
    Voir la solution
    echo 24 > /root/ha/rpo.txt

    Vérification : grep -Eqx " *24 *(h|heures)? *" /root/ha/rpo.txt