Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 918 minIntermédiaire

Réplication des données : bases de données, fichiers et stockage

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • distinguer RAID, réplication et sauvegarde ;
  • choisir entre réplication synchrone et asynchrone selon le RPO ;
  • mettre en place une réplication MariaDB et promouvoir un réplica ;
  • répliquer des partages avec DFS et en connaître la limite.

5 exercices corrigés1 schéma

La réplication recopie automatiquement les modifications d'un système (une base de données, un dossier partagé, un disque) vers une ou plusieurs copies, pour qu'une autre machine puisse reprendre le service avec des données à jour. Selon qu'elle est synchrone ou asynchrone, elle fixe la quantité de données qu'on risque de perdre lors d'une bascule. Ce chapitre explique cette différence, puis la réplication des bases MariaDB et MySQL, celle des fichiers avec DFS et sous Linux, et les pièges qui transforment une réplication en perte de données.

Réplication, RAID et sauvegarde : trois protections différentes

Ces trois techniques font des copies, mais elles ne protègent pas contre les mêmes choses.

RAIDRéplicationSauvegarde
CopieSur plusieurs disques du même serveurSur une autre machine, voire un autre siteSur un autre support, conservée dans le temps
Protège contreLa panne d'un disqueLa panne d'un serveur, voire d'un sitePresque tout, y compris l'erreur humaine et le rançongiciel
Ne protège pas contreLa panne du serveur, la suppression, le rançongicielLa suppression et le rançongiciel, recopiés aussitôtLa panne elle-même : la restauration prend du temps
Données perdues lors d'une panneAucuneAucune (synchrone) ou quelques secondes (asynchrone)Tout depuis la dernière sauvegarde
Temps de repriseAucunSecondes à minutesHeures

La réplication est un outil de disponibilité ; la sauvegarde, de récupération. Une infrastructure sérieuse a les deux : le cours sauvegarde et PRA traite de la seconde.

Synchrone ou asynchrone

En réplication synchrone, une écriture n'est confirmée à l'application qu'une fois enregistrée sur la copie. Si le serveur principal tombe, la copie a tout : aucune donnée validée n'est perdue (RPO nul). En contrepartie, chaque écriture attend l'aller-retour réseau vers la copie, ce qui ralentit l'application et limite la distance entre les deux sites ; et si la copie ne répond plus, le principal doit soit bloquer les écritures, soit passer temporairement en asynchrone.

En réplication asynchrone, l'écriture est confirmée dès qu'elle est enregistrée sur le principal, puis envoyée à la copie juste après. L'application ne ralentit pas, la copie peut être loin, mais elle a toujours un peu de retard : si le principal tombe, les écritures pas encore transmises sont perdues. Le RPO vaut ce retard, en général moins d'une seconde, davantage en cas de forte charge ou de réseau lent.

En réplication semi-synchrone, une solution intermédiaire de MySQL et MariaDB, le principal attend seulement qu'au moins une copie ait reçu la transaction (pas forcément appliquée) avant de la confirmer.

SynchroneAppliPrincipalCopie1. écriture2. envoi3. enregistré4. confirméPlus lent (un aller-retour), RPO nulAsynchroneAppliPrincipalCopie1. écriture2. confirmé3. envoidonnéeseulement surle principalRapide, mais perte possible (RPO = retard)
Synchrone : on attend la copie avant de confirmer. Asynchrone : on confirme d'abord, au risque de perdre les dernières écritures

Répliquer une base MariaDB ou MySQL

Le principe est le même pour MariaDB (le SGBD fourni par Debian 13, en version 11.8) et MySQL : le serveur source écrit chaque modification dans son journal binaire (binary log), et chaque réplica lit ce journal, le recopie dans un journal local, puis rejoue les modifications sur ses propres données. La réplication est asynchrone par défaut. Le chapitre sur la sauvegarde d'une base MySQL du cours SQL en présente le principe ; voici sa mise en place pour Ravelle Conseil, avec la source SRV-DB (10.10.20.35) et un réplica SRV-DB2 (10.10.20.36).

Sur la source, dans un fichier /etc/mysql/mariadb.conf.d/60-replication.cnf :

