Solutions de réplication

Module W1

Dalibo SCOP

24.09

29 août 2024

Sur ce document

Formation Module W1
Titre Solutions de réplication
Révision 24.09
PDF https://dali.bo/w1_pdf
EPUB https://dali.bo/w1_epub
HTML https://dali.bo/w1_html
Slides https://dali.bo/w1_slides

Licence Creative Commons CC-BY-NC-SA

Cette formation est sous licence CC-BY-NC-SA. Vous êtes libre de la redistribuer et/ou modifier aux conditions suivantes :

  • Paternité
  • Pas d’utilisation commerciale
  • Partage des conditions initiales à l’identique

Marques déposées

PostgreSQL® Postgres® et le logo Slonik sont des marques déposées par PostgreSQL Community Association of Canada.

Versions de PostgreSQL couvertes

Ce document ne couvre que les versions supportées de PostgreSQL au moment de sa rédaction, soit les versions 12 à 16.

Solutions de réplication

PostgreSQL

Préambule

  • Attention au vocabulaire !
  • Identifier le besoin
  • Keep It Simple…

Au menu

  • Rappels théoriques
  • Réplication interne
    • réplication physique
    • réplication logique
  • Quelques logiciels externes de réplication
  • Alternatives

Objectifs

  • Identifier les différences entre les solutions de réplication proposées
  • Choisir le système le mieux adapté à votre besoin

Rappels théoriques

  • Termes
  • Réplication
    • synchrone / asynchrone
    • symétrique / asymétrique
    • diffusion des modifications

Cluster, primaire, secondaire, standby

  • Cluster : ambiguïté !
    • groupe de bases de données = 1 instance (PostgreSQL)
    • groupe de serveurs (haute disponibilité et/ou réplication)
  • Pour désigner les membres :
    • Primaire/primary
    • Secondaire/standby

Réplication asynchrone asymétrique

  • Asymétrique
    • écritures sur un serveur primaire unique
    • lectures sur le primaire et/ou les secondaires
  • Asynchrone
    • les écritures sur les serveurs secondaires sont différées
    • perte de données possible en cas de crash du primaire
  • Exemples :
    • réplication par streaming, log shipping, trigger

Réplication asynchrone symétrique

  • Symétrique
    • « multimaître »
    • écritures sur les différents primaires
    • besoin d’un gestionnaire de conflits
    • lectures sur les différents primaires
  • Asynchrone
    • la réplication des écritures est différées
    • perte de données possible en cas de crash du serveur primaire
    • risque d’incohérences !
  • Exemples :
    • BDR (EDB) : réplication logique

Réplication synchrone asymétrique

  • Asymétrique
    • écritures sur un serveur primaire unique
    • lectures sur le serveur primaire et/ou les secondaires
  • Synchrone
    • les écritures sur les secondaires sont immédiates
    • le client sait si sa commande a réussi sur plusieurs serveurs

Réplication synchrone symétrique

  • Symétrique
    • écritures sur les différents serveurs primaires
    • besoin d’un gestionnaire de conflits
    • lectures sur les différents serveurs
  • Synchrone
    • les écritures sur les autres serveurs sont immédiates
    • le client sait si sa commande est validée sur plusieurs serveurs
    • risque important de lenteur !

Diffusion des modifications

  • Par requêtes
    • diffusion de la requête
  • Par triggers
    • diffusion des données résultant de l’opération
  • Par journaux, physique
    • diffusion des blocs disques modifiés
  • Par journaux, logique
    • extraction et diffusion des données résultant de l’opération depuis les journaux

Réplication interne physique

  • Réplication
    • asymétrique
    • asynchrone (défaut) ou synchrone (et selon les transactions)
  • Secondaires
    • non disponibles (Warm Standby)
    • disponibles en lecture seule (Hot Standby)
    • cascade
    • retard programmé

Log Shipping

  • But :
    • envoyer les journaux de transactions à un secondaire
  • Première solution disponible
  • Gros inconvénients :
    • perte possible de plusieurs journaux
    • latence à la réplication
    • penser à archive_timeout ou pg_receivewal

Streaming replication

  • But
    • avoir un retard moins important sur le serveur secondaire
  • Rejouer les enregistrements de transactions du serveur primaire par paquets
    • paquets plus petits qu’un journal de transactions

Warm Standby

  • Serveur de secours
    • prêt à prendre le relai du primaire
    • (presque) identique au primaire
  • Différentes configurations selon les versions
    • asynchrone ou synchrone
    • application immédiate ou retardée
  • En pratique, préférer le Hot Standby

Hot Standby

  • Serveur secondaire
    • accepte les connexions entrantes
    • requêtes en lecture seule et sauvegardes
    • prêt à prendre le relai du primaire
  • Différentes configurations selon les versions
    • asynchrone ou synchrone
    • application immédiate ou retardée

Exemple

Exemple d’architecture

Réplication interne

Réplication interne

Réplication en cascade

Réplication en cascade

Réplication interne logique

  • Réplique les changements
    • d’une seule base de données
    • d’un ensemble de tables défini
  • Principe Éditeur/Abonnés

Réplication logique - Fonctionnement

  • Création d’une publication sur un serveur
  • Souscription d’un autre serveur à cette publication
  • Limitations :
    • DDL, Large objects, séquences, tables étrangères et vues matérialisées non répliqués
    • peu adaptée pour un failover

Réplication externe

  • Outils les plus connus :
    • Pgpool
    • Slony, Bucardo (abandonnés)
    • pgLogical
  • Niches

Sharding

  • Répartition des données sur plusieurs instances
  • Évolution horizontale en ajoutant des serveurs
  • Parallélisation
  • Clé de répartition cruciale
  • Administration complexifiée
  • Sous PostgreSQL :
    • Foreign Data Wrapper
    • PL/Proxy
    • Citus (extension), et nombreux forks

Réplication bas niveau

  • RAID
  • DRBD
  • SAN Mirroring
  • À prendre évidemment en compte…

RAID

  • Obligatoire
  • Fiabilité d’un serveur
  • RAID 1 ou RAID 10
  • RAID 5 déconseillé (performances)
  • Lectures plus rapides
    • dépend du nombre de disques impliqués

DRBD

  • Simple / synchrone / Bien documenté
  • Lent / Secondaire inaccessible / Linux uniquement

SAN Mirroring

  • Comparable à DRBD
  • Solution intégrée
  • Manque de transparence

Conclusion

Quelle que soit la solution envisagée :

  • Bien définir son besoin
  • Identifier tous les SPOF
  • Superviser son cluster
  • Tester régulièrement les procédures de failover (Loi de Murphy…)

Questions

N’hésitez pas, c’est le moment !

Quiz