Cours B2-25 - Haute disponibilité et répartition de charge
Cours · Fiche de cours

B2-25 - Haute disponibilité et répartition de charge

B2-25 Haute disponibilité et répartition de charge

🎓 SIO2 · semestre 3 ⏱️ 5 h (cours + TP) 🎯 Bloc 2 – SISR Mesurer la disponibilité, chasser les points uniques de défaillance, choisir un RAID, faire tourner un cluster Proxmox, puis garder un service joignable avec une adresse virtuelle (keepalived) et répartir la charge (HAProxy).

🎯 Objectifs

  • Exprimer et calculer une disponibilité (« les 9 », MTBF, MTTR, éléments en série et en parallèle).
  • Repérer les points uniques de défaillance d'une infrastructure et proposer une redondance.
  • Choisir un niveau de RAID (0, 1, 5, 6, 10) selon la capacité et la tolérance aux pannes.
  • Expliquer le quorum et la haute disponibilité d'un cluster Proxmox VE.
  • Configurer une adresse virtuelle avec keepalived et un répartiteur de charge HAProxy, puis les tester.

📋 Prérequis

🧭 Référentiel

  • B2.1 Concevoir une solution d'infrastructure : disponibilité, redondance.
  • B2.2 Installer, tester et déployer une solution d'infrastructure.
  • B3.4 Garantir la disponibilité des services.
Test express des prérequis 3 questions · 2 minutes · conseillé avant de commencer

1. Avec HSRP, que se passe-t-il quand le routeur actif tombe en panne ?

C'est le principe de l'adresse virtuelle, que l'on retrouve avec keepalived pour les serveurs Linux. À revoir : B2-09 · HSRP et VRRP.

2. Combien d'heures compte une année (365 jours) ?

365 × 24 = 8 760 heures. Ce nombre sert à convertir un taux de disponibilité en heures d'arrêt par an.

3. Quelle commande vérifie qu'un service tourne sous Debian ?

systemctl status indique si le service est actif, depuis quand, avec les dernières lignes du journal. À revoir : B2-14 · Debian 13.
503 intranet indisponible SRV-WEB un seul serveur Les camions attendent les bons de livraison… !

Chez Brocéliande Logistique (entreprise fictive, 60 salariés), l'intranet sert à éditer les bons de livraison de l'entrepôt. Il tourne sur un seul serveur, SRV-WEB. Vendredi dernier, pendant le pic de préparation des commandes, ce serveur a planté : deux heures d'arrêt, des camions qui attendent sur le quai, des clients livrés en retard.

La direction veut que l'intranet reste disponible même quand un serveur tombe, et qu'il encaisse le pic du vendredi. Tu dois mesurer le besoin, repérer tous les points faibles de l'infrastructure, puis mettre en place deux serveurs web derrière un répartiteur de charge joignable par une adresse virtuelle.

Le coursMesurer la disponibilité, supprimer les points uniques de défaillance, RAID et redondance matérielle, cluster Proxmox, adresse virtuelle keepalived, répartition de charge HAProxy, réplication, puis vérifier et dépanner.

1. Mesurer la disponibilité

La disponibilité d'un service est la part du temps pendant laquelle il fonctionne réellement pour ses utilisateurs. Elle s'exprime en pourcentage sur une période, le plus souvent l'année, et figure dans les contrats de service (SLA).

Haute disponibilité : ensemble de techniques (redondance, bascule automatique, répartition de charge) qui permettent à un service de continuer à fonctionner malgré la panne d'un de ses composants. On parle de haute disponibilité à partir de 99,9 %, soit moins de 9 heures d'arrêt par an.

DisponibilitéSurnomArrêt maximal par anPar mois (30 j)Exemple de service
99 %« deux 9 »87 h 36 min (≈ 3,7 jours)7 h 12 minServeur unique, sans redondance
99,9 %« trois 9 »8 h 46 min43 minIntranet d'une PME bien redondé
99,99 %« quatre 9 »52 min 34 s4 min 19 sSite marchand, messagerie d'un hébergeur
99,999 %« cinq 9 »5 min 15 s26 sOpérateur téléphonique, paiement

Chaque « 9 » supplémentaire divise l'arrêt autorisé par dix… et multiplie le coût de l'infrastructure. On choisit donc le niveau d'après le coût d'une heure d'arrêt pour l'entreprise.

  • MTBF (Mean Time Between Failures, temps moyen entre deux pannes)Plus il est grand, plus l'équipement est fiable. Donné par le constructeur pour un disque, une alimentation, un commutateur.
  • MTTR (Mean Time To Repair, temps moyen de remise en service)Temps de détection, de diagnostic, de réparation et de redémarrage. La haute disponibilité cherche surtout à le rendre presque nul grâce à une bascule automatique.
  • Disponibilité = MTBF ÷ (MTBF + MTTR)Un serveur qui tombe en moyenne toutes les 2 000 h et qu'on répare en 4 h : 2 000 ÷ 2 004 ≈ 99,8 %.
