Grazie alle nuove utility barman-cloud-restore
e barman-cloud-wal-restore
introdotto in Barman 2.11
, è ora possibile eseguire il ripristino di un'istanza PostgreSQL utilizzando un backup completo precedentemente eseguito utilizzando barman-cloud-wal-archive
e barman-cloud-backup
comandi. Scopriamo insieme come implementarlo nel seguente articolo.
Vale la pena notare che in Barman 2.11, tutte le utilità cloud per Barman sono ora in un pacchetto separato chiamato barman-cli-cloud
.
Requisiti
1. barman-cli-cloud
pacchetto
2. Un'istanza PostgreSQL
3. Un bucket AWS S3
4. Una seconda macchina virtuale dove eseguire il ripristino
In questo articolo testeremo barman-cli-cloud
funzionalità in una macchina virtuale con Debian Buster e PostgreSQL 12. Per seguire correttamente le istruzioni contenute in questo articolo, assumiamo anche che tu abbia:
- configurato Postgres per archiviare i file WAL in un bucket S3 esistente utilizzando
barman-cloud-wal-archive
- eseguito un backup e spedirlo allo stesso bucket S3 tramite
barman-cloud-backup
Puoi facilmente raggiungere questo obiettivo seguendo le istruzioni contenute in questi precedenti articoli del blog:
- Barman Cloud – Parte 1:Archivio WAL
- Barman Cloud – Parte 2:Backup su cloud
Configura il server di ripristino
Di conseguenza, abbiamo un bucket S3 su AWS denominato barman-s3-test
che contiene già i file WAL e il backup archiviato tramite barman-cloud-wal-archive
e barman-cloud-backup
strumenti, ora dobbiamo configurare correttamente un server che sarà l'host per il ripristino dell'istanza PostgreSQL.
1. Installa PostgreSQL 12 dal repository PGDG ufficiale
2. Installa il repository pubblico 2ndQuadrant
3. Installa il barman-cli-cloud
pacchetto:
[email protected]:~# apt update [email protected]:~# apt install barman-cli-cloud
4. Installa awscli
pacchetto:
[email protected]:~# apt install awscli
5. Configura le credenziali AWS con lo strumento awscli come utente postgres:
[email protected]:~$ aws configure --profile barman-cloud AWS Access Key ID [None]: AKI***************** AWS Secret Access Key [None]: **************************************** Default region name [None]: eu-west-1 Default output format [None]: json
Esegui la procedura di ripristino
Ora che il server di ripristino è configurato correttamente, siamo pronti per avviare la procedura di ripristino.
Barman 2.11 introduce l'barman-cloud-backup-list
comando che permette di recuperare informazioni sui backup effettuati con barman-cloud-backup
:
[email protected]:~$ barman-cloud-backup-list \ --profile barman-cloud \ s3://barman-s3-test pg12 Backup ID End Time Begin Wal 20200713T120856 2020-07-13 12:09:05 00000001000000000000000C
Ora siamo pronti per eseguire il ripristino utilizzando il barman-cloud-restore
comando:
[email protected]:~$ barman-cloud-restore \ --profile barman-cloud \ s3://barman-s3-test \ pg12 20200713T120856 \ /var/lib/postgresql/12/main/
Una volta terminato con successo il ripristino, possiamo controllare il contenuto della directory 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.conf backup_label pg_commit_ts pg_ident.conf pg_notify pg_snapshots pg_subtrans pg_wal postgresql.conf base pg_dynshmem pg_logical pg_replslot pg_stat pg_tblspc pg_xact
Ora, per essere sicuri che il processo di ripristino abbia funzionato correttamente, dobbiamo avviare l'istanza PostgreSQL recuperata e verificare che tutto funzioni come previsto. Questo processo richiede alcuni passaggi aggiuntivi.
Innanzitutto, poiché siamo su un sistema Debian, dobbiamo copiare i file contenenti la configurazione di PostgreSQL sotto /etc/postgresql/12/main/
directory:
[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/
In secondo luogo, crea il recovery.signal
file:
[email protected]:~$ touch /var/lib/postgresql/12/main/recovery.signal
Quindi, disabilita il archive_command
per impedire che l'istanza recuperata scriva nello stesso bucket dell'istanza originale:
[email protected]:~$ echo \"archive_command = 'cd .'\" >> /etc/postgresql/12/main/postgresql.conf
Successivamente, devi configurare PostgreSQL per recuperare i file WAL dell'ultima timeline disponibile dal bucket S3 utilizzando barman-cloud-wal-restore
nel restore_command
:
[email protected]:~$ echo \"restore_command = 'barman-cloud-wal-restore --profile barman-cloud s3://barman-s3-test pg12 %f %p'\" >> /etc/postgresql/12/main/postgresql.conf [email protected]:~$ echo \"recovery_target_timeline = 'latest'\" >> /etc/postgresql/12/main/postgresql.conf
IMPORTANTE :Prima di procedere assicurati che l'istanza PostgreSQL non sia in esecuzione e che la directory di destinazione (la directory dati PostgreSQL predefinita) sia vuota.
Finalmente, siamo pronti per avviare la nuova istanza recuperata:
[email protected]:~# systemctl restart [email protected]
Grande! Come possiamo vedere dal log di PostgreSQL, i file WAL vengono recuperati dal bucket S3 e l'istanza è stata avviata correttamente:
[email protected]:~$ less /var/log/postgresql/postgresql-12-main.log ... 2020-07-13 12:43:25.093 UTC [9458] LOG: starting PostgreSQL 12.3 (Debian 12.3-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit 2020-07-13 12:43:25.093 UTC [9458] LOG: listening on IPv4 address "127.0.0.1", port 5432 2020-07-13 12:43:25.095 UTC [9458] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" 2020-07-13 12:43:25.111 UTC [9459] LOG: database system was interrupted; last known up at 2020-07-13 12:08:56 UTC 2020-07-13 12:43:25.508 UTC [9459] LOG: starting archive recovery 2020-07-13 12:43:26.010 UTC [9459] LOG: restored log file "00000001000000000000000C" from archive 2020-07-13 12:43:26.052 UTC [9459] LOG: redo starts at 0/C000028 2020-07-13 12:43:26.054 UTC [9459] LOG: consistent recovery state reached at 0/C000138 2020-07-13 12:43:26.054 UTC [9458] LOG: database system is ready to accept read only connections 2020-07-13 12:43:26.469 UTC [9459] LOG: restored log file "00000001000000000000000D" from archive 2020-07-13 12:43:26.823 UTC [9459] LOG: redo done at 0/D0001B0 2020-07-13 12:43:27.242 UTC [9459] LOG: restored log file "00000001000000000000000D" from archive 2020-07-13 12:43:27.592 UTC [9459] LOG: selected new timeline ID: 2 2020-07-13 12:43:27.644 UTC [9459] LOG: archive recovery complete 2020-07-13 12:43:27.979 UTC [9458] LOG: database system is ready to accept connections
Conclusione
Come al solito con qualsiasi nuova versione di Barman, consigliamo a tutti di aggiornare i propri sistemi all'ultima versione. Un elenco completo di modifiche e correzioni di bug è disponibile qui.
Tieni presente che se stai già utilizzando barman-cloud-wal-archive
o barman-cloud-backup
installato tramite pacchetto RPM/Apt e stai aggiornando il tuo sistema, devi installare il barman-cli-cloud
pacchetto. Ciò è dovuto al fatto che, con la versione Barman 2.11, tutti gli strumenti relativi al cloud fanno parte del barman-cli-cloud
pacchetto come spiegato all'inizio dell'articolo.
Le prossime versioni di Barman potrebbero migliorare l'usabilità e le capacità di automazione del comando recovery, ad esempio preparando un recovery.conf
o recovery.signal
file come fa il vero Barman.