Grâce aux nouveaux utilitaires barman-cloud-restore
et barman-cloud-wal-restore
introduit dans Barman 2.11
, il est maintenant possible d'exécuter la restauration d'une instance PostgreSQL à l'aide d'une sauvegarde complète précédemment exécutée à l'aide de barman-cloud-wal-archive
et barman-cloud-backup
commandes. Découvrons ensemble comment mettre cela en place dans l'article suivant.
Il convient de noter que dans Barman 2.11, tous les utilitaires cloud pour Barman se trouvent désormais dans un package séparé appelé barman-cli-cloud
.
Exigences
1. barman-cli-cloud
paquet
2. Une instance PostgreSQL
3. Un compartiment AWS S3
4. Une deuxième machine virtuelle où exécuter la restauration
Dans cet article, nous allons tester barman-cli-cloud
fonctionnalités dans une machine virtuelle avec Debian Buster et PostgreSQL 12. Afin de suivre correctement les instructions contenues dans cet article, nous supposons également que vous avez :
- configuré Postgres pour archiver les fichiers WAL dans un compartiment S3 existant à l'aide de
barman-cloud-wal-archive
- a exécuté une sauvegarde et l'a envoyée au même compartiment S3 via
barman-cloud-backup
Vous pouvez facilement y parvenir en suivant les instructions contenues dans ces articles de blog précédents :
- Barman Cloud – Partie 1 :Archive WAL
- Barman Cloud – Partie 2 :Sauvegarde dans le cloud
Configurer le serveur de récupération
En conséquence, nous avons un compartiment S3 sur AWS nommé barman-s3-test
qui contient déjà les fichiers WAL et la sauvegarde archivée via barman-cloud-wal-archive
et barman-cloud-backup
outils, nous devons maintenant configurer correctement un serveur qui sera l'hôte pour la récupération de l'instance PostgreSQL.
1. Installez PostgreSQL 12 depuis le dépôt officiel PGDG
2. Installez le référentiel public 2ndQuadrant
3. Installez le barman-cli-cloud
paquet :
[email protected] :~# apt [email protected] :~# apt install barman-cli-cloud
4. Installez awscli
paquet :
[email protected] :~# apt install awscli
5. Configurez les informations d'identification AWS avec l'outil awscli en tant qu'utilisateur postgres :
[email protected] :~$ aws configure --profile barman-cloudAWS Access Key ID [Aucun] :AKI***************** Clé d'accès secrète AWS [Aucun ] :**************************************** Nom de région par défaut [Aucun] :eu -west-1Format de sortie par défaut [Aucun] :json
Exécuter la procédure de restauration
Maintenant que le serveur de récupération est correctement configuré, nous sommes prêts à démarrer la procédure de restauration.
Barman 2.11 introduit la barman-cloud-backup-list
commande qui permet de récupérer des informations sur les sauvegardes faites avec barman-cloud-backup
:
[email protected] :~$ barman-cloud-backup-list \ --profile barman-cloud \ s3://barman-s3-test pg12Backup ID End Time Begin Wal20200713T120856 2020-07-13 12:09 :05 0000000100000000000000C
Nous sommes maintenant prêts à exécuter la restauration en utilisant le barman-cloud-restore
commande :
[email protected] :~$ barman-cloud-restore \ --profile barman-cloud \ s3://barman-s3-test \ pg12 20200713T120856 \ /var/lib/postgresql/12/main/Une fois la restauration terminée avec succès, nous pouvons vérifier le contenu du répertoire PGDATA :
[email protected] :~$ ls /var/lib/postgresql/12/main/PG_VERSION global pg_hba.conf pg_multixact pg_serial pg_stat_tmp pg_twophase postgresql.auto.confbackup_label pg_commit_ts pg_ident.conf pg_notify pg_snapshots pg_subtrans pg_wal pg_dynshmbase pg_replslot pg_stat pg_tblspc pg_xactMaintenant, pour être sûr que le processus de restauration a fonctionné correctement, nous devons démarrer l'instance PostgreSQL récupérée et vérifier que tout fonctionne comme prévu. Ce processus nécessite quelques étapes supplémentaires.
Tout d'abord, puisque nous sommes sur un système Debian, nous devons copier les fichiers contenant la configuration PostgreSQL sous le
/etc/postgresql/12/main/
répertoire :[email protected] :~$ cp /var/lib/postgresql/12/main/postgresql.conf /etc/postgresql/12/main/[email protected] :~$ cp /var/lib/postgresql /12/main/pg_hba.conf /etc/postgresql/12/main/[email protected]:~$ cp /var/lib/postgresql/12/main/pg_ident.conf /etc/postgresql/12/main/Deuxièmement, créez le
recovery.signal
fichier :[email protected] :~$ touch /var/lib/postgresql/12/main/recovery.signalEnsuite, désactivez la
archive_command
pour empêcher l'instance récupérée d'écrire dans le même bucket que l'instance d'origine :[email protected] :~$ echo \"archive_command ='cd .'\">> /etc/postgresql/12/main/postgresql.confAprès cela, vous devez configurer PostgreSQL pour récupérer les fichiers WAL de la dernière chronologie disponible à partir du compartiment S3 en utilisant le
barman-cloud-wal-restore
dans larestore_command
:[email protected] :~$ echo \"restore_command ='barman-cloud-wal-restore --profile barman-cloud s3://barman-s3-test pg12 %f %p'\">> / etc/postgresql/12/main/[email protected] :~$ echo \"recovery_target_timeline ='latest'\">> /etc/postgresql/12/main/postgresql.confIMPORTANT :Avant de continuer, assurez-vous que l'instance PostgreSQL n'est pas en cours d'exécution et que le répertoire de destination (le répertoire de données PostgreSQL par défaut) est vide.
Enfin, nous sommes prêts à démarrer la nouvelle instance récupérée :
[email protected] :~# systemctl restart [email protected]Génial! Comme nous pouvons le voir dans le journal PostgreSQL, les fichiers WAL sont récupérés à partir du compartiment S3 et l'instance a été correctement démarrée :
[email protected] :~$ less /var/log/postgresql/postgresql-12-main.log...2020-07-13 12:43:25.093 UTC [9458] LOG :démarrage de PostgreSQL 12.3 (Debian 12.3-1.pgdg100+1) sur x86_64-pc-linux-gnu, compilé par gcc (Debian 8.3.0-6) 8.3.0, 64-bit2020-07-13 12:43:25.093 UTC [9458] LOG :écoute sur l'adresse IPv4 "127.0.0.1", port 54322020-07-13 12:43:25.095 UTC [9458] LOG :écoute sur le socket Unix "/var/run/postgresql/.s.PGSQL.5432"2020-07- 13 12:43:25.111 UTC [9459] LOG :le système de base de données a été interrompu ; connu pour la dernière fois le 2020-07-13 12:08:56 UTC2020-07-13 12:43:25.508 UTC [9459] LOG :démarrage de la récupération de l'archive2020-07-13 12:43:26.010 UTC [9459] LOG :journal restauré fichier "00000001000000000000000C" de archive2020-07-13 12:43:26.052 UTC [9459] LOG :la reprise commence à 0/C0000282020-07-13 12:43:26.054 UTC [9459] LOG :état de récupération cohérent atteint à 0/C0001382020 -07-13 12:43:26.054 UTC [9458] LOG :le système de base de données est prêt à accepter les connexions en lecture seule. 13 12:43:26.823 UTC [9459] LOG :refait à 0/D0001B02020-07-13 12:43:27.242 UTC [9459] LOG :fichier journal restauré "0000000100000000000000D" de l'archive2020-07-13 12:43:27.592 UTC [9459] LOG :ID de la nouvelle chronologie sélectionnée :22020-07-13 12:43:27.644 UTC [9459] LOG :récupération de l'archive terminée2020-07-13 12:43:27.979 UTC [9458] LOG :le système de base de données est prêt à accepter les connexionsConclusion
Comme d'habitude avec toute nouvelle version de Barman, nous recommandons à chacun de mettre à jour son système avec la dernière version. Une liste complète des modifications et des corrections de bogues est disponible ici.
Veuillez noter que si vous utilisez déjà
barman-cloud-wal-archive
oubarman-cloud-backup
installé via le package RPM/Apt et que vous mettez à jour votre système, vous devez installer lebarman-cli-cloud
emballer. Cela est dû au fait qu'avec la version Barman 2.11, tous les outils liés au cloud font partie dubarman-cli-cloud
package comme expliqué au début de l'article.Les prochaines versions de Barman pourraient améliorer la convivialité et les capacités d'automatisation de la commande recover, par exemple en préparant un
recovery.conf
ourecovery.signal
fichier comme le fait le vrai Barman.