99,9 % 99,9 % 99,5 % EN SÉRIE ≈ 99,3 % · 61 h d'arrêt par an EN PARALLÈLE 1 sur 2suffit ≈ 99,8 % · 18 h d'arrêt par an
En série, les disponibilités se multiplient ; en parallèle, ce sont les indisponibilités qui se multiplient.

2. Chasser les points uniques de défaillance

Un point unique de défaillance (SPOF) est un élément dont la seule panne suffit à arrêter le service. La démarche consiste à suivre le chemin d'une requête, de l'utilisateur jusqu'aux données, et à se demander à chaque étape : « si ceci tombe, que se passe-t-il ? ».

Clique sur chaque élément du chemin de l'intranet : est-ce un point unique de défaillance ?

Poste SW2 R1 Hyperviseurun seul Proxmox SRV-WEB Courant SPOFSPOF SPOFSPOF SPOFpas un SPOF Une chaîne n'est pas plus solide que son maillon unique le plus fragile.

Choisis un élément du chemin pour savoir s'il peut, à lui seul, arrêter l'intranet.

Pour chaque élément critique : deux exemplaires, et une bascule automatique de l'un à l'autre.

Doubler un équipement ne suffit pas : il faut aussi un mécanisme de bascule automatique (adresse virtuelle, répartiteur, cluster) et une surveillance qui prévient quand l'un des deux est tombé. Sinon, on découvre la panne du second… le jour où le premier lâche.

3. Le RAID : survivre à la panne d'un disque

Le disque est l'un des composants qui tombent le plus souvent en panne. Le RAID (Redundant Array of Independent Disks) regroupe plusieurs disques pour qu'ils fonctionnent comme un seul, plus rapide et/ou capable de survivre à la perte de l'un d'eux. Il est géré par une carte contrôleur (RAID matériel) ou par le système (RAID logiciel : mdadm sous Linux, ZFS dans Proxmox, espaces de stockage sous Windows).

NiveauPrincipeDisques min.Capacité utile (n disques de C)Pannes toléréesUsage
RAID 0Agrégat par bandes (striping)2n × C0 : un disque perdu, tout est perduDonnées temporaires, jamais pour un serveur
RAID 1Miroir2C1Disque système d'un serveur
RAID 5Bandes + parité répartie3(n − 1) × C1Fichiers, petits volumes
RAID 6Bandes + double parité4(n − 2) × C2Gros volumes, gros disques
RAID 10Miroirs agrégés en bandes4n ÷ 2 × C1 par paire de miroirBases de données, VM : rapide
Disque 1Disque 2Disque 3Disque 4 A1A2P(A) B1P(B)B3 P(C)C2C3 A3B2C1 Capacité utile : 3 disques sur 4 · 1 panne tolérée A3 ? B2 ? C1 ? mode dégradé · A3 = A1 ⊕ A2 ⊕ P(A) A3B2 C1 reconstruction · aucune autre panne tolérée A3B2C1 volume reconstruit · redondance retrouvée
La parité (opération « ou exclusif », ⊕) permet de recalculer n'importe quel bloc manquant d'une bande.
Debian 13 RAID 1 logiciel avec mdadm
$ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
$ cat /proc/mdstat # état : [UU] = 2 disques actifs, [U_] = dégradé
$ sudo mdadm --detail /dev/md0
$ sudo mdadm /dev/md0 --add /dev/sdd # ajoute le disque de remplacement : reconstruction

Le RAID n'est pas une sauvegarde : une suppression, un fichier corrompu ou un rançongiciel touchent tous les disques en même temps (B2-24). Et un RAID dégradé dont personne n'est averti n'apporte rien : il faut une alerte (courriel de mdadm, supervision) dès la première panne.

4. La redondance matérielle et électrique

Après les disques, on double tout ce qui peut tomber dans le local technique. La règle est simple : deux de chaque, branchés à deux endroits différents.

