DBAtlas · Atlas d'exploitation des bases de données

Réintégrer l'ancienne primaire comme réplique après un failover avec pg_rewind

PostgreSQLRéplication

Commande

# Prerequisite (must be set BEFORE the incident): wal_log_hints = on OR data checksums; full_page_writes = on
pg_controldata $PGDATA | grep -E 'wal_log_hints|checksum'
# 1) The old primary must be stopped:
pg_ctl -D $PGDATA stop -m fast
# 2) Dry run first:
pg_rewind --target-pgdata=$PGDATA --source-server='host=<new_primary_host> port=5432 user=postgres dbname=postgres' --progress --dry-run
# 3) Actual rewind + standby configuration (standby.signal + primary_conninfo):
pg_rewind --target-pgdata=$PGDATA --source-server='host=<new_primary_host> port=5432 user=postgres dbname=postgres' --progress --write-recovery-conf
# 4) Review postgresql.auto.conf copied from the source (port, primary_slot_name), then start:
pg_ctl -D $PGDATA start

Ce que fait la commande

Rend le répertoire de données de l'ancienne primaire cohérent avec la nouvelle primaire en copiant depuis celle-ci les blocs modifiés après le point de divergence de timeline ; en fait une réplique en quelques minutes sans basebackup complet.

Quand l'utiliser

Lorsque l'ancienne primaire revient après un failover/une promotion et se trouve en retard sur la nouvelle timeline avec des changements divergents.

Attention

Les transactions restées sur l'ancienne primaire après le failover et jamais parvenues à la nouvelle primaire sont définitivement supprimées. pg_rewind copie aussi les fichiers de configuration (postgresql.conf, postgresql.auto.conf, pg_hba.conf) depuis la source ; corrigez les réglages de port et de slot avant de démarrer. Si le WAL nécessaire depuis le point de divergence n'est plus sur la source, récupérez-le depuis l'archive avec -c (--restore-target-wal). La connexion source nécessite un superutilisateur ou un rôle disposant des privilèges sur les fonctions listés dans la documentation. Dans Patroni, cela se fait automatiquement avec use_pg_rewind: true.

Ouvrir dans DBAtlas →

Voir aussi