Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

⏱️ Haute Disponibilité (HA) – Redondance, Failover & Clustering

Guide complet IDEO-Lab sur les concepts et architectures de la Haute Disponibilité (HA).

1.1

Concept : HA & SPOF

Haute Disponibilité (High Availability). Éliminer les SPOF.

HA SPOF Redondance
1.2

Concept : Failover

Basculement (Failover) vs. Rétablissement (Failback).

Failover Failback
1.3

Métriques : Les "9" (Nines)

Disponibilité (99.9%), MTBF, MTTR.

Nines MTBF MTTR
2.1

HA Réseau : Liens (L1/L2)

Agrégation (LACP), Redondance de liens.

LACP EtherChannel
2.2

HA Réseau : Switchs (L2)

STP (Blocage), Stacking (Châssis virtuel).

STP Stacking
2.3

HA Réseau : Routeurs (L3)

FHRP (VRRP, HSRP, GLBP), IP Flottante.

FHRP VRRP HSRP
3.1

HA Serveur : Load Balancer

Le pilier de la HA Applicative (Répartition, Health Checks).

Load Balancer Health Check
3.2

Cluster LB : Actif/Passif

Redondance du LB (VRRP, Heartbeat).

Actif/Passif VRRP
3.3

Cluster LB : Actif/Actif

Utilisation des deux LBs (DNS Round Robin, BGP).

Actif/Actif BGP
4.1

Clustering Applicatif

État partagé (Shared State) vs. "Rien à partager".

Cluster Stateless
4.2

Heartbeat & Quorum

Lien "Heartbeat", Split-Brain, Quorum (Témoin).

Heartbeat Split-Brain Quorum
4.3

Outil : Keepalived

VRRP pour Linux (IP Flottante) + Health Checks LVS.

Keepalived VRRP
5.1

Stockage : RAID

Redondance des disques (RAID 1, 5, 6, 10).

RAID Disques
5.2

Stockage : SAN & MPIO

Block Storage (iSCSI, FC), Multi-pathing (MPIO).

SAN iSCSI MPIO
5.3

Stockage : Réplication

Synchrone (zéro perte) vs. Asynchrone (perte minime).

Réplication Synchrone Asynchrone
6.1

BDD : Réplication (RPO)

Primaire/Secondaire (Master/Slave), Log Shipping (WAL).

BDD Réplication
6.2

BDD : Failover (RTO)

Failover Automatique (Sentinel, Patroni), Promotion.

Failover Patroni
6.3

BDD : Clustering (Actif/Actif)

Multi-Master (Galera, Percona XtraDB).

Multi-Master Galera
1.1 Concept : Haute Disponibilité (HA) & SPOF
Haute Disponibilité (High Availability)

La Haute Disponibilité est une caractéristique de conception d'un système (réseau, serveur, application) qui vise à garantir un niveau de performance opérationnelle (généralement le "temps de fonctionnement" ou Uptime) supérieur à la normale, et ce, sur une longue période.

Objectif : Assurer que le service est disponible (voir "A" de la Triade CIA) et fonctionne, même en cas de panne d'un ou plusieurs de ses composants.

La HA n'est pas une technologie unique, mais une stratégie qui repose sur 3 piliers :

  1. Redondance : Avoir plusieurs copies (N+1, N+N) de chaque composant (Routeur, Serveur, Disque).
  2. Monitoring (Surveillance) : Détecter la panne d'un composant (Health Checks).
  3. Failover (Basculement) : Le processus automatique de basculement du trafic vers le composant redondant "sain".
Le Problème : SPOF (Single Point of Failure)

L'ennemi de la HA est le SPOF (Point de Défaillance Unique).

Un SPOF est un composant de l'architecture dont la défaillance entraîne l'arrêt complet du service.

Exemple d'Architecture (NON-HA)
[INTERNET]
     │
[ ROUTEUR ]  <--- (SPOF 1 : Si le routeur tombe, tout est coupé)
     │
[ SWITCH ]   <--- (SPOF 2 : Si le switch tombe, tout est coupé)
     │
[ SERVEUR WEB ] <--- (SPOF 3 : Si le serveur tombe, le site est DOWN)
     │
[ DISQUE DUR ] <--- (SPOF 4 : Si le disque casse, données perdues)

