Cours sur la Réplication PostgreSQL
1. Introduction à la Réplication PostgreSQL
La réplication dans PostgreSQL est un mécanisme permettant de copier des données d'un
serveur principal (primary) vers un ou plusieurs serveurs secondaires (replicas). Ce processus
assure la disponibilité des données et peut être utilisé pour la répartition de charge, la
tolérance aux pannes ou la sauvegarde.
2. Types de Réplication PostgreSQL
a) Réplication Asynchrone
Le primaire envoie les journaux de transactions (WAL) au réplica sans attendre de
confirmation.
Si le primaire tombe en panne avant la transmission complète des WAL, des pertes de
données peuvent survenir.
Utilisé pour des systèmes où la performance est plus importante que la cohérence
immédiate.
b) Réplication Synchrone
Le primaire attend la confirmation du réplica avant de valider une transaction.
Aucune perte de données, car la transaction est confirmée sur au moins un standby
avant d'être validée.
Peut entraîner une latence plus élevée car le primaire doit attendre la réponse du
réplica.
3. Identifier le Mode de Réplication
Pour savoir si un serveur fonctionne en mode synchrone ou asynchrone, exécutez les
commandes suivantes sur le réplica :
a) Vérifier la configuration de la réplication
SHOW synchronous_standby_names;
Si la valeur est vide ('') ou NONE, la réplication est asynchrone.
Si des noms de standby apparaissent, la réplication est probablement synchrone.
b) Vérifier l'état du réplica
SELECT * FROM pg_stat_wal_receiver;
Cette commande permet d'obtenir des informations sur le processus de réplication.
Sur certaines versions de PostgreSQL, la colonne sync_state peut être absente.
c) Observer les journaux WAL
SELECT sent_lsn, write_lsn, flush_lsn, replay_lsn FROM pg_stat_replication;
Si write_lsn, flush_lsn, et replay_lsn sont proches de sent_lsn, la réplication
est rapide et possiblement synchrone.
d) Vérifier la version de PostgreSQL
SELECT version();
Certaines fonctionnalités de réplication peuvent varier selon la version de PostgreSQL
utilisée.
4. Explication de la Réplication Synchrone
Lorsqu’une transaction est exécutée sur le serveur primaire, voici le processus en mode
synchrone :
1. Le primaire écrit les données dans son journal WAL.
2. Il envoie ces modifications aux serveurs réplica configurés en standby.
3. Le réplica reçoit les données et les écrit dans son propre journal WAL.
4. Le réplica envoie un accusé de réception (ACK) au primaire pour confirmer la
réception.
5. Ce n'est qu'après avoir reçu cette confirmation que le primaire valide la transaction.
Ce mécanisme garantit qu'aucune donnée ne soit perdue en cas de panne, mais il peut ralentir
le système si le réplica est lent à répondre.
5. Avantages et Inconvénients des Modes de Réplication
Mode de
Avantages Inconvénients
Réplication
Rapide, faible impact sur la Risque de perte de données si le
Asynchrone
performance du primaire primaire tombe en panne
Assure l'intégrité des données,
Synchrone Augmente la latence des transactions
aucune perte en cas de panne
6. Dépannage des Erreurs Courantes
Erreur : terminating connection due to conflict with recovery
Cette erreur signifie que le réplica tente de lire des données qui sont en cours de
suppression par le processus de réplication.
Solutions possibles :
o Modifier la requête pour éviter les lectures concurrentes sur des tables en
récupération.
o Augmenter la durée de rétention des WAL (hot_standby_feedback = on
dans postgresql.conf).
Erreur : sync_state absent dans pg_stat_wal_receiver
Sur certaines versions de PostgreSQL, cette colonne n’existe pas.
Utilisez pg_stat_replication sur le primaire pour obtenir cette information.
7. Conclusion
La réplication PostgreSQL est un outil puissant pour assurer la disponibilité des données. Le
choix entre la réplication synchrone et asynchrone dépend des besoins de l'application :
Si la performance est prioritaire : asynchrone
Si l'intégrité et la cohérence des données sont essentielles : synchrone
Il est crucial de bien configurer et surveiller la réplication pour garantir un fonctionnement
optimal du système.