La réplication a échoué; comment recommencer?

10

J'utilise Postgres 9.1.6 sur Ubuntu et j'ai une configuration de réplication en streaming entre un maître et un esclave. Tout s'est bien déroulé jusqu'à ce que la base de données tombe en panne et nous avons dû redémarrer les deux boîtes.

Maintenant, la réplication s'est arrêtée et lors de la vérification des journaux sur les deux cases, je vois ce message:

CDT FATAL: le segment WAL demandé 0000000100000224000000FA a déjà été supprimé

C'est le même segment encore et encore. D'après ma recherche sur Google, il semblerait que le serveur de réplication essaie de récupérer ce segment du maître, mais il n'est plus là. D'accord, mais comment contourner cela? Dois-je effectuer une nouvelle sauvegarde et rsync sur l'esclave? Existe-t-il un moyen facile de synchroniser l'esclave?

Mark Hoffman
la source

Réponses:

7

Oui, vous devrez donner à l'esclave une nouvelle sauvegarde de base (pour la réplication en streaming uniquement les étapes 1 à 4) du maître.

Votre problème est probablement survenu car la valeur de wal_keep_segments est trop faible. La valeur doit être suffisamment élevée pour que lorsque l'esclave est hors service pendant un certain temps, le maître ne commence pas à recycler les segments que l'esclave n'a pas encore traités.

Eelke
la source
1

Veuillez vérifier que les WAL requis se trouvent à l'emplacement à partir duquel vous effectuez la restauration pour la restauration initiale avant de connecter l'esclave à l'hôte principal en mode streaming.

Votre problème peut se produire lorsqu'un morve de biche de segment WAL existe à l'emplacement à partir duquel vous effectuez la restauration pour la récupération initiale.

Si tout va bien dans ce cas, vous devez vérifier la commande restore_command dans recovery.conf.

Kishor Hargude
la source
0

un autre travail consiste à faire wal backup_push à partir du primaire et à faire immédiatement un backip_fetch à partir de l'esclave de secours et à démarrer le secours.

Nathn
la source
2
Veuillez expliquer pourquoi ce processus fonctionne
RolandoMySQLDBA