Stratégie HA : Identifier méthodiquement chaque SPOF et le "dédoubler" (redondance).

1.2 Concept : Failover & Failback

Ces deux termes décrivent le processus de basculement dans un cluster Active/Passive.

Failover (Basculement)

C'est le processus automatique de basculement vers le nœud de secours (Passif) lorsque le nœud principal (Actif) tombe en panne.

État Normal :
[ Nœud 1 (ACTIF) ] <---> [ Nœud 2 (PASSIF) ]

(Panne de Nœud 1 !)

État de Failover :
[ Nœud 1 (MORT) ]     [ Nœud 2 (DEVIENT ACTIF) ]
                    (Prend l'IP Flottante)
Failback (Rétablissement)

C'est le processus (souvent manuel) de retour à l'état initial, une fois que le nœud principal (Nœud 1) a été réparé.

État (Nœud 1 réparé) :
[ Nœud 1 (PASSIF) ] <---> [ Nœud 2 (ACTIF) ]

(Intervention Admin : "Failback")

État Normal (Retour) :
[ Nœud 1 (REDEVIENT ACTIF) ] <---> [ Nœud 2 (REDEVIENT PASSIF) ]

On préfère souvent un failback manuel (planifié) pour éviter les basculements intempestifs ("flapping").

1.3 Métriques : Les "9" (Nines), MTBF & MTTR
Les "Neufs" (Nines of Availability)

La disponibilité (Uptime) est souvent exprimée en pourcentage, ou en "nombre de 9".

Disponibilité ("Nines")% UptimeIndisponibilité (Downtime) Maximale par An
2 Nines99%3.65 jours
3 Nines99.9%8.76 heures (Objectif standard Entreprise)
4 Nines99.99%52.56 minutes
5 Nines99.999%5.26 minutes (Objectif "Telco" / Critique)
6 Nines99.9999%31.5 secondes
MTBF & MTTR

Ces deux métriques définissent la fiabilité et la réparabilité.

MTBF (Mean Time Between Failures)

Temps Moyen Entre les Pannes.

Mesure : La Fiabilité. (Un MTBF élevé est bon).

Ex: "Ce disque dur a un MTBF de 1 million d'heures." (Statistique).

MTTR (Mean Time To Repair/Recover)

Temps Moyen de Réparation/Rétablissement.

Mesure : La Réparabilité. (Un MTTR bas est bon).

Ex: "Combien de temps faut-il (en moyenne) pour remplacer l'alimentation défaillante ?" (Inclut détection, diagnostic, réparation, redémarrage).

Formule de Disponibilité
Disponibilité (A) = MTBF / (MTBF + MTTR)
2.2 HA Réseau : Switchs (L2)

SPOF : Le switch lui-même (ex: le switch "core" de l'étage).

Solution 1 : Spanning Tree (STP)

On utilise deux switchs (A et B) et des liens redondants. STP (802.1D) gère la redondance en bloquant le lien secondaire pour éviter une boucle (Loop).

[ Serveur (LACP) ]
   (Lien A) │    │ (Lien B)
            ▼    ▼
 (FORWARD) [SW A] -- (BLOCKED) -- [SW B]

Failover : Si SW A tombe, STP (RSTP) le détecte, débloque le lien (SW A <-> SW B) et le Lien B du serveur, et le trafic reprend (Convergence 1-30 sec).

Solution 2 : Stacking (Châssis Virtuel)

(La meilleure méthode). On utilise des switchs "stackables" (ex: Cisco StackWise).

On connecte les switchs A et B avec des câbles "Stack" dédiés (très haute vitesse) à l'arrière. Les deux switchs fusionnent logiquement en un seul "châssis virtuel" (ils partagent un seul "plan de contrôle" et une seule IP de management).

Avantage : Permet de créer un LACP (EtherChannel) multi-châssis. Le serveur est connecté à la fois à SW A et SW B (Actif/Actif). Si SW A tombe, le LACP continue sur SW B (failover instantané, 0 sec).

2.3 HA Réseau : Routeurs (L3) (FHRP)

SPOF : La Passerelle par défaut (Default Gateway) (ex: 192.168.1.1). Si ce routeur tombe, tous les clients du LAN perdent l'accès à Internet et aux autres VLANs.

Solution : FHRP (First Hop Redundancy Protocol)

Un FHRP est un protocole qui permet à deux routeurs (ou plus) de partager une IP Flottante (Virtuelle), qui sera utilisée comme passerelle par les clients.

Les routeurs s'envoient des "heartbeats" (multicast) pour s'assurer que le maître est vivant.

Protocoles FHRP (Cluster Actif/Passif)
ProtocolePropriétaireDescription
HSRPCisco (Propriétaire)Hot Standby Router Protocol. Un routeur est Actif (gère l'IP virtuelle), l'autre est Standby (écoute).
VRRPStandard (IETF)Virtual Router Redundancy Protocol. Similaire à HSRP (Maître/Backup). (Utilisé par Keepalived sur Linux).
GLBPCisco (Propriétaire)(Actif/Actif) Gateway Load Balancing Protocol. Permet aux deux routeurs d'être actifs (Load Balancing).
3.1 HA Serveur : Rôle du Load Balancer

Le Load Balancer (Répartiteur de Charge) est le composant central de la Haute Disponibilité Applicative (Serveurs).

1. Répartition de Charge (Scalabilité)

Il distribue le trafic entrant (via un algorithme) sur un "pool" de serveurs back-end. (Voir guide Load Balancer).

2. Health Checks (HA)

C'est la fonction HA. Le LB agit comme un "moniteur" (sonde) qui vérifie la santé des serveurs en temps réel (ex: GET /healthz toutes les 5 sec).

Pool : [Srv A (UP)], [Srv B (UP)], [Srv C (UP)]

--- (Panne : Le service PHP sur Srv C crash) ---

1. [LB] envoie la sonde HTTP à [Srv C].
2. [Srv C] répond "503 Service Unavailable" (ou Timeout).
3. [LB] (après 3 échecs) marque Srv C comme "DOWN".
4. [LB] arrête immédiatement d'envoyer du trafic utilisateur
   à Srv C.

Résultat : Le service reste 100% disponible
(sur Srv A et Srv B).
3.2 Cluster LB : Actif/Passif (VRRP)

Le Load Balancer (LB) élimine le SPOF des serveurs, mais il devient lui-même le SPOF. On doit donc le rendre redondant, généralement avec une paire Active/Passive.

Architecture (VRRP / Keepalived)

On utilise un protocole FHRP (comme VRRP) pour gérer une IP Flottante (VIP) entre deux LBs.

                     [ Clients (Internet) ]
                            │
                            ▼
                     [ IP Flottante (VIP) ]
                    ↗ (Possède le VIP)   ↘ (Écoute)
                   ╱                     ╲
[ LB 1 (ACTIF) ]  <---- (Heartbeat VRRP) ---->  [ LB 2 (PASSIF) ]
(Priorité 100)                                (Priorité 90)
   │                                           
   └──────────► [ Pool de Serveurs ]
Failover
  1. LB 1 (Actif) gère 100% du trafic. LB 2 (Passif) ne fait rien (en "standby").
  2. LB 1 et LB 2 s'envoient des "heartbeats" (VRRP).
  3. Panne : LB 1 (Actif) crash.
  4. LB 2 (Passif) ne reçoit plus de heartbeats.
  5. LB 2 (Passif) se déclare "Actif" (Maître VRRP), usurpe l'IP Flottante (VIP), et commence à traiter le trafic.

Outils : Keepalived (Linux), HSRP (Cisco), F5 (intégré).

3.3 Cluster LB : Actif/Actif

Le mode Actif/Passif est simple et fiable, mais "gâche" des ressources (le LB 2 est inactif 99% du temps). Le mode Actif/Actif vise à utiliser tous les LBs simultanément.

Solution 1 : DNS Round Robin

Le LB 1 a une IP Publique (80.1.2.3). Le LB 2 a une IP Publique (80.1.2.4). Les deux sont actifs.

On configure le DNS pour www.ideolab.com avec deux enregistrements A :

www   A   60   80.1.2.3
www   A   60   80.1.2.4
  • Client 1 (via 8.8.8.8) reçoit 80.1.2.3 -> parle à LB 1.
  • Client 2 (via 1.1.1.1) reçoit 80.1.2.4 -> parle à LB 2.

Inconvénient : Mauvais failover. Si LB 1 tombe, 50% des clients (ceux dont le cache DNS a 80.1.2.3) verront une erreur, le temps que le TTL DNS (60s) expire.

Solution 2 : Routage (BGP / Anycast)

(Architecture Cloud / Très grande échelle).

Les deux LBs (dans des Data Centers différents) annoncent (via BGP) la même adresse IP (VIP) à Internet.

Le routage Internet (BGP) envoie "naturellement" le client vers le LB le plus proche (en termes de "sauts" réseau). C'est le principe de l'Anycast (ex: 8.8.8.8, 1.1.1.1).

Failover : Si le LB 1 (Paris) tombe, il arrête d'annoncer l'IP. Le routage BGP converge automatiquement et envoie 100% du trafic vers le LB 2 (Francfort).

4.1 Clustering Applicatif

Avoir un Load Balancer ne suffit pas si l'application elle-même n'est pas conçue pour la HA. L'état (State) est le problème.

Architecture "Shared-Nothing" (Stateless)

C'est l'architecture idéale pour la scalabilité horizontale (Cloud, Microservices).

L'état (ex: la session utilisateur, le panier) n'est pas stocké sur le serveur d'application. Il est externalisé.

[ LB (Non-Sticky) ]
   │      │
[ Srv A ] [ Srv B ]
   │      │
   └─[ BDD Externe (Redis/DB) ]
      (Stocke les sessions)
  • Req 1 (Login) -> Srv A -> Stocke Session X dans Redis.
  • Req 2 (Panier) -> Srv B -> Lit Session X depuis Redis.

Avantage : N'importe quel serveur peut traiter n'importe quelle requête. On peut ajouter/supprimer des serveurs (autoscaling) sans impact.

Architecture "Shared-State" (Stateful)

Applications (souvent "legacy") qui stockent l'état (session) dans leur propre mémoire (RAM).

Problème : La Req 2 (Panier) doit absolument retourner sur Srv A.

Solution HA :

  1. LB "Sticky" : (Voir guide LB) Le LB (Cookie, IP Hash) force le client à retourner sur Srv A. (Problème : Si Srv A meurt, la session est perdue).
  2. Réplication de Session : (Lourd) Srv A et Srv B se parlent (Multicast) en permanence pour répliquer l'état de la session. (ex: Tomcat Clustering).

4.2 Heartbeat & Problème Split-Brain
Heartbeat (Lien de vie)

Dans un cluster HA (Actif/Passif), les nœuds doivent se surveiller mutuellement. Ils le font via un lien réseau dédié (souvent un câble croisé) appelé Lien Heartbeat.

Le nœud Actif envoie un "pouls" (ex: "Je suis vivant") toutes les 100ms au nœud Passif. Si le Passif ne reçoit plus le pouls (timeout), il initie le Failover.

Le Problème : Split-Brain

C'est le cauchemar du clustering.

Scénario : Le Nœud 1 (Actif) et le Nœud 2 (Passif) fonctionnent, mais le câble Heartbeat est coupé (panne réseau).

[ Nœud 1 (ACTIF) ]  <--- (X CÂBLE COUPÉ X) --->  [ Nœud 2 (PASSIF) ]
   (Pense "Nœud 2 est mort")                   (Pense "Nœud 1 est mort")
   (Garde le VIP)                              (Initie Failover)
                                               (Usurpe le VIP)

Résultat : Les deux nœuds sont ACTIFS en même temps, répondant à la même IP Flottante (VIP). C'est un Split-Brain. (Cause : corruption de données, chaos réseau).

Solution : Quorum (Témoin)

Pour éviter le Split-Brain, on utilise un Quorum (majorité). (Nécessite 3 nœuds, ou 2 nœuds + 1 "témoin").

Un nœud ne peut devenir Actif que s'il peut "voir" la majorité du cluster (ex: 2 sur 3). Dans le scénario ci-dessus (coupure), aucun des deux nœuds n'a la majorité, et un seul (celui qui voit le témoin) prend la main.

4.3 Outil : Keepalived (Linux HA)

Keepalived est un service (daemon) Linux open-source qui fournit une solution de HA simple (Actif/Passif) en combinant deux fonctionnalités :

  1. FHRP (Routage) : Il implémente le protocole VRRP (voir 2.3) pour gérer une IP Flottante (VIP) entre deux serveurs (un Maître, un Backup).
  2. Health Checking : Il intègre un "Health Checker" qui peut surveiller l'état d'un service (ex: nginx, haproxy).
Exemple (Cluster Nginx)

On installe Nginx + Keepalived sur 2 serveurs (LB1, LB2).

# Fichier: /etc/keepalived/keepalived.conf

vrrp_script check_nginx {
    script "killall -0 nginx"  # (Vérifie si le process nginx tourne)
    interval 2
}

vrrp_instance VI_1 {
    state MASTER            # (Sur LB1) (state BACKUP sur LB2)
    interface eth0
    virtual_router_id 51    # (Doit être identique sur les deux)
    priority 101            # (Mettre 100 sur LB2)
    
    virtual_ipaddress {
        192.168.1.100/24    # (L'IP Flottante / VIP)
    }
    
    track_script {
        check_nginx
    }
}

Failover : Si le script check_nginx échoue sur LB1 (Maître), Keepalived baisse sa priorité, et LB2 (Backup) prend le VIP.

5.1 HA Stockage : RAID

RAID (Redundant Array of Independent Disks) fournit la HA au niveau des disques durs (L0). Il protège contre la panne d'un (ou plusieurs) disques physiques.

RAIDDescription (Min Disques)AvantageInconvénient
RAID 0Striping (Agrégation) (2)Performance (Lecture/Écriture x2)Zéro Redondance. (1 disque casse = tout est perdu).
RAID 1Mirroring (Miroir) (2)Redondance (Copie exacte). (1 disque peut casser).Coût (Capacité = 50%).
RAID 5Striping + Parité Distribuée (3)Équilibre (Perf + Redondance). (1 disque peut casser).Lent en écriture (calcul parité). Dangereux (temps de reconstruction).
RAID 6Striping + Double Parité (4)Haute Redondance (2 disques peuvent casser).Lent en écriture (double calcul).
RAID 10(RAID 1+0) (Miroir de Striping) (4)Meilleur (Perf + Redondance).Coût (Capacité = 50%).
5.2 HA Stockage : SAN & MPIO

SPOF : Le serveur (physique) lui-même (qui contient les disques RAID).

SAN (Storage Area Network)

Un SAN est un réseau dédié (séparé du LAN) conçu pour le stockage bloc (Block Storage).

Les serveurs (Initiators) se connectent à une baie de stockage (Target) via des protocoles (iSCSI (sur IP) ou Fibre Channel (FC)) pour voir les disques (LUNs) comme s'ils étaient locaux.

MPIO (Multi-Path I/O)

C'est la HA du SAN. On utilise deux switchs SAN (tissu A, tissu B) et deux contrôleurs sur la baie de stockage.

Le serveur (via MPIO) a plusieurs chemins (paths) pour atteindre le même disque (LUN).

[ Serveur ]
 (HBA 1) │    │ (HBA 2)
         ▼    ▼
      [ SW A ] [ SW B ] (Réseau SAN redondant)
         │    │
         ▼    ▼
[ Baie SAN (Contrôleur A | Contrôleur B) ]
[ (Disques RAID) ]

Si le Switch A (ou HBA 1) tombe, le trafic bascule instantanément sur le chemin B (MPIO).

5.3 HA Stockage : Réplication (Synchrone vs Asynchrone)

SPOF : La baie SAN elle-même (ou le Data Center entier : incendie, inondation).

Solution : Répliquer (copier) les données vers une deuxième baie SAN (sur un site distant).

Réplication Synchrone

Objectif : Zéro perte de données (RPO=0).

Flux :

  1. L'App écrit sur [Baie A].
  2. [Baie A] écrit sur [Baie B] (distante).
  3. [Baie B] répond "OK" à [Baie A].
  4. [Baie A] répond "OK" à l'App.

Inconvénient : Limité géographiquement. L'application est ralentie par la latence du réseau (l'aller-retour vers Baie B).

Réplication Asynchrone

Objectif : Perte de données minime (RPO > 0).

Flux :

  1. L'App écrit sur [Baie A].
  2. [Baie A] répond "OK" à l'App (immédiat).
  3. [Baie A] (en arrière-plan) copie l'écriture vers [Baie B] (ex: 5 min plus tard).

Avantage : Aucune latence pour l'application. Fonctionne sur de longues distances (WAN).

Inconvénient : Si la Baie A est détruite, les données des 5 dernières minutes (pas encore répliquées) sont perdues (RPO = 5 min).

6.1 HA Base de Données : Réplication

La réplication de BDD (ex: PostgreSQL, MySQL) est le mécanisme de copie des transactions d'un serveur Primaire (Maître) vers un (ou plusieurs) serveurs Secondaires (Esclaves/Standby).

Architecture Primaire/Secondaire (Master/Slave)
(Écritures : INSERT, UPDATE)
        │
        ▼
[ SERVEUR PRIMAIRE (Master) ]
 (ex: PostgreSQL)
        │
        │ (Envoie les WAL (Logs))
        ▼
[ SERVEUR SECONDAIRE (Standby) ]
 (Suit le Maître)
RPO (Recovery Point Objective)

La réplication (Synchrone vs Asynchrone) détermine le RPO (Objectif de Point de Reprise) : Quelle quantité de données suis-je prêt à perdre ?

  • Asynchrone : (Défaut) Le Maître écrit, puis envoie le log. (Rapide, RPO > 0s (risque de perte)).
  • Synchrone : Le Maître écrit, envoie le log, attend que l'Esclave confirme l'écriture, *puis* confirme au client. (Lent, RPO = 0s (zéro perte)).
6.2 HA Base de Données : Failover Automatique

La réplication gère la HA des données (RPO). Le Failover Automatique gère la HA du service (RTO - Recovery Time Objective : "Combien de temps pour redémarrer ?").

Le Problème (Split-Brain)

Si le Maître tombe, comment les Esclaves décident-ils (1) qu'il est mort, et (2) qui devient le nouveau Maître (Promotion) ?

Solution : Outil de Clustering (Témoin)

Des outils externes (Watchdog) gèrent l'élection et le failover, en utilisant un Quorum (voir 4.2) pour éviter le Split-Brain.

TechnologieOutil
PostgreSQLPatroni (avec etcd/Consul), Repmgr, pg_auto_failover.
RedisRedis Sentinel (Témoin/Vote).
MongoDBReplica Set (Élection intégrée).
ElasticsearchClustering (Élection intégrée).
6.3 HA Base de Données : Clustering (Actif/Actif)

Le modèle Primaire/Secondaire (Maître/Esclave) est Actif/Passif (on n'écrit que sur le Maître).

Le Clustering Multi-Master (Actif/Actif) permet d'écrire sur tous les nœuds du cluster.

Galera / Percona XtraDB Cluster (MySQL)

C'est la solution A/A la plus connue pour MySQL/MariaDB.

Fonctionnement : Réplication Synchrone "Virtuelle".

  1. Client écrit (INSERT) sur Nœud A.
  2. Nœud A (avant de "commiter") envoie l'INSERT à Nœud B et Nœud C.
  3. Nœud B et Nœud C (certifient et appliquent) et répondent "OK".
  4. Nœud A reçoit "OK" de B et C, et "commit" (confirme) au client.

Avantages : HA (pas de failover, tous sont actifs), Scalabilité en lecture.

Inconvénients : Latence en écriture (l'écriture est aussi lente que le nœud le plus lent), Conflits (DEADLOCKs) si 2 nœuds écrivent la même ligne en même temps.

Cheat-sheet : Comparatif HA (A/P vs A/A)
CritèreActif/Passif (A/P)Actif/Actif (A/A)
ConceptUn nœud "Passif" (Standby) écoute un "Actif" (Heartbeat).Tous les nœuds sont "Actifs" et se partagent la charge.
RessourcesGaspillage (50% des ressources sont inactives).Utilisation (100%).
FailoverRequis. (Le Passif doit "devenir" Actif). (Downtime 1s-30s).Non requis. (Le LB/Routage retire juste le nœud mort). (Downtime 0s).
Complexité (État)Simple (Pas de conflit d'écriture).Très Complexe (Split-Brain, Conflits, Réplication synchrone).
ExemplesVRRP / Keepalived
BDD Primaire/Secondaire
Load Balancer (Pool)
DNS Round Robin / Anycast
BDD Galera Cluster