Vous n'êtes pas identifié(e).
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
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
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
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
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
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