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 29/09/2021 17:54:43

cdelarue
Membre

Le server construit en réplication refuse de démarer

Bonjour,

J'ai un serveur postgresql-12 version 12.7 sur un serveur

Je démarre une instance en mode réplication sur un autre server

bash $ pg_basebackup -h 172.16.18.201 -U repli --format=p --wal-method=stream --progress --write-recovery-conf -D $PGDATA 
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/1F000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created temporary replication slot "pg_basebackup_23935"
43875/43875 kB (100%), 1/1 tablespace                                         
pg_basebackup: write-ahead log end point: 0/1F000100
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: base backup completed

La commande se passe bien tous les fichiers sont récupérés

Lors du démarrage du serveur, cela se passe mal
Le démarrage de ce serveur de backup est refusé

 bash $ sudo systemctl start postgresql-12 

... les log de démarrage

2021-09-29 19:30:13 +04 [22855]: db=,user=,app=,client=LOG:  database system was interrupted; last known up at 2021-09-29 19:30:09 +04
2021-09-29 19:30:14 +04 [22855]: db=,user=,app=,client=LOG:  restored log file "00000002.history" from archive
rsync: link_stat "/data/sadm/postgresql-archivedir/00000003.history" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1651) [Receiver=3.1.2]
rsync: [Receiver] write error: Broken pipe (32)
2021-09-29 19:30:14 +04 [22855]: db=,user=,app=,client=LOG:  entering standby mode
2021-09-29 19:30:14 +04 [22855]: db=,user=,app=,client=LOG:  restored log file "00000002.history" from archive
rsync: link_stat "/data/sadm/postgresql-archivedir/00000002000000000000001F" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1651) [Receiver=3.1.2]
rsync: [Receiver] write error: Broken pipe (32)
2021-09-29 19:30:15 +04 [22855]: db=,user=,app=,client=LOG:  restored log file "00000001000000000000001F" from archive
2021-09-29 19:30:15 +04 [22855]: db=,user=,app=,client=FATAL:  requested timeline 2 is not a child of this server's history
2021-09-29 19:30:15 +04 [22855]: db=,user=,app=,client=DETAIL:  Latest checkpoint is at 0/1F000060 on timeline 1, but in the history of the requested timeline, the server forked off from that timeline at 0/9000000.
2021-09-29 19:30:15 +04 [22847]: db=,user=,app=,client=LOG:  startup process (PID 22855) exited with exit code 1
2021-09-29 19:30:15 +04 [22847]: db=,user=,app=,client=LOG:  aborting startup due to startup process failure
2021-09-29 19:30:15 +04 [22847]: db=,user=,app=,client=LOG:  database system is shut down

La configuration du serveur pour la réplication et le wal est la même sur les deux machines (j'ai supprimé les variables qui n'ont pas été changé par nos soins).

Le serveur main copie en local les fichiers WAL /data/sadm/postgresql-archivedir/ et le serveur de backup les récupère avec un rsync.

Le serveur de backup fait le ménage avec une commande ssh sur le serveur main.

Le serveur principal tourne en mode main

 bash $ systemctl status postgresql-12
● postgresql-12.service - PostgreSQL 12 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-12.service; enabled; vendor preset: disabled)
   Active: active (running) since mer. 2021-09-29 17:50:15 +04; 2h 10min ago
     Docs: https://www.postgresql.org/docs/12/static/
  Process: 4796 ExecStartPre=/usr/pgsql-12/bin/postgresql-12-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 4802 (postmaster)
   CGroup: /system.slice/postgresql-12.service
           ├─4802 /usr/pgsql-12/bin/postmaster -D /var/lib/pgsql/12/data/
           ├─4804 postgres: logger   
           ├─4806 postgres: checkpointer   
           ├─4807 postgres: background writer   
           ├─4808 postgres: walwriter   
           ├─4809 postgres: autovacuum launcher   
           ├─4810 postgres: archiver   last was 000000010000000000000021.00000028.backup
           ├─4811 postgres: stats collector   
           └─4812 postgres: logical replication launcher   

Voici la config postgresql.conf

#------------------------------------------------------------------------------
# WRITE-AHEAD LOG
#------------------------------------------------------------------------------

# - Settings -

#checkpoint_timeout = 5min		# range 30s-1d
max_wal_size = 1GB
min_wal_size = 80MB

# - Archiving -

archive_mode = 'on'
				# (change requires restart)
archive_command = 'test ! -f /data/sadm/postgresql-archivedir/%f && cp %p /data/sadm/postgresql-archivedir/%f'
				# placeholders: %p = path of file to archive
				#               %f = file name only
				# e.g. 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
# - Archive Recovery -

# These are only used in recovery mode.

restore_command = 'rsync -a 172.16.18.201:/data/sadm/postgresql-archivedir/%f %p'
				# placeholders: %p = path of file to restore
				#               %f = file name only
				# e.g. 'cp /mnt/server/archivedir/%f %p'
				# (change requires restart)
archive_cleanup_command = 'echo pg_archivecleanup -d /data/sadm/postgresql-archivedir %r | ssh 172.16.18.201 "bash -ls"'


#------------------------------------------------------------------------------
# REPLICATION
#------------------------------------------------------------------------------

# - Sending Servers -

# Set these on the master and on any standby that will send replication data.


primary_conninfo = 'host=172.16.18.201 user=repli'
					# (change requires restart)

Dernière modification par cdelarue (29/09/2021 18:03:10)

Hors ligne

#2 30/09/2021 21:55:39

gleu
Administrateur

Re : Le server construit en réplication refuse de démarer

Le serveur était sur la timeline 1. Il a tenté de passer sur la timeline 2, il a récupéré le fichier history pour ça. Cependant, il n'a pas trouvé de journaux de transactions pour la TL 2, donc il est resté sur le TL 1 mais apparemment la TL 2 était demandé (certainement à cause de la configuration mais le peu de config indiqué ici ne le montre pas). La TL 2 n'était pas disponible mais réclamé, le serveur n'a pas eu d'autre choix que de s'arrêter en erreur.

C'est en tout cas comme ça que j'interprète les logs.


Guillaume.

Hors ligne

#3 01/10/2021 06:26:27

rjuju
Administrateur

Re : Le server construit en réplication refuse de démarer

De ce que je vois la timeline 2 existe et a été trouvée, mais la sauvegarde ne correspond pas cet historique.


J'ai l'impression que la restore_command récupère les mauvais fichiers, ou que le serveur source a été promu puis repassé en timeline 1.

Hors ligne

#4 01/10/2021 08:20:32

ruizsebastien
Membre

Re : Le server construit en réplication refuse de démarer

bonjour,

on ne le voit pas ici dans ce post mais il est possible que ce soit du à la valeur de recovery_target_timeline (j'ai eu un cas similaire récemment).
Selon sa valeur dans recovery.conf, cela peut avoir des effets indésirés.
Sinon comme le dit rjuju, il est probable qu'il manque des fichiers dans le backup.


Cordialement,

Sébastien.

Hors ligne

Pied de page des forums