text
[mariadb]
server_id = 1
log_bin   = mariadb-bin
bind-address = 10.10.20.35

Chaque serveur d'une réplication a un server_id unique. Le journal binaire n'est pas actif par défaut dans MariaDB (il l'est dans MySQL depuis la version 8.0) : log_bin l'active. Après un redémarrage de MariaDB, on crée le compte de réplication, limité à l'adresse du réplica et au seul droit nécessaire :

sql
CREATE USER 'repl'@'10.10.20.36' IDENTIFIED BY 'Une-Longue-Phrase-De-Passe';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.10.20.36';

La copie initiale. Le réplica doit partir d'une copie exacte des données, avec la position correspondante dans le journal binaire. mariadb-dump --all-databases --single-transaction --master-data=1 --gtid produit un fichier qui contient les données et cette position ; pour une grosse base, mariadb-backup copie les fichiers à chaud, plus vite.

Sur le réplica, avec server_id = 2 et read_only = ON dans sa configuration, puis, une fois la copie initiale importée :

sql
CHANGE MASTER TO
    MASTER_HOST = '10.10.20.35',
    MASTER_USER = 'repl',
    MASTER_PASSWORD = 'Une-Longue-Phrase-De-Passe',
    MASTER_USE_GTID = slave_pos;
START REPLICA;
SHOW REPLICA STATUS\G

Les trois lignes à lire dans le résultat :

text
       Slave_IO_Running: Yes
      Slave_SQL_Running: Yes
  Seconds_Behind_Master: 0

Slave_IO_Running dit que le réplica reçoit le journal de la source ; Slave_SQL_Running, qu'il rejoue les modifications ; Seconds_Behind_Master, son retard estimé. Sous MySQL 8.4, les commandes et les colonnes ont été renommées (CHANGE REPLICATION SOURCE TO, SOURCE_HOST, Replica_IO_Running, Seconds_Behind_Source), mais leur rôle est identique. Les identifiants de transaction globaux (GTID) permettent au réplica de savoir exactement où il en est, ce qui simplifie les bascules.

La bascule vers le réplica. Si SRV-DB tombe, la promotion de SRV-DB2 se fait ainsi :

  1. Vérifier que le réplica a appliqué tout ce qu'il a reçu (Seconds_Behind_Master à 0, ou l'arrêt du rejeu constaté).
  2. Arrêter la réplication et en effacer la configuration : STOP REPLICA; puis RESET REPLICA ALL;.
  3. Autoriser les écritures : SET GLOBAL read_only = OFF;.
  4. Diriger l'application vers le nouveau serveur : en changeant l'adresse dans sa configuration, ou mieux en déplaçant une adresse virtuelle que l'application utilise toujours.
  5. Empêcher l'ancienne source de revenir comme source : à son redémarrage, elle se croirait encore principale, et deux serveurs accepteraient des écritures. On la reconstruit comme réplica du nouveau principal.

Faite à la main, en suivant une procédure écrite, cette bascule prend quelques minutes. Des outils l'automatisent : MaxScale pour MariaDB, InnoDB Cluster (réplication de groupe et MySQL Router) pour MySQL. Pour PostgreSQL, l'équivalent est la réplication en continu (streaming replication), automatisée par des outils comme Patroni.

Le cluster multi-maître synchrone : Galera. MariaDB Galera Cluster réunit au moins trois nœuds, tous accessibles en écriture : chaque transaction est certifiée par l'ensemble du cluster avant d'être validée, ce qui évite les conflits, et un nœud qui perd le quorum refuse les requêtes. Placé derrière HAProxy, un cluster Galera supprime la bascule manuelle : la panne d'un nœud ne coupe rien. En contrepartie, les écritures sont plus lentes (chaque validation attend le cluster), il faut trois nœuds et un réseau fiable, et certaines opérations (les très grosses transactions) s'y comportent mal.

Répliquer des fichiers sous Windows : DFS

