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

#1 25/04/2016 20:42:41

ced
Membre

Problème de streaming replication : l'esclave ne démarre pas

Bonjour,

Je teste, pour le moment en local, la mise en place d'une réplication par streaming.
Je suis sous PostgreSQL 9.5, sous Linux Mint.

Je simule le fonctionnement d'un maître et d'un esclave par deux instances différentes de postgresql sur deux ports différents (5432 pour le maître, 5433 pour l'esclave).

J'ai créé un répertoire destiné à l'archivage : /var/lib/postgresql/9.5/archives
Pour le serveur maître, j'ai placé les paramètres de réplication dans un fichier postgresql.replication.conf, appelé par le fichier postgresql.conf (comme ça, je peux contrôler à part ce qui concerne la réplication). Les paramètres de ce fichier sont les suivants :
wal_level = 'hot_standby'
max_wal_senders = 5
archive_mode = on
archive_command = 'rsync %p /var/lib/postgresql/9.5/archives/%f'

J'ai créé un utilisateur dédié à la réplication, que j'ai appelé "replitest". Il se connecte sans problème, via psql, à l'instance maître. J'ai ajouté une ligne dans le pg_hba.conf du serveur maître comme suit :
host     replication      replitest      127.0.0.1/32      md5

Le maître a redémarré sans souci et l'archivage des journaux fonctionne.

J'ai ensuite créé un serveur esclave à l'aide de l'outil pg_basebackup, comme suit :
sudo -u postgres pg_basebackup -D /home/CDuprez/PostgreSQL/9.5/esclave -P -h 127.0.0.1 -U replitest

J'ai recopié les fichiers de configuration du maître vers l'esclave, en prenant soin d'enlever le pointage vers le fichier postgresql.replication.conf...
J'ai mis à jour le postgresql.conf de l'esclave comme suit :
data_directory = '/home/CDuprez/PostgreSQL/9.5/esclave'
hba_file = '/etc/postgresql/9.5/esclave/pg_hba.conf'
ident_file = '/etc/postgresql/9.5/esclave/pg_ident.conf'
external_pid_file = '/var/run/postgresql/9.5-esclave.pid'
port = 5433

Donc, normalement, il devrait être configuré comme il faut.
Ce serveur est bien détecté, en vérifiant avec pg_lsclusters.

J'ai configuré, sur le serveur esclave, un fichier replication.conf avec les paramètres suivants :
restore_command = 'rsync /var/lib/postgresql/9.5/archives/%f %p'
standby_mode = on
primary_conninfo = 'host=127.0.0.1 port=5432 user=replitest password=mon_passe'
trigger_file = '/tmp/esclave_autonome'

Mais le démarrage du serveur esclave pose problème. J'ai le message d'erreur suivant :
Warning: connection to the database failed, disabling startup checks:
psql: FATAL:  le système de bases de données se lance

Dans les logs de l'esclave, voici ce qu'on observe :
rsync: link_stat "/var/lib/postgresql/9.5/archives/000000010000000400000030" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.0]
2016-04-25 20:16:36 CEST [1486-1] LOG:  Commence le flux des journaux depuis le principal à 4/30000000 sur la timeline 1
2016-04-25 20:37:02 CEST [1288-1] LOG:  a reçu une demande d'arrêt intelligent
2016-04-25 20:37:02 CEST [1486-2] FATAL:  arrêt du processus walreceiver suite à la demande de l'administrateur
2016-04-25 20:37:02 CEST [1329-1] LOG:  arrêt en cours
2016-04-25 20:37:02 CEST [1329-2] LOG:  le système de base de données est arrêté
2016-04-25 20:37:03 CEST [8548-1] LOG:  le système de bases de données a été arrêté pendant la restauration à 2016-04-25 20:37:02 CEST
2016-04-25 20:37:03 CEST [8548-2] LOG:  entre en mode standby
rsync: link_stat "/var/lib/postgresql/9.5/archives/000000010000000400000030" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.0]
2016-04-25 20:37:03 CEST [8548-3] LOG:  état de restauration cohérent atteint à 4/30000370
2016-04-25 20:37:03 CEST [8548-4] LOG:  la ré-exécution commence à 4/30000370
2016-04-25 20:37:03 CEST [8548-5] LOG:  longueur invalide de l'enregistrement à 4/30000450
2016-04-25 20:37:03 CEST [8555-1] LOG:  Commence le flux des journaux depuis le principal à 4/30000000 sur la timeline 1
2016-04-25 20:37:04 CEST [8557-1] [inconnu]@[inconnu] LOG:  paquet de démarrage incomplet
2016-04-25 20:37:04 CEST [8560-1] postgres@postgres FATAL:  le système de bases de données se lance
2016-04-25 20:37:05 CEST [8563-1] postgres@postgres FATAL:  le système de bases de données se lance
2016-04-25 20:37:05 CEST [8566-1] postgres@postgres FATAL:  le système de bases de données se lance
2016-04-25 20:37:06 CEST [8570-1] postgres@postgres FATAL:  le système de bases de données se lance
2016-04-25 20:37:06 CEST [8573-1] postgres@postgres FATAL:  le système de bases de données se lance
2016-04-25 20:37:07 CEST [8576-1] postgres@postgres FATAL:  le système de bases de données se lance
2016-04-25 20:37:07 CEST [8579-1] postgres@postgres FATAL:  le système de bases de données se lance
2016-04-25 20:37:08 CEST [8582-1] postgres@postgres FATAL:  le système de bases de données se lance
2016-04-25 20:37:08 CEST [8585-1] postgres@postgres FATAL:  le système de bases de données se lance
2016-04-25 20:37:09 CEST [8598-1] postgres@postgres FATAL:  le système de bases de données se lance
2016-04-25 20:37:09 CEST [8604-1] postgres@postgres FATAL:  le système de bases de données se lance
2016-04-25 20:37:09 CEST [8605-1] [inconnu]@[inconnu] LOG:  paquet de démarrage incomplet

Effectivement, dans le répertoire d'archivage, il n'y a pas de fichier 000000010000000400000030...

D'où peut venir le problème ? Comment l'esclave récupère-t-il le nom des journaux à rejouer ?

Merci pour votre aide,

Cédric

Hors ligne

#2 25/04/2016 23:20:01

rjuju
Administrateur

Re : Problème de streaming replication : l'esclave ne démarre pas

Bonjour,

Je pense que vous avez tout simplement omis d'indiquer «hot_standby = on » dans le postgresql.conf du nouveau serveur secondaire.

Hors ligne

#3 26/04/2016 09:38:34

ced
Membre

Re : Problème de streaming replication : l'esclave ne démarre pas

Eh oui ! C'était aussi simple que ça !
Merci beaucoup.

Hors ligne

Pied de page des forums