ÉlémentRedondanceMécanisme de basculeFiche
Alimentation du serveurDeux blocs d'alimentation échangeables à chaudAutomatique, chacun peut alimenter seul–
Arrivée électriqueDeux circuits, deux onduleursChaque bloc sur un circuit différent–
Lien réseau du serveurDeux cartes, deux commutateursAgrégation (LACP) ou bascule active/passiveB2-04
CommutateursDeux chemins entre commutateursSTP, EtherChannelB2-04
PasserelleDeux routeursHSRP / VRRP, adresse virtuelleB2-09
Accès InternetDeux opérateurs (fibre + 4G/5G)Routage ou pare-feu multi-WANB3-09

4.1 L'onduleur

L'onduleur (UPS) fournit du courant pendant une coupure grâce à ses batteries, et protège des micro-coupures et des surtensions. Il ne sert pas à tenir des heures : il laisse le temps au groupe électrogène de démarrer, ou aux serveurs de s'arrêter proprement.

TechnologieFonctionnementPour quoi
Off-line (veille)Bascule sur batterie quand le secteur disparaît (quelques millisecondes)Poste de travail
Line-interactiveRégule la tension en permanence, bascule rapidePetits serveurs, baie de PME
On-line (double conversion)Le courant est toujours redressé puis recréé par l'onduleur, batteries en relais : aucune coupure, tension parfaiteSalle serveur, équipements critiques

Un onduleur relié aux serveurs par USB ou par le réseau prévient de la coupure. Avec NUT (Network UPS Tools) sous Linux et Proxmox, les serveurs s'éteignent proprement quand la batterie passe sous un seuil, puis redémarrent au retour du courant. Sans cela, l'onduleur ne fait que retarder la coupure brutale.

5. Le cluster Proxmox et la haute disponibilité des VM

Un cluster Proxmox VE regroupe plusieurs hyperviseurs (les nœuds) administrés comme un seul. Il permet de migrer une VM d'un nœud à l'autre sans l'arrêter, et surtout de la redémarrer automatiquement sur un autre nœud si le sien tombe : c'est le gestionnaire de haute disponibilité (HA manager).

  • QuorumChaque nœud dispose d'une voix ; le cluster ne prend de décision que si une majorité stricte de voix est présente (2 sur 3, 3 sur 5). Cela évite que deux moitiés isolées démarrent chacune les mêmes VM (split brain).
  • Nombre de nœudsTrois nœuds minimum pour la haute disponibilité. Avec deux, la perte d'un seul fait perdre le quorum : il faut alors un arbitre externe, le QDevice, qui apporte une troisième voix.
  • Stockage partagé ou répliquéLe disque de la VM doit être accessible depuis le nœud de secours : stockage partagé (Ceph, NFS, iSCSI) ou réplication ZFS planifiée entre nœuds (on perd alors les dernières minutes).
  • Isolement (fencing)Un nœud qui perd le quorum s'éteint de lui-même grâce à un chien de garde (watchdog) avant que la VM ne soit redémarrée ailleurs : jamais deux copies de la même VM en marche.
Stockage partagé (Ceph ou NFS) PVE1 PVE2 PVE3 1 voix1 voix1 voix SRV-WEB1 quorum : 3 / 3 quorum : 2 / 3 · toujours atteint SRV-WEB1 redémarrée sur PVE2 par le HA manager
La haute disponibilité de Proxmox redémarre la VM ailleurs : quelques minutes d'arrêt, mais aucune intervention.
Proxmox VE shell d'un nœud
root@pve1:~# pvecm create cluster-broceliande # sur le premier nœud
root@pve2:~# pvecm add 172.16.99.41 # sur chaque autre nœud : rejoint le cluster
root@pve1:~# pvecm status # nœuds, voix, « Quorate: Yes »
root@pve1:~# qm migrate 105 pve2 --online # migration à chaud de la VM 105
root@pve1:~# ha-manager add vm:105 --state started # la VM est désormais protégée
root@pve1:~# ha-manager status

6. Une adresse virtuelle avec keepalived

Le cluster redémarre une VM en quelques minutes. Pour une bascule en quelques secondes, on fait tourner le service sur deux serveurs en même temps et on leur fait partager une adresse IP virtuelle (VIP), portée par l'un ou l'autre. Sous Linux, c'est le rôle de keepalived, qui utilise le protocole VRRP, celui-là même que tu as vu sur les routeurs (B2-09).

client 02 33 … numéro unique agent A agent B « je suis là » toutes les secondes A absent : le numéro sonne chez B

Pour bien comprendre : le standard téléphonique

Les clients n'appellent qu'un seul numéro, celui du standard : c'est l'adresse virtuelle. Ce numéro sonne chez l'agent de permanence, l'agent A : c'est le serveur MASTER.

L'agent A signale sa présence toutes les secondes. S'il ne donne plus signe de vie, le numéro est aussitôt renvoyé chez l'agent B, le BACKUP. Les clients n'ont rien changé : ils composent toujours le même numéro.

