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 20/05/2016 09:44:16

mortimer.pw
Membre

Pg_basebackup : sauvegarde autonome

Bonjour,

Je travaille sur un moteur 9.5.2 sous Cent-OS 7.2. J'ai 2 VM pour moi jouer :-)

Je souhaite apprendre : l'archivage des WAL, la sauvegarde, le warm-standby, le hot-standby, le streaming replication.

J'ai activé l'archivage des WAL (vers mon serveur 2) :
        wal_level = archive
        archive_mode = on
        archive_command = 'ssh postgres@dev-postgres-02 test ! -f /home/postgres/PG_ARC/%f && scp %p dev-postgres-02:/home/postgres/PG_ARC/%f'
        archive_timeout = 1min

J'ai suivi la procédure suivante pour faire la sauvegarde :
          - Créér le Rôle REPLICATION : CREATE ROLE replic WITH PASSWORD 'ma_replic' REPLICATION LOGIN;
          - Ajouter au fichier postgresql.conf : max_wal_senders=1
          - Ajouter au fichier pg_hba.conf : host    replication     replic          127.0.0.1/32            md5
          - Ajouter au .pgpass : mon-serveur:5432:*:replic:ma_replic
          - Arrêter/Redémarrer l'instance
          - Faire la sauvegarde : pg_basebackup -D /home/postgres/HOT_BACKUP -F t -R -x -z -c fast -l hot_backup_${HOSTNAME}_`date '+%Y%m%d'` -P -v -U replic

J'ai restauré sur mon serveur 2.
Modifié le postgresql.conf :
        #wal_level = minimal
        #archive_mode = off
        #archive_command = ''
        #max_wal_senders = 0
        #archive_timeout = 0

Lorsque je démarre, j'obtiens les logs suivants :
          2016-05-20 08:41:20 CEST [1366]: [1-1] user=  2016-05-20 08:41:20 CEST LOG:  database system was interrupted; last known up at 2016-05-20 07:20:39 CEST
          2016-05-20 08:41:20 CEST [1366]: [2-1] user=  2016-05-20 08:41:20 CEST LOG:  invalid checkpoint record
          2016-05-20 08:41:20 CEST [1366]: [3-1] user=  2016-05-20 08:41:20 CEST FATAL:  could not locate required checkpoint record
          2016-05-20 08:41:20 CEST [1366]: [4-1] user=  2016-05-20 08:41:20 CEST HINT:  If you are not restoring from a backup, try removing the file "/home/postgres/PG_DATA/backup_label".
          2016-05-20 08:41:20 CEST [1364]: [3-1] user=  2016-05-20 08:41:20 CEST LOG:  startup process (PID 1366) exited with exit code 1
          2016-05-20 08:41:20 CEST [1364]: [4-1] user=  2016-05-20 08:41:20 CEST LOG:  aborting startup due to startup process failure

Est-ce que j'ai raté quelque chose pour avoir une sauvegarde autonome (dans un premier temps) ?
Est-ce bien l'option -x de la commande pg_basebackup qui se charge d'intégrer les WAL nécessaires ?

Pouvez-vous m'aider svp ?

Hors ligne

#2 20/05/2016 10:25:41

mortimer.pw
Membre

Re : Pg_basebackup : sauvegarde autonome

Re,

J'ai trouvé mon erreur.

Lors de l'étape de restauration, j'ai bien supprimé le recovery.conf (pour ne pas démarrer du standby), mais j'ai aussi supprimé le contenu de mon pg_xlog.

Désolé du dérangement.

Dernière modification par mortimer.pw (20/05/2016 10:28:48)

Hors ligne

#3 20/05/2016 10:26:21

ruizsebastien
Membre

Re : Pg_basebackup : sauvegarde autonome

Bonjour,

Dans le postgresql.conf du serveur 2 il faut ajouter : hot_standby = on