Sous Windows Server, deux rôles complémentaires portent le nom DFS (Distributed File System) :

  • DFS-N (espaces de noms) donne aux utilisateurs un chemin unique, par exemple \\ravelle.lan\partages\commun, qui pointe vers une ou plusieurs cibles réelles : \\SRV-FIC1\commun et \\SRV-FIC2\commun. Si une cible ne répond plus, le client utilise l'autre ;
  • DFS-R (réplication) tient les cibles synchronisées : une réplication multi-maître (on peut modifier un fichier sur n'importe quel serveur), qui ne transfère que les parties modifiées des fichiers (la compression différentielle à distance, RDC), selon une planification et une bande passante réglables.
powershell
# Sur les deux serveurs de fichiers
Install-WindowsFeature FS-DFS-Namespace, FS-DFS-Replication -IncludeManagementTools

# Le groupe de réplication et ses membres
New-DfsReplicationGroup -GroupName "RG-Partages"
New-DfsReplicatedFolder -GroupName "RG-Partages" -FolderName "Commun"
Add-DfsrMember -GroupName "RG-Partages" -ComputerName SRV-FIC1, SRV-FIC2
Add-DfsrConnection -GroupName "RG-Partages" -SourceComputerName SRV-FIC1 -DestinationComputerName SRV-FIC2
Set-DfsrMembership -GroupName "RG-Partages" -FolderName "Commun" -ComputerName SRV-FIC1 `
    -ContentPath "D:\Partages\Commun" -PrimaryMember $true
Set-DfsrMembership -GroupName "RG-Partages" -FolderName "Commun" -ComputerName SRV-FIC2 `
    -ContentPath "D:\Partages\Commun"

# Le retard de réplication : les fichiers en attente d'envoi
Get-DfsrBacklog -GroupName "RG-Partages" -FolderName "Commun" `
    -SourceComputerName SRV-FIC1 -DestinationComputerName SRV-FIC2

Le membre principal (-PrimaryMember) fait autorité lors de la première synchronisation : son contenu l'emporte sur celui de l'autre serveur. La connexion créée par Add-DfsrConnection fonctionne dans les deux sens par défaut.

La limite de DFS-R : pas de verrou partagé. Deux utilisateurs qui ouvrent le même fichier, l'un sur SRV-FIC1, l'autre sur SRV-FIC2, peuvent le modifier en même temps : DFS-R ne verrouille pas un fichier d'un serveur à l'autre. À la réplication, la dernière version enregistrée gagne, et l'autre est déplacée dans un dossier caché de conflits (ConflictAndDeleted). Pour des fichiers modifiés par plusieurs personnes, on configure donc DFS-N pour que tous les utilisateurs d'un site travaillent sur la même cible, l'autre ne servant qu'en secours. Pour une vraie haute disponibilité d'un serveur de fichiers, avec bascule transparente des fichiers ouverts, Windows Server propose le serveur de fichiers en cluster de basculement.

DFS-R réplique aussi le dossier SYSVOL des contrôleurs de domaine, qui contient les stratégies de groupe et les scripts d'ouverture de session (chapitre 10).

Répliquer des fichiers sous Linux

OutilPrincipeUsage
rsync planifiéCopie à sens unique, à intervalle régulierGarder une copie de secours d'un dossier ; ce n'est pas de la haute disponibilité (RPO égal à l'intervalle)
lsyncdSurveille les modifications d'un dossier et lance rsync en quelques secondesSynchroniser le contenu de serveurs web en lecture seule (un seul serveur où l'on dépose les fichiers)
DRBDRéplique un disque bloc par bloc vers un autre serveur, en synchrone : un RAID 1 à travers le réseauUn service actif/passif (une base, un serveur NFS) avec Pacemaker : seul le nœud primaire monte le disque
GlusterFS, CephFSSystèmes de fichiers distribués, accessibles depuis plusieurs serveurs à la foisUn stockage commun à plusieurs serveurs web, ou au cluster de VM
NFS sur un NAS redondantUn partage unique monté par tous les serveursSimple, à condition que le NAS ne soit pas lui-même un SPOF

Pour les serveurs web de Ravelle Conseil, la solution la plus simple consiste à ne garder aucune donnée sur WEB1 et WEB2 : le code est déployé à l'identique sur les deux, les données sont dans la base, et les documents déposés par les utilisateurs dans un stockage commun. Les serveurs deviennent interchangeables, et leur panne ne fait rien perdre.

Choisir une solution de réplication

BesoinSolution adaptée
Une base de données, perte de quelques secondes acceptable, bascule manuelle en quelques minutesRéplication source-réplica asynchrone, procédure de promotion écrite
Une base de données, aucune perte, aucune coupureCluster Galera (MariaDB) ou InnoDB Cluster (MySQL) de trois nœuds, derrière un répartiteur
Des partages Windows sur deux sitesDFS-N et DFS-R, une cible active par site pour les fichiers partagés
Un service Linux actif/passif sur disqueDRBD et Pacemaker, avec fencing
Des VM, perte de quelques minutes acceptable, sans baie partagéeRéplication ZFS entre nœuds Proxmox VE
Des VM, aucune perteStockage partagé redondant ou Ceph

Exercices

Exercice 1 sur 5 Synchrone ou asynchrone ? Réussi À revoir

  1. La base de Ravelle Conseil est répliquée en asynchrone ; le retard moyen du réplica est de 2 secondes. La source tombe brutalement. Que risque-t-on de perdre ?
  2. Le responsable veut « zéro perte ». Que proposes-tu, et quel en est le coût ?
  3. Le réplica est installé à l'agence, à 30 kilomètres, derrière un VPN dont l'aller-retour mesuré est de 12 millisecondes. Quel temps ajoute la réplication synchrone à chaque validation de transaction ?
Voir la réponseMasquer la réponse de l'exercice 1
  1. Les transactions validées sur la source pendant les 2 dernières secondes environ, qui n'avaient pas encore été transmises ou appliquées au réplica. Les utilisateurs ont vu « enregistré », mais les données n'existent plus après la bascule.
  2. Une réplication synchrone (ou semi-synchrone, qui garantit qu'au moins un réplica a reçu la transaction), ou un cluster Galera. Le coût : chaque validation attend un aller-retour réseau, donc des écritures plus lentes, et une disponibilité qui dépend aussi du réplica et du réseau.
  3. Au moins 12 millisecondes par validation, l'aller-retour mesuré (la distance seule n'en expliquerait que 0,3 : ce sont le VPN et les équipements qui coûtent). Une application qui valide 50 transactions à la suite pour une seule action d'un utilisateur la verrait ralentir de 0,6 seconde.

Tu avais trouvé ?

Exercice 2 sur 5 Une réplication arrêtée Réussi À revoir

SHOW REPLICA STATUS\G affiche sur SRV-DB2 :

text
       Slave_IO_Running: Yes
      Slave_SQL_Running: No
  Seconds_Behind_Master: NULL
         Last_SQL_Error: Could not execute Write_rows event on table intranet.document;
                         Duplicate entry '1542' for key 'PRIMARY'
  1. Que fonctionne-t-il encore, et qu'est-ce qui est arrêté ?
  2. Quelle est la cause la plus probable ?
  3. Comment l'éviter à l'avenir ?
  4. Pourquoi est-ce grave même si la source fonctionne parfaitement ?
Voir la réponseMasquer la réponse de l'exercice 2
  1. Le réplica reçoit toujours le journal de la source (Slave_IO_Running: Yes), mais ne rejoue plus les modifications (Slave_SQL_Running: No) : ses données se figent.
  2. Une ligne d'identifiant 1542 existait déjà dans la table document du réplica : quelqu'un ou quelque chose a écrit directement sur le réplica. Quand la source a créé à son tour la ligne 1542, le rejeu a échoué.
  3. read_only = ON sur le réplica, des comptes applicatifs qui n'ont pas le droit de contourner ce mode, et une application configurée pour n'écrire que sur l'adresse du principal.
  4. Le réplica ne sert plus à rien : en cas de panne de la source, la bascule se ferait vers des données de plus en plus anciennes. Une réplication arrêtée doit déclencher une alerte (chapitre 11) ; sinon on la découvre le jour où on en a besoin.

Tu avais trouvé ?

Exercice 3 sur 5 Le DROP TABLE de 14 h 02 Réussi À revoir

À 14 h 02, un développeur supprime par erreur la table document sur SRV-DB. Ravelle Conseil dispose d'un réplica SRV-DB2 et d'un réplica retardé d'une heure, SRV-DB3, ainsi que d'une sauvegarde complète chaque nuit à 1 h.

  1. SRV-DB2 permet-il de récupérer la table ?
  2. Comment SRV-DB3 permet-il de la récupérer, et que faut-il faire vite ?
  3. Que permettrait la sauvegarde de la nuit seule, et que perdrait-on ?
Voir la réponseMasquer la réponse de l'exercice 3
  1. Non : il a rejoué la suppression quelques millisecondes après la source.
  2. SRV-DB3 n'appliquera la suppression qu'à 15 h 02. Avant cette heure, on arrête son rejeu (STOP REPLICA), on le fait avancer jusqu'à la transaction qui précède la suppression, puis on exporte la table document (avec mariadb-dump) et on la réimporte sur SRV-DB. Il faut agir avant 15 h 02, sinon SRV-DB3 rejoue l'erreur à son tour.
  3. Restaurer la table telle qu'elle était à 1 h du matin : toutes les modifications de la matinée (de 1 h à 14 h 02) seraient perdues, sauf à rejouer le journal binaire de la source jusqu'à 14 h 01 (la restauration à un instant donné).

Tu avais trouvé ?

Exercice 4 sur 5 Un conflit DFS-R Réussi À revoir

Le dossier Commun est répliqué par DFS-R entre SRV-FIC1 (siège) et SRV-FIC2 (agence). L'espace de noms envoie chaque utilisateur vers le serveur de son site. Un matin, Léa (au siège) et Karim (à l'agence) modifient en même temps le fichier planning.xlsx. Le soir, Léa ne retrouve plus ses modifications.

  1. Que s'est-il passé ?
  2. Ses modifications sont-elles perdues ?
  3. Propose deux façons d'éviter ce problème.
Voir la réponseMasquer la réponse de l'exercice 4
  1. DFS-R ne verrouille pas un fichier d'un serveur à l'autre. Chacun a modifié sa copie locale ; à la réplication, la version enregistrée en dernier (celle de Karim) a gagné et remplacé celle de Léa sur les deux serveurs.
  2. Pas forcément : la version perdante est déplacée dans le dossier caché ConflictAndDeleted de la réplication, sur le serveur où elle a perdu, tant que ce dossier n'a pas atteint son quota. On peut l'y récupérer.
  3. Configurer l'espace de noms pour que tous les utilisateurs travaillent sur la même cible (SRV-FIC1), SRV-FIC2 ne servant qu'en secours ; ou utiliser un outil de travail collaboratif qui gère la coédition (un espace documentaire partagé, une suite bureautique en ligne). Pour un fichier modifié par plusieurs sites, la réplication multi-maître sans verrou n'est pas adaptée.

Tu avais trouvé ?

Exercice 5 sur 5 Quelle réplication pour l'intranet ? Réussi À revoir

La base de l'intranet de Ravelle Conseil est petite (2 Go), modifiée quelques centaines de fois par jour. Le contrat de service accepte une perte de données d'une journée au plus et un rétablissement en moins de 4 heures (chapitre 1). La directrice demande s'il faut un cluster Galera de trois nœuds.

Que réponds-tu ? Argumente avec le RPO, le RTO, le coût et la complexité.

Voir la réponseMasquer la réponse de l'exercice 5

Un cluster Galera n'est pas nécessaire pour cet engagement. Le RPO accepté (une journée) et le RTO (4 heures) sont largement couverts par une réplication asynchrone vers un réplica, avec une procédure de promotion écrite et testée : on perd au pire quelques secondes de données et on bascule en quelques minutes. Galera demanderait trois serveurs, un réseau fiable entre eux, des compétences d'exploitation plus pointues et des écritures un peu plus lentes, pour un gain (aucune coupure) que le contrat ne demande pas. On garde évidemment la sauvegarde quotidienne, qui protège contre l'erreur humaine. Si l'engagement se durcit un jour (99,9 % en continu, par exemple), la question se reposera.

Tu avais trouvé ?

Chapitre terminé !

Fais les 5 exercices avant de passer à la suite : c'est en t'entraînant que tout se fixe.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Active Directory, DNS et DHCP redondantsRevoir le sommaire du cours