- Une extension de réplication active-active pour PostgreSQL, créée et publiée par AWS
- Lorsqu’il est nécessaire d’écrire et de modifier des données sur plusieurs instances PostgreSQL, il est possible de mettre en place une architecture permettant des modifications simultanées et leur réplication sur plusieurs instances, au lieu du modèle actif-standby classique où une instance donnée est la seule à accepter les changements
- Adapté à des scénarios tels qu’une base de données hautement disponible sur plusieurs régions, la réduction de la latence d’écriture, les mises à jour blue/green d’une application ou encore la migration bidirectionnelle de données
- S’appuie sur la réplication logique pour prendre en charge la détection des conflits, la résolution des conflits d’écriture et la conversion du format de la base de données cible
Concept de réplication active-active
- La réplication (Replication) est une technologie qui synchronise les modifications entre bases de données
- Dans l’architecture actif-standby classique de PostgreSQL, une seule instance accepte les modifications tandis que les autres sont en lecture seule, ce qui en fait une source de données unique
- pgactive fournit une topologie de réplication active-active qui permet l’écriture simultanée de données sur plusieurs instances
- Cette approche convient aux environnements nécessitant plusieurs points d’écriture, comme les déploiements multi-région ou les migrations bidirectionnelles
- Le modèle active-active nécessite une gestion spécifique des conflits, de la latence et de certaines limitations fonctionnelles
Technologie clé : réplication logique
- La réplication logique (Logical Replication) transmet les données dans un format interprétable par des systèmes externes
- Grâce à la réplication logique, il est possible d’implémenter diverses fonctions supplémentaires dans la base cible, comme la détection des conflits, la résolution des conflits d’écriture ou la transformation des requêtes
- PostgreSQL a introduit une réplication logique native en 2017 avec la version 10, mais la réplication active-active nécessite des fonctionnalités supplémentaires
- En raison des caractéristiques de conception de PostgreSQL, ces fonctionnalités peuvent être développées et appliquées sous forme d’extension
- La communauté de développement PostgreSQL ajoute elle aussi progressivement ces capacités au projet principal
1 commentaires
Avis Hacker News
Le tout premier, et toujours open source aujourd’hui, est BDR1 (lien), et pgactive en est dérivé
BDR2 était une réécriture de BDR1 en closed source, puis a fini par être abandonné
pglogical v1 et v2 (tous deux open source, lien) sont ensuite sortis, et la v1 a été largement remaniée avant d’être intégrée à Postgres 10
Fort de l’expérience de la réplication logique de Postgres 10, 2nd Quadrant a lancé le développement de pglogical v2, d’où est aussi issu pgEdge
Ensuite, 2nd Quadrant a créé les versions closed source pglogical v3 et BDR v3, qui ont ensuite été fusionnées dans BDR v4
Le nom du produit BDR a ensuite été changé en Postgres Distributed (PGD, lien)
Après le rachat de 2ndQuadrant par EDB, EDB a publié PGD v6
En cas de conflit, c’est la dernière valeur écrite selon l’horodatage qui est finalement appliquée
L’historique des conflits est conservé dans une table spéciale appelée
pgactive_conflict_history, ce qui permet d’inspecter l’historique et de les résoudre manuellementVoir ici pour plus de détails et la documentation
Si cette fonctionnalité pouvait être officiellement intégrée à Postgres, ce serait intéressant
Par exemple, lire les données de production ou de staging, mais pouvoir les modifier uniquement en local, sans que ces résultats ne soient répercutés en amont
Aujourd’hui, le plus courant semble être de créer périodiquement des snapshots via des scripts (cron, etc.) en envoyant des dumps ou des requêtes, de les stocker sur S3, puis de les récupérer en local pour restaurer les données
Cette méthode fonctionne généralement bien, sauf quand la construction des index prend beaucoup trop de temps
Les enjeux juridiques et éthiques étant importants, la plupart des entreprises ne recommandent pas cette approche
Cela permet de modifier uniquement les tables locales sans impact sur le primary
La commande
createdb --templateest recommandéeIl ne voit pas de stratégie de fusion applicable à tous les cas
Ce n’est pas que les écritures soient bloquées sur la replica, c’est simplement que leur résultat ne se propage pas ailleurs
Le mieux est de concevoir l’architecture de sorte qu’il n’y ait pas de chevauchement des zones d’écriture entre les instances actives
Dans ce cas, un outil comme pgactive peut être utile
Sinon, mieux vaut partir directement sur une base de données distribuée comme Yugabyte
Tous les masters peuvent lire tous les schémas, mais chacun n’écrit que sur sa propre partie
Quelqu’un demande si, au lieu des schémas, on pourrait aussi répartir les responsabilités via des partitions ou autre
On ne voit pas immédiatement dans quel produit maison cette fonctionnalité serait utilisée
RDS utilise la block replication, Aurora une SAN replication propriétaire
L’hypothèse est que cela pourrait servir du côté de DMS
Ils se demandent pourquoi faire cela avec une base relationnelle fortement ACID
Mais il y a un mois, elle a été officiellement publiée en open source pour la communauté (annonce officielle)
Pour bien dormir la nuit, mieux vaut l’éviter autant que possible
La combinaison patroni+etcd+haproxy est souvent recommandée, et vu l’enthousiasme de ceux qui l’ont utilisée, il doit y avoir une bonne raison
Cela dit, quand on regarde les fichiers d’exemple en docker compose, ça peut sembler un peu intimidant
pgpool paraît plus simple puisqu’il semble suffire de le placer devant chaque Postgres
Je serais curieux d’avoir des recommandations ou retours d’expérience de gens qui aiment Postgres en production
L’objectif est de monter, aussi simplement que possible avec docker compose, un cluster offrant haute disponibilité, pertes minimales voire nulles, et restauration à un instant donné
<i>Pgactive: Active-Active Replication Extension for PostgreSQL on Amazon RDS</i>
Post Hacker News (post d’octobre 2023, 1 commentaire)
Autrement dit, il faut accepter les avantages et inconvénients selon son contexte