Vous n'êtes pas identifié(e).
Pages : 1
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
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
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)
Cordialement,
Sébastien.
Hors ligne
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
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
oui normalement c'est ça. C'est toujours le même warning sur le dernier wal qui n'existe pas encore.
Cordialement,
Sébastien.
Hors ligne
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
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.
Guillaume.
Hors ligne
Bonjour Guillaume,
Merci pour l'intervention.
Le FORCE au niveau du checkpoint starting est également normal ?
Hors ligne
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).
Guillaume.
Hors ligne
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
Bonjour,
Personne n'a "déporté" le password du recovery.conf vers le .pgpass ?
Hors ligne
Si, ça fonctionne évidemment.
Guillaume.
Hors ligne
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
Pages : 1