Quand A revient et qu'il est prioritaire, il reprend la permanence : c'est la préemption.

/etc/keepalived/keepalived.conf sur WEB1 (MASTER)sur WEB2 : state BACKUP, priority 100
vrrp_instance VI_INTRANET {
    state MASTER
    interface ens18
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass Brocel26
    }
    virtual_ipaddress {
        172.16.50.25/24
    }
}
  • state / priorityRôle de départ et priorité (1 à 254) : c'est le serveur de plus haute priorité encore vivant qui porte l'adresse virtuelle.
  • virtual_router_idNuméro du groupe VRRP (1 à 255) : identique sur les deux serveurs, différent pour chaque autre groupe du même réseau.
  • advert_intIntervalle des annonces « je suis là » du MASTER, en secondes. Sans annonce pendant environ trois intervalles, le BACKUP prend l'adresse.
  • virtual_ipaddressL'adresse virtuelle, ici 172.16.50.25 : c'est elle que le DNS associe à intranet.broceliande.lan.
  • authenticationMot de passe partagé du groupe, identique des deux côtés (8 caractères au plus). Il évite les erreurs, pas les attaques : VRRP doit rester dans un VLAN de confiance.

Les annonces VRRP partent en multidiffusion vers 224.0.0.18 avec le numéro de protocole IP 112. Si un pare-feu les bloque entre les deux serveurs, chacun se croit seul et prend l'adresse virtuelle. Lors d'une bascule, le nouveau MASTER envoie un ARP « gratuit » pour que les commutateurs et les postes mettent à jour leur table.

7. Répartir la charge avec HAProxy

Avec keepalived, un seul serveur travaille, l'autre attend. Un répartiteur de charge (load balancer) fait travailler tous les serveurs : il reçoit les requêtes des clients et les distribue entre plusieurs serveurs identiques, en écartant automatiquement ceux qui ne répondent plus. HAProxy est le répartiteur libre le plus répandu.

Clique sur un algorithme de répartition pour voir comment HAProxy distribue six requêtes.

roundrobin leastconn source HAProxy172.16.50.25 WEB1 WEB2 135 246 1456 23 2 requêtes longues AAA BBB Les contrôles de santé (check) retirent un serveur en panne de la rotation, quel que soit l'algorithme.

Choisis un algorithme : les numéros indiquent l'ordre d'arrivée des requêtes sur chaque serveur.

Le client ne connaît que l'adresse du répartiteur ; c'est HAProxy qui choisit le serveur.
/etc/haproxy/haproxy.cfg partie ajoutée sur le répartiteur
frontend fe_intranet
    bind *:80
    default_backend be_web

backend be_web
    balance roundrobin
    option httpchk GET /
    server web1 172.16.50.21:80 check
    server web2 172.16.50.22:80 check

listen stats
    bind *:8404
    stats enable
    stats uri /stats
  • frontendCe que voient les clients : l'adresse et le port d'écoute (bind), et vers quel groupe de serveurs envoyer les requêtes.
  • backendLe groupe de serveurs réels, l'algorithme (balance) et la liste des serveurs (server nom adresse:port check).
  • check / option httpchkContrôle de santé : HAProxy interroge chaque serveur toutes les 2 secondes ; après 3 échecs, le serveur est marqué DOWN et ne reçoit plus rien, jusqu'à ce qu'il réponde de nouveau.
  • listen statsPage de statistiques (port 8404) : état UP/DOWN de chaque serveur, nombre de sessions, erreurs. À protéger par un mot de passe en production.

Le répartiteur devient à son tour un point unique de défaillance ! En production, on installe deux HAProxy qui partagent une adresse virtuelle keepalived : keepalived assure la bascule du répartiteur, HAProxy répartit la charge entre les serveurs web. Les deux outils sont complémentaires.

8. La réplication des données

Deux serveurs web identiques, c'est facile : ils affichent les mêmes pages. Mais si l'application écrit des données (une base, des fichiers déposés), il faut que chaque serveur voie les mêmes données. C'est le rôle de la réplication.

ModePrincipeAvantageLimite
SynchroneL'écriture n'est validée que lorsque les deux copies l'ont enregistréeAucune perte de donnéesPlus lent ; exige un lien rapide et proche
AsynchroneL'écriture est validée tout de suite, la copie suit avec un léger retardRapide, possible à longue distanceLes dernières secondes peuvent être perdues

