PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 08/03/2012 11:59:26

mlecot
Membre

problème replication avec postgresql 8.3

bonjour,
j'essaie de tester la replication avec la version 8.3 de postgresql.
pour ce faire j'ai un service "replication" sur la machine slave qui la lance.
ce service positionne sur le maitre l'archiving par une commande ssh :
archive_mode = on
                                # (change requires restart)
archive_command = '/usr/bin/archivage.sh %p %f'
puis relance le service.   

le script /usr/bin/archivage.sh  fait notamment:
scp $p ${SLAVE}:/var/lib/pgsql/xlog_maitre/$f et logge le resultat dans un fichier de log.

le service replication sur l'esclave lance un backup sur le maitre par un script qui execute les actions suivantes:
psql -c "SELECT pg_start_backup('label')" postgres
scp -r /var/lib/pgsql/data ${SLAVE}:/var/lib/pgsql &> $LOG
psql -c "SELECT pg_stop_backup()" postgres &> $LOG

puis copy le fichier recovery.conf sur le repertoire /var/lib/pgsql/data de l'esclave
(contenu du fichier :  )
restore_command = '/usr/bin/restauration.sh %f %p'

/usr/bin/restauration.sh:
#!/bin/sh
#


f=$1
p=$2

MASTER="arm-db"
SLAVE="arm-sp"
DATE=$(date +"%Y-%m-%d %H:%M:%S")
LOG=/var/log/postgresql/restauration.log
LOGDEBUG=/var/log/postgresql/restaurationDebug.log

pg_standby -k 100 -t /tmp/stopstandby /var/lib/pgsql/xlog_maitre $f $p >> $LOGDEBUG
RETVAL=$?

if $RETVAL -eq 0
then
  echo "$DATE LOG : journal $f restauration " >> $LOG
else
  echo "$DATE ERROR : journal $f restauration problem" >> $LOG
fi

le service de replication lance enfin le service postgres sur l'esclave.




Ce que je constate est:
les fichiers WAL sont bien envoyés sur l'esclave, mais ne sont pas correctement traités par celui ci
Dans mon fichier restauration.log , j'ai en effet :
2012-03-08 09:26:45 ERROR : journal 0000000100000000000000AF restauration problem
la commande pg_standby retourne une valeur différente de 0
Par contre, dans le fichier LOGDEBUG=/var/log/postgresql/restaurationDebug.log
je ne vois aucune ligne
Comment puis-je diagnostiquer pourquoi j'ai un problème de restauration ?

Merci de votre aide.

Hors ligne

#2 08/03/2012 12:16:36

Marc Cousin
Membre

Re : problème replication avec postgresql 8.3

Vous pouvez déjà commencer par rajouter un 2>&1 à la fin de votre commande pg_standby pour récupérer aussi son stderr dans $LOGDEBUG, cela vous permettra peut-être de récupérer le message d'erreur.

Sinon, difficile de vous dire comme ça ce qui ne va pas. Ça semble être bon, mais en script shell, chaque caractère compte et peut être la cause d'une erreur smile


Marc.

Hors ligne

#3 08/03/2012 15:22:22

mlecot
Membre

Re : problème replication avec postgresql 8.3

avec le 2>&1 positionné, j'ai le massage suivant dans le fichier /var/log/postgresql/RestaurationDebug.log:
cp: cannot stat `/var/lib/pgsql/xlog_maitre/00000001.history': No such file or directory
cp: cannot stat `/var/lib/pgsql/xlog_maitre/00000001.history': No such file or directory

ce fichier n'est pas contenu dans le pg_xlog du maitre
Pourquoi pg_standby cherche t il a acceder à ce fichier ?

Il semblerait cependant que malgré ce compte rendu negatif du retour de pg_standby,
les wal buffers soient bien copiés dans la database esclave, si j'arrête le processus de replication

Dernière modification par mlecot (08/03/2012 15:42:30)

Hors ligne

#4 08/03/2012 15:30:34

Marc Cousin
Membre

Re : problème replication avec postgresql 8.3

Ah. C'est un bug (mineur, la plupart du temps) de la 8.3, ça a été corrigé depuis. Effectivement, il faudra prévoir d'ignorer ce fichier dans votre script.

À chaque fois qu'on fait une récupération partielle (un PITR) et qu'on ouvre la base, ça crée une nouvelle timeline, donc un nouveau fichier history. Sauf évidemment pour la timeline 1, qui est celle créée au départ. Le fichier 000001.history n'existe pas, mais c'est normal. PostgreSQL lui même ignore cette erreur. Donc soit vous vérifiez dans votre script qu'on vous demande ce fichier, et vous l'ignorez, soit vous vous arrangez pour que votre script retourne $RETVAL comme code retour, que PostgreSQL puisse s'en sortir. Le code retour de ces scripts est capital.


Marc.

Hors ligne

#5 08/03/2012 16:05:00

mlecot
Membre

Re : problème replication avec postgresql 8.3

Merci beaucoup pour cette réponse claire et rapide

Hors ligne

Pied de page des forums