Par contre pour le pg_hba.conf : host    replication     replic          127.0.0.1/32            md5
J'ai un doute car il faudrait mettre à la place de 127.0.0.1 (ip boucle locale) l'ip du serveur distant.

[EDIT]
ok si vous avez trouvé. Par contre les points ci-dessus m'intrigue quand même.

Cordialement.

Dernière modification par ruizsebastien (20/05/2016 10:27:37)

En ligne

#4 20/05/2016 10:32:39

mortimer.pw
Membre

Re : Pg_basebackup : sauvegarde autonome

Bonjour Sébastien,

Je n'ai pas ajouté le "hot_standby = on" sur mon serveur 2 car, dans un premier temps, je teste une simple restauration autonome.

Pour le pg_hba.conf, c'est pour pouvoir faire le pg_basebackup sur le maître.

Hors ligne

#5 20/05/2016 11:27:43

mortimer.pw
Membre

Re : Pg_basebackup : sauvegarde autonome

Deuxième étape : Le Warm-standby.

Sur mon serveur 2, j'ai :
          - restauré ma sauvegarde.
          - supprimé les fichiers inutiles : rm postmaster.pid pg_xlog/*
          - modifé le fichier postgresql.conf :
        #wal_level = minimal
        #archive_mode = off
        #archive_command = ''
        #max_wal_senders = 0
        #archive_timeout = 0
          - modifié le fichier recovery.conf :
        standby_mode = 'on'
        restore_command = 'cp /home/postgres/PG_ARC/%f %p'
        archive_cleanup_command = 'pg_archivecleanup /home/postgres/PG_ARC %r'
          - démarré l'instance

Dans les logs, j'ai les messages :
          2016-05-20 10:54:48 CEST [7513]: [1-1] user=  2016-05-20 10:54:48 CEST LOG:  database system was interrupted; last known up at 2016-05-20 10:50:56 CEST
          2016-05-20 10:54:48 CEST [7513]: [2-1] user=  2016-05-20 10:54:48 CEST LOG:  entering standby mode
          2016-05-20 10:54:48 CEST [7513]: [3-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000DF" from archive
          2016-05-20 10:54:49 CEST [7513]: [4-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000DE" from archive
          2016-05-20 10:54:50 CEST [7513]: [5-1] user=  2016-05-20 10:54:48 CEST LOG:  redo starts at 0/DE002180
          2016-05-20 10:54:50 CEST [7513]: [6-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000DF" from archive
          2016-05-20 10:54:51 CEST [7513]: [7-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000E0" from archive
          2016-05-20 10:54:52 CEST [7513]: [8-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000E1" from archive
          2016-05-20 10:54:53 CEST [7513]: [9-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000E2" from archive
          2016-05-20 10:54:57 CEST [7513]: [10-1] user=  2016-05-20 10:54:48 CEST LOG:  consistent recovery state reached at 0/E2944290
          2016-05-20 10:54:57 CEST [7513]: [11-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000E3" from archive
          2016-05-20 10:54:57 CEST [7513]: [12-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000E4" from archive
          2016-05-20 10:54:58 CEST [7513]: [13-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000E5" from archive
          2016-05-20 10:54:59 CEST [7513]: [14-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000E6" from archive
          2016-05-20 10:54:59 CEST [7513]: [15-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000E7" from archive
          2016-05-20 10:55:01 CEST [7513]: [16-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000E8" from archive
          2016-05-20 10:55:02 CEST [7513]: [17-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000E9" from archive
          2016-05-20 10:55:05 CEST [7513]: [18-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000EA" from archive
          2016-05-20 10:55:07 CEST [7513]: [19-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000EB" from archive
          2016-05-20 10:55:07 CEST [7513]: [20-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000EC" from archive
          2016-05-20 10:55:10 CEST [7513]: [21-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000ED" from archive
          2016-05-20 10:55:11 CEST [7513]: [22-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000EE" from archive
          2016-05-20 10:55:15 CEST [7513]: [23-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000EF" from archive
          2016-05-20 10:55:17 CEST [7513]: [24-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000F0" from archive
          cp: impossible d'évaluer « /home/postgres/PG_ARC/0000000100000000000000F1 »: Aucun fichier ou dossier de ce type
          cp: impossible d'évaluer « /home/postgres/PG_ARC/0000000100000000000000F1 »: Aucun fichier ou dossier de ce type
          cp: impossible d'évaluer « /home/postgres/PG_ARC/0000000100000000000000F1 »: Aucun fichier ou dossier de ce type


Est-ce juste un avertissement parce que le fichier WAL archivé (de mon maître) n'est pas encore présent ?
Où s'agit-il d'un autre problème ?

Dernière modification par mortimer.pw (20/05/2016 11:36:01)

Hors ligne

#6 20/05/2016 11:33:48

ruizsebastien
Membre

Re : Pg_basebackup : sauvegarde autonome

oui normalement c'est ça. C'est toujours le même warning sur le dernier wal qui n'existe pas encore.

En ligne

#7 20/05/2016 11:36:12

mortimer.pw
Membre

Re : Pg_basebackup : sauvegarde autonome

J'ai ensuite promu mon esclave en maître : pg_ctl promote.

Dans les logs, j'ai les messages :
          2016-05-20 11:28:24 CEST [7513]: [30-1] user=  2016-05-20 10:54:48 CEST LOG:  received promote request
          2016-05-20 11:28:24 CEST [7513]: [31-1] user=  2016-05-20 10:54:48 CEST LOG:  redo done at 0/F3000098
          2016-05-20 11:28:24 CEST [7513]: [32-1] user=  2016-05-20 10:54:48 CEST LOG:  last completed transaction was at log time 2016-05-20 10:54:51.834983+02
          2016-05-20 11:28:24 CEST [7513]: [33-1] user=  2016-05-20 10:54:48 CEST LOG:  restored log file "0000000100000000000000F3" from archive
          cp: impossible d'évaluer « /home/postgres/PG_ARC/00000002.history »: Aucun fichier ou dossier de ce type
          2016-05-20 11:28:25 CEST [7513]: [34-1] user=  2016-05-20 10:54:48 CEST LOG:  selected new timeline ID: 2
          cp: impossible d'évaluer « /home/postgres/PG_ARC/00000001.history »: Aucun fichier ou dossier de ce type
          2016-05-20 11:28:26 CEST [7513]: [35-1] user=  2016-05-20 10:54:48 CEST LOG:  archive recovery complete
          2016-05-20 11:28:26 CEST [7513]: [36-1] user=  2016-05-20 10:54:48 CEST LOG:  MultiXact member wraparound protections are now enabled
          2016-05-20 11:28:26 CEST [7516]: [13-1] user=  2016-05-20 10:54:50 CEST LOG:  checkpoint starting: force
          2016-05-20 11:28:26 CEST [7511]: [3-1] user=  2016-05-20 10:54:48 CEST LOG:  database system is ready to accept connections


Pourquoi ces messages sur des fichiers history ?
Y-a-t'il un nouveau problème ?

Hors ligne

#8 20/05/2016 11:53:00

gleu
Administrateur

Re : Pg_basebackup : sauvegarde autonome

Non, il n'y a pas de problème. Il demande la récupération de tous les fichiers historiques mais comme il n'y en a pas, la commande de copie renvoie une erreur. C'est normal.

Hors ligne

#9 20/05/2016 12:14:40

mortimer.pw
Membre

Re : Pg_basebackup : sauvegarde autonome

Bonjour Guillaume,

Merci pour l'intervention.
Le FORCE au niveau du checkpoint starting est également normal ?

Hors ligne

#10 20/05/2016 22:25:52

gleu
Administrateur

Re : Pg_basebackup : sauvegarde autonome

Oui, c'est juste pour dire que le checkpoint exécuté était dû à un arrêt ou à une fin de restauration (donc le deuxième dans ce cas).

Hors ligne

#11 23/05/2016 08:13:19

mortimer.pw
Membre

Re : Pg_basebackup : sauvegarde autonome

Bonjour à tous,

Suite de mes tests : Le warm-standby en mode Streaming replication.

Sur le maître, modifier le fichier /home/postgres/PG_DATA/postgresql.conf :
        max_wal_senders = 2
        archive_timeout = 0 # Plus nécessaire

Sur le maître, ajouter au fichier /home/postgres/PG_DATA/pg_hba.conf
        host    replication     replic          mon-esclave/32       md5

Sur le maître, arrêter/Redémarrer l'instance :
        /etc/init.d/.pgsql restart

Faire une sauvegarde de base sur le maître

Sur l'esclave, restaurer la sauvegarde :
        cd /home/postgres/PG_DATA
        tar xfv base.tar.gz

Sur l'esclave, supprimer les fichiers inutiles :
        rm postmaster.pid
        rm pg_xlog/*

Sur l'esclave, modifier le fichier /home/postgres/PG_DATA/postgresql.conf :
        #wal_level = minimal
        #archive_mode = off
        #archive_command = ''
        #max_wal_senders = 0

Sur l'esclave, éditer le fichier /home/postgres/PG_DATA/recovery.conf :
        standby_mode = 'on'
        primary_conninfo = 'host=mon-serveur port=5432 user=replic'
        restore_command = 'cp /home/postgres/PG_ARC/%f %p'
        archive_cleanup_command = 'pg_archivecleanup /home/postgres/PG_ARC %r'

Sur l'esclave, démarrer l'instance :
        /etc/init.d/.pgsql start

Dans les logs, j'ai les messages :
          2016-05-23 07:34:52 CEST [14653]: [23-1] user=  2016-05-23 07:34:43 CEST LOG:  restored log file "00000001000000010000002F" from archive
          2016-05-23 07:34:52 CEST [14653]: [24-1] user=  2016-05-23 07:34:43 CEST LOG:  consistent recovery state reached at 1/2FFFFFF0
          cp: impossible d'évaluer « /home/postgres/PG_ARC/000000010000000100000030 »: Aucun fichier ou dossier de ce type
          2016-05-23 07:34:52 CEST [14689]: [1-1] user=  2016-05-23 07:34:52 CEST FATAL:  could not connect to the primary server: fe_sendauth: no password supplied
          cp: impossible d'évaluer « /home/postgres/PG_ARC/000000010000000100000030 »: Aucun fichier ou dossier de ce type
          2016-05-23 07:34:52 CEST [14691]: [1-1] user=  2016-05-23 07:34:52 CEST FATAL:  could not connect to the primary server: fe_sendauth: no password supplied

Certainement car je n'ai pas indiqué le password sur la ligne "primary_conninfo" de mon recovery.conf. Mais j'utilise un .pgpass, dans lequel j'ai ajouté :
          mon-esclave:5432:replication:replic:mon-password

Comment indiqué à recovery.conf qu'il doit lire le password dans mon .pgpass ?

Hors ligne

#12 27/05/2016 13:23:54

mortimer.pw
Membre

Re : Pg_basebackup : sauvegarde autonome

Bonjour,
Personne n'a "déporté" le password du recovery.conf vers le .pgpass ?

Hors ligne

#13 27/05/2016 23:45:59

gleu
Administrateur

Re : Pg_basebackup : sauvegarde autonome

Si, ça fonctionne évidemment.

Hors ligne

#14 30/05/2016 09:56:43

mortimer.pw
Membre

Re : Pg_basebackup : sauvegarde autonome

Bonjour Guillaume,
J'ai trouvé l'erreur, le .pgpass de mon esclave ne contenait pas la référence (en replication) vers mon maître.
Merci.

Dernière modification par mortimer.pw (30/05/2016 10:16:29)

Hors ligne

Pied de page des forums