Exemples : réplication MariaDB (primaire et réplique, ou grappe Galera synchrone), réplication ZFS entre nœuds Proxmox (asynchrone, toutes les 15 minutes par exemple), DFS-R entre serveurs de fichiers Windows, stockage distribué Ceph (synchrone). Comme le RAID, la réplication recopie aussi les erreurs : elle ne remplace jamais la sauvegarde.

9. Vérifier et dépanner

Une architecture haute disponibilité se teste en provoquant la panne : on éteint un serveur, on coupe un service, on débranche un lien, et l'on vérifie que la bascule se fait dans le délai prévu. Ces tests font partie du cahier de recette.

CommandeCe qu'elle montreCe qu'on y cherche
ip -br aLes adresses de chaque interfaceL'adresse virtuelle n'apparaît que sur un seul serveur
journalctl -u keepalived -fLes changements d'état VRRPEntering MASTER STATE / BACKUP STATE au bon moment
haproxy -c -f /etc/haproxy/haproxy.cfgVérifie la syntaxe avant rechargementConfiguration file is valid
Page http://…:8404/statsÉtat des serveurs du backendTous UP ; un serveur arrêté passe DOWN en quelques secondes
curl -s http://172.16.50.25 en boucleQuel serveur répondLes réponses alternent (roundrobin) et ne s'interrompent pas pendant une panne
pvecm status · ha-manager statusQuorum et état des ressources HAQuorate: Yes ; VM started sur un nœud vivant
cat /proc/mdstatÉtat des grappes RAID logicielles[UU] ; [U_] signale un disque perdu

9.1 Entraîne-toi : les tickets du support

Tu es de permanence au support de Brocéliande Logistique. Six tickets arrivent les uns après les autres : lis le message, observe le relevé, puis choisis la cause.

File d'attente du support6 tickets · un à la fois · l'explication s'affiche après ta réponse
Ticket n° 1De : responsable informatiquePriorité haute
« Nous avons un cluster de deux hyperviseurs pour ne plus dépendre d'un seul. Ce matin, PVE1 est tombé… et les VM protégées de PVE2 se sont arrêtées aussi ! »
Proxmox VE PVE2 · pvecm status
Expected votes:   2
Total votes:      1
Quorum:           2 Activity blocked
Flags:            (aucun Quorate)

Quelle est la cause ?

Cause : 1 voix sur 2 n'est pas une majorité stricte : PVE2 bloque toute action pour éviter un split brain, et son chien de garde a arrêté les VM HA. Correction : ajouter un troisième nœud, ou un QDevice (petit service d'arbitrage sur une autre machine) qui apporte la troisième voix.

Ticket n° 2De : entrepôtPriorité haute
« L'intranet affiche "503 Service Unavailable" depuis la mise à jour de ce matin, alors que les deux serveurs web répondent quand on tape leur adresse directement. »
haproxy.cfg et page de statistiques
backend be_web
    option httpchk GET /sante.html
    server web1 172.16.50.21:80 check   → DOWN (L7STS/404)
    server web2 172.16.50.22:80 check   → DOWN (L7STS/404)

Quelle est la cause ?

