Aller au contenu

pg rewind

Warning

Cette documentation est un travail en cours

Introduction

Pg_rewind(https://docs.postgresql.fr/current/app-pgrewind.html) est un outil introduit dans PostgreSQL 9.5.

Il permet de synchroniser le répertoire de données de PostgreSQL dans un autre répertoire de données copié à partir de celui-ci.

Cette fonctionnalité est particulièrement utile lorsque vous souhaitez resynchroniser une ancienne instance primaire à partir de la nouvelle instance primaire fraîchement promue. C’est une action nécessaire après une bascule sur incident (failover), afin de pouvoir réintroduire l’ancienne instance primaire dans la réplication en tant qu’instance secondaire.

L’avantage de pg_rewind par rapport à une copie de fichiers classique (par exemple avec rsync) est qu’il ne relit pas les blocs non modifiés de l’instance. Il est donc particulièrement efficace quand les deux instances n’ont pas beaucoup divergé, car le volume de blocs à synchroniser sera faible..

Fonctionnement

L’idée de base est de copier toutes les modifications de fichiers au niveau système de fichiers de l’instance source (celle qui sert de référence) vers l’instance cible (celle que l’on veut resynchroniser, par exemple l’ancienne instance primaire) :

  • Parcourir les journaux de transactions de l’instance cible, en commençant du dernier checkpoint avant le moment où l’historique de timeline de l’instance source a dévié de celle de l’instance cible. Pour chaque enregistrement dans les journaux de transactions, enregistrer chaque bloc de données modifié. Ceci a pour résultat une liste de tous les blocs de données modifiés dans l’instance cible, après la séparation avec l’instance source.
  • Copier tous les blocs modifiés de l’instance source vers l’instance cible, soit en utilisant un accès direct au système de fichiers (--source-pgdata) soit en SQL (--source-server).
  • Copier tous les autres fichiers, tels que pg_xact et les fichiers de configuration de l’instance source vers l’instance cible (sauf les fichiers des relations).
  • Appliquer les enregistrements des journaux de transactions provenant de l’instance source, en commençant à partir du checkpoint créé au moment du failover. (En fait, pg_rewind n’applique pas les journaux de transactions. Il crée simplement un fichier backup_label qui fera en sorte que PostgreSQL démarre en rejoutant les enregistrements des journaux de transactions à partir de ce checkpoint.)

Important

Lorsque pg_rewind est lancé, les fichiers de configuration tels que postgresql.conf et recovery.conf seront écrasées dans le répertoire PGDATA de la source cible.<!–

Note

Il est possible d’utiliser l’option --dry-run ou -n de pg_rewind afin d’exécuter la commande sans effectuer aucune modification et vérifier que la procédure se déroule correctement.

Prérequis

Avant d’utiliser l’outil pg_rewind, il est nécessaire de vérifier certains prérequis :