Garder la même donnée en plusieurs exemplaires
La réplication consiste à garder la même donnée sur plusieurs machines. Elle protège contre la perte d’une machine, et elle permet à plusieurs machines de répondre aux lectures.
Une boutique en ligne sait qu’il reste 40 tasses en stock. Si ce chiffre n’existe que sur une seule machine et qu’elle tombe, la boutique ne sait plus rien.
À la fin de cette leçon
Remarque
Je peux expliquer comment des copies d’une donnée sont tenues à jour et ce qu’une panne change.
Mots clés
| Mot | Ce que ça veut dire |
|---|---|
| Réplication | garder la même donnée sur plusieurs machines |
| Primaire | la copie qui reçoit les écritures |
| Réplique | une copie qui suit le primaire |
| Retard de réplication | le nombre de changements qu’une réplique n’a pas encore reçus |
| Basculement | le choix d’une réplique comme nouveau primaire |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Le primaire reçoit, les répliques suivent
Dans le montage le plus courant, une seule machine accepte les écritures : le primaire. Il note chaque changement dans un journal numéroté, puis l’envoie aux répliques.
Chaque réplique applique les changements dans l’ordre du journal. Les lectures peuvent aller au primaire ou à une réplique, ce qui répartit la charge.
Fabriquer un petit client nommé v
v() ( printf '%s\r\n' "$*" | nc -w 1 valkey 6379 )Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Demander son rôle au serveur du labo
v INFO replication | grep -E "^(role|connected_slaves)"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Écrire le stock de tasses
v SET dist:stock:tasse 40Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Attendre qu’une réplique confirme
v WAIT 1 100Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Une réplique peut avoir du retard
Le primaire n’attend pas toujours que chaque réplique ait reçu le changement. Cette réplication asynchrone garde les écritures rapides. Elle laisse pourtant les répliques un peu en arrière.
Le retard de réplication est le nombre de changements du journal qu’une réplique n’a pas encore appliqués. Lire sur une réplique en retard donne une valeur plus ancienne.
Mesurer le retard de trois répliques
# Le primaire garde un journal. Chaque réplique en a appliqué une partie.
journal = ["stock=40", "stock=38", "stock=35", "stock=30"]
repliques = {"R1": 4, "R2": 2, "R3": 3}
for nom in repliques:
appliquees = repliques[nom]
retard = len(journal) - appliquees
print(nom, "a lu", journal[appliquees - 1], "retard", retard)
# Passez R2 à 4 puis relancez : son retard devient 0.
Choisir la copie la plus récente
Si le primaire s’arrête, le système doit choisir un nouveau primaire parmi les répliques vivantes. C’est le basculement. La bonne candidate est la réplique qui a appliqué le plus de changements.
Un changement que le primaire n’avait envoyé à personne est perdu. C’est le prix de la réplication asynchrone.
Exemple : choisir après une panne
| Copie | Dernier changement appliqué | État |
|---|---|---|
| Primaire | 10 | En panne |
| Réplique 1 | 7 | Vivante |
| Réplique 2 | 9 | Vivante |
| Réplique 3 | 9 | En panne |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une erreur fréquente
Attention
On croit souvent qu’une réplique est une sauvegarde. Ce n’est pas le cas : si quelqu’un efface une ligne par erreur, la réplique l’efface aussi. Gardez en plus des sauvegardes à des dates précises.