Cause : la mise à jour a supprimé /sante.html. Le code 404 fait échouer le contrôle de niveau 7 (L7STS) : les deux serveurs passent DOWN et HAProxy répond 503. Correction : recréer la page de santé (et l'inclure dans le déploiement), ou contrôler GET /. Leçon : surveiller l'état des backends, pas seulement les serveurs.

Ticket n° 3Alerte de la supervisionPriorité haute
« Depuis l'activation du pare-feu local sur les deux serveurs web, l'intranet répond une fois sur deux et la supervision signale un conflit d'adresse sur 172.16.50.25. »
Debian 13 relevé sur WEB1 et sur WEB2
web1$ ip -br a show ens18
ens18  UP  172.16.50.21/24 172.16.50.25/24
web2$ ip -br a show ens18
ens18  UP  172.16.50.22/24 172.16.50.25/24
web2$ journalctl -u keepalived | tail -1
VRRP_Instance(VI_INTRANET) Entering MASTER STATE

Quelle est la cause ?

Cause : c'est un split brain : WEB2 n'entend plus les annonces de WEB1 et devient MASTER à son tour. Les deux répondent à la même adresse. Correction : autoriser le protocole VRRP (IP 112, vers 224.0.0.18) entre les deux serveurs dans le pare-feu local, puis vérifier qu'un seul porte la VIP.

Ticket n° 4De : comptabilitéPriorité haute
« Le serveur de fichiers a perdu un disque mardi, on l'a remplacé jeudi. Pendant la reconstruction, un deuxième disque est tombé : le volume est perdu ! On avait pourtant du RAID. »
Fiche du serveur extrait
Grappe : RAID 5 · 4 disques de 12 To · même lot de fabrication
Alerte mail du contrôleur : non configurée
Disque de secours (hot spare) : aucun

Quelle est l'explication ?

Cause : RAID 5 = une seule panne tolérée. Avec des disques de 12 To, la reconstruction dure des heures sous forte charge, et des disques du même lot vieillissent ensemble. Deux jours en mode dégradé, sans alerte ni disque de secours, ont aggravé le risque. Correction : RAID 6 (ou RAID 10), hot spare, alertes, et restauration depuis la sauvegarde.

Ticket n° 5De : préparateurs de commandesPriorité moyenne
« Depuis que l'intranet est sur deux serveurs, on est déconnecté tout le temps : on se reconnecte, on clique, et l'appli redemande le mot de passe. »
haproxy.cfg backend
backend be_web
    balance roundrobin
    server web1 172.16.50.21:80 check
    server web2 172.16.50.22:80 check
# l'application garde les sessions en mémoire, sur chaque serveur

Quelle est la cause ?

Cause : en roundrobin, les requêtes d'un même utilisateur alternent entre WEB1 et WEB2. La session ouverte sur WEB1 n'existe pas sur WEB2. Correction : persistance de session (balance source, ou cookie d'affinité avec cookie SRV insert), ou mieux, des sessions stockées dans une base partagée.

Ticket n° 6De : directionRetour d'expérience
« Coupure de courant de 40 minutes hier. L'onduleur a tenu 12 minutes, puis tout s'est éteint d'un coup. Deux VM ont redémarré avec des fichiers corrompus. »
Fiche de l'onduleur extrait
Liaison avec les serveurs : aucune (USB débranché)
Batteries : installées en 2019
Arrêt automatique : non configuré

Quelle est la cause principale des fichiers corrompus ?

Cause : l'onduleur a seulement retardé la coupure brutale. Correction : relier l'onduleur (USB ou carte réseau), configurer NUT pour éteindre proprement VM puis hyperviseurs sous un seuil de batterie, remplacer les batteries vieillissantes (3 à 5 ans) et tester la coupure chaque année.

10. À l'examen et en entreprise

  • Documentation attendue : schéma de l'architecture (VIP, répartiteur, serveurs, réplication), tableau des adresses, fichiers de configuration commentés, calcul de disponibilité visée.
  • Démonstration : le jury apprécie de voir la bascule en direct. Prépare un client qui interroge l'adresse virtuelle en boucle, puis éteins le serveur actif devant lui.
  • Justifier ses choix : pourquoi keepalived et HAProxy, pourquoi trois nœuds, pourquoi RAID 6 plutôt que 5, quel est le coût d'un « 9 » de plus.
  • En entreprise : la haute disponibilité se négocie dans un SLA ; elle complète le PCA (B3-08) mais ne remplace ni la sauvegarde (B2-24) ni la supervision (B2-28).

11. L'essentiel

  1. Disponibilité = temps de fonctionnement ÷ temps total ; 99,9 % ≈ 8 h 46 min d'arrêt par an.
  2. Disponibilité = MTBF ÷ (MTBF + MTTR) : la haute disponibilité réduit surtout le MTTR.
  3. En série, les disponibilités se multiplient ; en parallèle, ce sont les indisponibilités.
  4. Un SPOF arrête tout à lui seul : on le double et on ajoute une bascule automatique et une alerte.
  5. RAID : 1 miroir, 5 parité (1 panne), 6 double parité (2 pannes), 10 miroirs en bandes ; 0 ne protège rien.
  6. Le RAID et la réplication ne sont pas des sauvegardes.
  7. Onduleur + arrêt propre (NUT) ; doubles alimentations sur deux circuits.
  8. Cluster Proxmox : quorum = majorité stricte, 3 nœuds (ou QDevice), HA manager redémarre la VM ailleurs.
  9. keepalived (VRRP) : une adresse virtuelle portée par le serveur vivant de plus haute priorité.
  10. HAProxy : frontend, backend, balance (roundrobin, leastconn, source), check retire les serveurs en panne.
Hautedisponibilité Mesurerles 9 · MTBF / MTTRsérie × · parallèle DisquesRAID 1 · 5 · 6 · 10hot spare · alerte MatérielSPOF · double alimonduleur + NUT Clusterquorum · 3 nœudsHA manager · migration Adresse virtuellekeepalived · VRRPpriorité · préemption RépartirHAProxy · balancecheck · persistance
La fiche en une image : à refaire de mémoire, sur une feuille, avant de passer aux exercices.

Les commandes clés

Pour…Commandes
RAID logicielmdadm --create /dev/md0 --level=1 --raid-devices=2 … · cat /proc/mdstat
Cluster Proxmoxpvecm create · pvecm add · pvecm status
Haute disponibilité d'une VMha-manager add vm:105 · qm migrate 105 pve2 --online
Adresse virtuelle/etc/keepalived/keepalived.conf · journalctl -u keepalived · ip -br a
Répartiteur/etc/haproxy/haproxy.cfg · haproxy -c -f … · systemctl reload haproxy
Tester la basculewhile true; do curl -s http://172.16.50.25; sleep 1; done
Calculerdispo = MTBF ÷ (MTBF + MTTR) · série : produit · parallèle : 1 − produit des indispos

Tout cela tient sur une page : utilise le bouton Mémo à imprimer en haut de la fiche.

La pratiqueLe quiz noté pour vérifier tes acquis, les exercices à rendre à ton professeur, puis le TP au labo sur ton pool Proxmox.

12. Quiz noté

8 questions · 10 minutesRéponds à toutes les questions, puis valide. Seule ta première tentative est enregistrée : elle compte dans ton suivi. Ensuite, tu peux t'entraîner autant que tu veux.

1. Combien d'arrêt par an autorise une disponibilité de 99,9 % ?

2. Qu'est-ce qu'un point unique de défaillance (SPOF) ?

3. Quelle est la capacité utile d'un RAID 5 de quatre disques de 2 To ?

4. Combien de pannes de disque simultanées un RAID 6 tolère-t-il ?

5. Dans un cluster Proxmox de trois nœuds, combien doivent rester joignables pour garder le quorum ?

6. Avec keepalived, quel serveur porte l'adresse virtuelle ?

7. Avec l'algorithme leastconn, HAProxy envoie une nouvelle requête…

8. À quoi sert l'option check sur une ligne server de HAProxy ?

13. Exercices : à toi de répondre

Écris ta réponse sous chaque énoncé et envoie-la à ton professeur. Quand il l'a validée, le corrigé s'affiche à la place du cadenas ; s'il te la renvoie « à revoir », lis son commentaire et corrige. Montre tes calculs.

Exercice 1 – Calculer (SIO2)

L'intranet dépend d'un commutateur (99,9 %), d'un routeur (99,9 %) et d'un serveur web (99,5 %). Calcule sa disponibilité et le nombre d'heures d'arrêt par an. Recommence avec deux serveurs web en parallèle (chacun à 99,5 %). Quel élément faut-il doubler ensuite ?

Le corrigé s'affichera ici dès que ton professeur aura validé ta réponse. Cherche d'abord par toi-même : c'est en se trompant qu'on retient.

Exercice 2 – Choisir un RAID (SIO2)

Le futur serveur de fichiers reçoit six disques de 4 To. Calcule la capacité utile et le nombre de pannes tolérées en RAID 5, RAID 6 et RAID 10. Lequel recommandes-tu pour des données de comptabilité, et pourquoi ?

Le corrigé s'affichera ici dès que ton professeur aura validé ta réponse. Cherche d'abord par toi-même : c'est en se trompant qu'on retient.

Exercice 3 – Dépanner (SIO2)

Tu éteins WEB1 pour tester la bascule keepalived : l'intranet reste injoignable. Sur WEB2, ip -br a ne montre pas 172.16.50.25 et journalctl -u keepalived affiche : (VI_INTRANET) received an invalid passwd!. Explique ce qui se passe et corrige.

Le corrigé s'affichera ici dès que ton professeur aura validé ta réponse. Cherche d'abord par toi-même : c'est en se trompant qu'on retient.

Exercice 4 – Concevoir (SIO2)

La direction de Brocéliande veut un intranet disponible à 99,9 % au moins, y compris pendant les mises à jour. Le budget permet trois hyperviseurs. Dessine l'architecture cible (du poste jusqu'aux données) et rédige en dix lignes la liste des mécanismes de haute disponibilité, en indiquant pour chacun la panne qu'il couvre.

Le corrigé s'affichera ici dès que ton professeur aura validé ta réponse. Cherche d'abord par toi-même : c'est en se trompant qu'on retient.

14. Au labo : un intranet qui survit à la panne

Objectif

Sur ton pool Proxmox (page Mes serveurs et VM), tu construis deux serveurs web identiques, tu les places derrière un répartiteur HAProxy, puis tu leur fais partager une adresse virtuelle avec keepalived. Tu provoques ensuite des pannes et tu mesures ce qu'en voit l'utilisateur. Compte 2 h 30. Adapte les adresses au réseau de ton pool si besoin.

VMSystèmeAdresseRôle
WEB1Debian 13 + nginx + keepalived172.16.50.21/24Serveur web, MASTER VRRP (priorité 150)
WEB2Clone de WEB1172.16.50.22/24Serveur web, BACKUP VRRP (priorité 100)
LB1Debian 13 + HAProxy172.16.50.31/24Répartiteur de charge
Adresse virtuelle–172.16.50.25Portée par WEB1 ou WEB2 (partie B)

En production, l'adresse virtuelle serait portée par deux répartiteurs HAProxy ; ici, pour économiser une VM, on l'étudie directement sur les serveurs web.

Ce que tu ajoutes à cette étape

  • Deux serveurs web qui affichent leur propre nom, pour voir qui répond.
  • Un répartiteur HAProxy avec contrôles de santé et page de statistiques.
  • Une adresse virtuelle keepalived qui bascule toute seule.
  • Des pannes provoquées et leur durée mesurée.

1 Préparer WEB1, puis le cloner en WEB2

Debian 13 WEB1
$ sudo apt update && sudo apt install -y nginx curl
$ echo "<h1>Intranet - servi par $(hostname)</h1>" | sudo tee /var/www/html/index.html
$ curl -s http://localhost # doit afficher le nom de la machine

Éteins WEB1, clone-la dans Proxmox (Clone, clone complet) en WEB2, puis sur WEB2 : nouveau nom (hostnamectl set-hostname web2), nouvelle adresse .22, et régénère la page d'accueil avec la commande echo ci-dessus.

2 Partie A : installer HAProxy sur LB1

Installe HAProxy (sudo apt install -y haproxy), ajoute à la fin de /etc/haproxy/haproxy.cfg le frontend, le backend et la page de statistiques de la partie 7, vérifie la syntaxe, puis recharge le service.

Complète les commandes de LB1, puis vérifie chaque ligne avec ✓, ou tout d'un coup avec Vérifier.

lb1$ vérifier la syntaxe ›
lb1$ recharger le service ›
backend : ligne du serveur web2 ›
algorithme : moins de connexions ›
web2$ voir l'adresse virtuelle ›

3 Tester la répartition et provoquer une panne

  1. Depuis un poste ou LB1 : for i in 1 2 3 4 5 6; do curl -s http://172.16.50.31; done. Les réponses doivent alterner entre web1 et web2.
  2. Ouvre http://172.16.50.31:8404/stats : les deux serveurs sont UP (vert).
  3. Lance une boucle while true; do curl -s http://172.16.50.31; sleep 1; done, puis arrête nginx sur WEB2 (sudo systemctl stop nginx). Combien de requêtes échouent avant que WEB2 passe DOWN ? Toutes les réponses viennent-elles ensuite de WEB1 ?
  4. Redémarre nginx sur WEB2 et observe son retour dans la rotation.

4 Partie B : l'adresse virtuelle avec keepalived

Sur WEB1 et WEB2 : sudo apt install -y keepalived, puis crée /etc/keepalived/keepalived.conf d'après la partie 6 (WEB1 : MASTER, priorité 150 ; WEB2 : BACKUP, priorité 100 ; même virtual_router_id et même mot de passe), et démarre le service (sudo systemctl restart keepalived). Vérifie avec ip -br a que seul WEB1 porte 172.16.50.25.

5 Provoquer la bascule

  1. Lance la boucle curl vers http://172.16.50.25.
  2. Éteins WEB1 depuis Proxmox (Stop, comme une panne). Compte les secondes sans réponse, puis vérifie que la page affiche web2 et que WEB2 porte la VIP (journalctl -u keepalived : Entering MASTER STATE).
  3. Rallume WEB1 : il reprend l'adresse (préemption). Note-le dans ton compte rendu.

6 Valider le TP : le cahier de recette

N°TestCommande ou actionRésultat attenduOK
1Les deux serveurs répondentcurl vers .21 et .22Une page avec le nom de chaque serveur
2La charge est répartie6 curl vers LB1Les réponses alternent web1 / web2
3Un serveur en panne est écartéArrêt de nginx sur WEB2WEB2 DOWN sur la page de statistiques, plus d'erreur côté client
4Une seule VIP à la foisip -br a sur WEB1 et WEB2172.16.50.25 présente sur WEB1 seulement
5La VIP basculeArrêt de WEB1, boucle curlRéponses de web2 après quelques secondes
6La durée de coupure est mesuréeCompte renduNombre de secondes sans réponse pour chaque panne
Suis ta progressionConnecte-toi pour marquer les ressources comme terminées et retrouver ton avancement.
Se connecter