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 04/04/2014 10:46:26

JeanL
Membre

Standby serveur ne trouve pas le fichier wal : cp: cannot stat

Bonjour,

Mon serveur master et standby  est en 9.3.4 sous CentOS 6.5
La config du master est :
wal_level = hot_standby                 # minimal, archive, or hot_standby
archive_mode = on               # allows archiving to be done
archive_command = 'rsync -ahv %p standbyhost:/pgdata/PG_MD2_DEV/archive_xlog/%f'

La config du standby est :
wal_level = hot_standby                 # minimal, archive, or hot_standby
archive_mode = off               # allows archiving to be done
archive_command = 'rsync -ahv %p standbyhost:/pgdata/PG_MD2_DEV/archive_xlog/%f'

Le recovery.conf du standby est:
standby_mode = 'on'
primary_conninfo = 'host=masterhost port=5432 user=repliuser password=XXX'
trigger_file = '/pgdata/PG_MD2_DEV/data/trigger_failover.txt'
restore_command = 'cp -p /pgdata/PG_MD2_DEV/archive_xlog/%f "%p"'
archive_cleanup_command = 'pg_archivecleanup /pgdata/PG_MD2_DEV/archive_xlog %r'


Le rync fonctionne bien.

Quand je démarre mon standby, j'ai cette erreur dans la log
2014-04-04 10:24:47 CEST [8181]: [4-1] LOG:  database system is ready to accept read only connections
cp: cannot stat `/pgdata/PG_MD2_DEV/archive_xlog/000000020000000000000011': No such file or directory

Le fichier /pgdata/PG_MD2_DEV/archive_xlog/000000020000000000000011 n'existe pas :
ls: cannot access /pgdata/PG_MD2_DEV/archive_xlog/000000020000000000000011: No such file or directory

Puisqu'il a été copié dans /pgdata/PG_MD2_DEV/data/pg_xlog par la commande restore_command :
ls -l /pgdata/PG_MD2_DEV/data/pg_xlog/000000020000000000000011
-rw------- 1 postgres postgres 16777216 Apr  4 10:24 /pgdata/PG_MD2_DEV/data/pg_xlog/000000020000000000000011


Pouvez-vous m'aider à comprendre cette erreur et quelle action faut-il mener pour ne plus l'avoir ou alors on peut l'ignorer ?

Je vous remercie par avance de votre aide.

Jean

Hors ligne

#2 04/04/2014 11:40:59

ruizsebastien
Membre

Re : Standby serveur ne trouve pas le fichier wal : cp: cannot stat

Bonjour,

Si je ne me trompe pas le fichier /pgdata/PG_MD2_DEV/data/pg_xlog/000000020000000000000011 est le Wal courant, il n'a pas encore été archivé.
Donc la commande de recovery du slave essaie d'appliquer ce wal archivé qui n'existe pas encore, d'où l'erreur que vous pouvez ignorer.
C'est normal. De plus vous êtes en streaming replication.
Pour vérifier le bon fonctionnement du streaming :
---------------------------------------------------
sur le maitre :
SELECT usename,application_name,state,sync_state from pg_stat_replication;
ps -ef |grep sender
SELECT pg_current_xlog_location();
---------------------------------------------------
sur le slave :
select pg_last_xlog_receive_location();
ps -ef |grep receiver
---------------------------------------------------
Et comparez les valeurs pour voir s'il n'y a pas de décalage.


Cordialement,

Sébastien.

Hors ligne

#3 04/04/2014 12:17:04

JeanL
Membre

Re : Standby serveur ne trouve pas le fichier wal : cp: cannot stat

Merci d'avoir répondu.
Je n'ai pas été très clair en fait.
J'ai nommé mon serveur master PG_MD1_DEV et mon standby PG_MD2_dev.
Du côté Master, j'ai configuré l'archive des xlog pour qu'elles aillent dans un répertoire sur la machine standbyhost :
archive_command = 'rsync -ahv %p standbyhost:/pgdata/PG_MD2_DEV/archive_xlog/%f'
Donc les archives des xlog du master vont dans standbyhost:/pgdata/PG_MD2_DEV/archive_xlog

Le standby trouve bien le fichier /pgdata/PG_MD2_DEV/archive_xlog/000000020000000000000011 pour le copier dans /pgdata/PG_MD2_DEV/data/pg_xlog (restore_command = 'cp -p /pgdata/PG_MD2_DEV/archive_xlog/%f "%p"') puisque le fichier existe bien dans ce dernier répertoire.

Mais alors pourquoi Postgres dit qu'il ne trouve pas le fichier dans /pgdata/PG_MD2_DEV/archive_xlog/000000020000000000000011 ?

Hors ligne

#4 04/04/2014 12:33:11

ruizsebastien
Membre

Re : Standby serveur ne trouve pas le fichier wal : cp: cannot stat

C'est un message normal.
Lors du recovery initial, postgres applique toutes les archives jusqu'à la dernière (donc chez vous : 000000020000000000000010) il affiche le message d'erreur normal comme quoi il ne trouve pas le n° 000000020000000000000011.
Ensuite il applique les Wal sous forme de flux (streaming), il n'a donc plus besoin des archives.
Logiquement ce message d'erreur n'est apparu qu'un seule fois dans vos traces, n'est ce pas ?


Cordialement,

Sébastien.

Hors ligne

#5 04/04/2014 12:42:00

ruizsebastien
Membre

Re : Standby serveur ne trouve pas le fichier wal : cp: cannot stat

petite précision concernant l'archive_command de votre master.
Si j'étais vous je ferais un script qui envoie les wal archivés à la fois dans le répertoire archive du master et dans celui du slave.
sinon vous n'aurez pas de copie de vos archives dans votre serveur master (et donc comment faire de la restauration PITR dans ce cas ?).


Cordialement,

Sébastien.

Hors ligne

#6 04/04/2014 14:06:46

JeanL
Membre

Re : Standby serveur ne trouve pas le fichier wal : cp: cannot stat

Sébastien,

Effectivement l'erreur n'apparaît qu'une seule fois au démarrage du standby.
Pour ce projet, le PITR n'est pas nécessaire mais je retiens votre idée pour d'autres projets qui vont venir.
Je vous remercie beaucoup de votre aide et vous souhaite un bon weekend.

Cdt

Hors ligne

Pied de page des forums