SlideShare a Scribd company logo
1 of 32
Download to read offline
pgBackRest
backup adabili e veloci
ing. Luca Ferrari, PhD
uca1978
https://fluca1978.github.io
12 Marzo 2021
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 1 / 32
Attribution-NonCommercial-ShareAlike 4.0
This work is licensed under the Creative Commons
Attribution-NonCommercial-ShareAlike 4.0 International License. To view a
copy of this license, visit
http://creativecommons.org/licenses/by-nc-sa/4.0/ or send a
letter to Creative Commons, PO Box 1866, Mountain View, CA 94042,
USA.
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 2 / 32
Who Am I?
prima versione PostgreSQL usata: 7.3 (anno 2003)!
appassionato di Open Source
Perl, Raku, Unix, Emacs!
Java, PHP, Oracle . . .
Università degli Studi di Modena e Reggio Emilia (PhD, tutor, . . . )
Nipissing University (Adjunct Professor)
https://fluca1978.github.io
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 3 / 32
Libri
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 4 / 32
Backup
Un backup è una copia di sicurezza dei dati.
Un backup deve essere:
sicuro e adabile, nessuno vuole scoprire di non avere un backup
completo quando serve, né di aver avuto un data leak per colpa dei
propri backup;
veloce, soprattutto per il restore;
non invasivo, perché non vogliamo fermare i nostri sistemi per fare una
copia potenzialmente mai utilizzata.
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 5 / 32
Restore
Il processo inverso di un backup: ripristina i dati ad un punto precedente
nel tempo.
Potenzialmente si vuole poter tornare ad un attimo fa (Recovery Point
Objective - RPO - pari a zero).
Potenzialmente si vuole poter eettuare un ripristino in un lampo
(Recovery Time Objective - RTO - pari a zero).
La realtà è ovviamente un compromesso fra i due valori di cui sopra.
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 6 / 32
Strumenti di Backup (e Restore)
PostgreSQL è un sistema completo: fornisce strumenti per il backup e il
restore (pg_dump, pg_restore, pg_dumpall).
Si tratta di backup logici.
Non sempre sono la soluzione migliore: sono invasivi, richiedono tempo
proporzionale alla dimensione del database/cluster.
Soluzione possibile: backup sico (hot backup, backup a caldo,
basebackup, ...): si fa una copia a livello di lesystem della directory
PGDATA mentre il sistema è in funzione, poi si archiviano i segmenti WAL
necessari a consolidare tale copia.
Il restore consiste nel mescolare la PGDATA e i segmenti di WAL
simulando un crash recovery.
pgbackrest eettua backup sici!
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 7 / 32
Infrastruttura di esempio
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 8 / 32
Parallelismo!
PgBackRest nasce con il concetto di parallelismo in mente: le operazioni di
restore devono essere veloci e parallele (o parallelizzabili).
Molti tool di backup si avvalgono di rsync(1) ma questo non è uno
strumento eciente per il backup dei database: non supporta bene il
parallelismo, la compressione è both-sides e ha il problema della risluzione
del tempo a 1 secondo.
PgBackRest decide di implementare la propria strategia di copia fortemente
integrata con PostgreSQL per risolvere i problemi piu' comuni e permettere
quindi un'esperienza migliore con database molto grandi.
pgbackrest si prende in carico il backup, ma vuole comandare! Occorre
che la stessa versione sia installata sulle macchine!
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 9 / 32
Features Principali
PgBackRest supporta, fra le altre, alcune feature molto interessanti:
backup full, incrementali e dierenziali con la possibilità di cancellare
backup intermedi e riallocare i backup collegandoli fra loro.
delta restore, si eettua il restore solo dei le eettivamente
modicati;
restore parziale, possibilità di eettuare il restore di un solo database
all'interno dell'intero cluster;
compressione e streaming, i le devono essere toccati il meno
possibile;
cifratura, perché anche i backup non devono consentire data-leak;
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 10 / 32
Concetti Generali
pgBackRest opera sul concetto di stanza e di repository.
Una stanza è una congurazione di un server remoto per il backup, di fatto
è un insieme di target da sottoporre a backup.
Un repository è uno storage locale o remoto (SSH) sul quale salvare i
backup. Il repository può essere cifrato.
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 11 / 32
Tipologie di backup
Sono supportati tre tipi di backup:
full è il primo backup o comunque un backup totale, e quindi occupa
piu' spazio;
incr (incrementale) è un backup basato sulle dierenze dall'ultimo
backup valido (che può essere a sua volta full o incr);
di (delta) è un backup di tipo incr ma basato sempre sull'ultimo full
realizzato.
In default il backup è sempre incr (dierenze dall'ultimo backup) a parte il
primo che viene sempre fatto come full.
I backup non full dipendono da altri backup (questo è importante per la
retention).
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 12 / 32
Struttura del repository
La struttura del repository è interessante: pgBackRest archivia il backup
con la stessa struttura di una PGDATA.
% cd /backup/pgbackrest/
% sudo ls backup/miguel/20210207-151554F/pg_data
backup_label.gz global pg_hba.conf.gz pg_tblspc
base log pg_hba.conf~.gz pg_twophase
conf.d pg_commit_ts pg_ident.conf.gz PG_VERSION.gz
current_logfiles.gz pg_dynshmem pg_logical pg_wal
...
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 13 / 32
Schema di funzionamento
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 14 / 32
Congurazione: Concetti
Il le principale di congurazione è /etc/pgbackrest.conf:
le ini
tre sezioni particolari:
globale contiene tutte le opzioni impostate a livello globale per il
funzionamento (es. log);
repository contiene le informazioni sullo storage da usare;
stanza contiene le impostazioni di un determinato set di backup.
La stanza può contenere piu' server, nel qual caso il primo (pg1) è il
master, gli altri sono considerati standby.
Un repository può contenere piu' denizioni, ma solo la prima (repo1) è
attualmente supportata.
Ogni parametro specicato nel le di congurazione può essere sovrascritto
dal relativo parametro fornito su linea di comando.
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 15 / 32
Simmetria
pgBackRest è simmetrico: praticamente ogni comando può essere eseguito
sulla macchina di backup o sulla machina target.
luca@miguel ~ % pgbackrest --stanza=miguel info
stanza: miguel
status: ok
cipher: none
db (current)
wal archive min/max (11-1):
0000000500000213000000D6/0000000600000213000000DA
...
luca@carmensita ~ % pgbackrest --stanza=miguel info
stanza: miguel
status: ok
cipher: none
db (current)
wal archive min/max (11-1):
0000000500000213000000D6/0000000600000213000000DA
...
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 16 / 32
Backup
Il primo backup deve essere sempre full. La stanza deve essere stata
creata sul repository con il comando stanza-create.
E' possibile specicare il tipo di backup con l'opzione type, ma se non
viene trovato un backup full viene eseguito in automatico:
% pgbackrest --stanza miguel --log-level-console info backup
...
P00 INFO: full backup size = 228.9MB
P00 INFO: execute non-exclusive pg_stop_backup()
and wait for all WAL segments to archive
P00 INFO: backup stop archive = 0000000500000213000000AA, lsn = 213/AA00
P00 INFO: new backup label = 20210309-123110F
P00 INFO: backup command end: completed successfully (108290ms)
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 17 / 32
Backup Interrotti
Se un backup viene interrotto, per qualunque motivo, il software tenta di
recuperare quanto già trasferito:
% pgbackrest --stanza miguel backup
^C
% pgbackrest --stanza miguel backup
WARN: resumable backup 20210207-151554F_20210309-122738I
of same type exists -- remove invalid files and resume
L'opzione che controlla il resume dei backup interrotti è --resume (e il
contrario --no-resume.
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 18 / 32
Cancellazione di un backup
Si deve usare la retention policy e/o il comando expire.
Non esiste un comando per la cancellazione di un backup.
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 19 / 32
Retention Policy
Le possibili opzioni sono:
repo-retention-full il numero di backup full da conservare. Il
valore dipende da repo-retention-full-type che può valere
time per indicare che si tratta di giorni;
count per indicare che si tratta di backup;
repo-retention-diff se impostato indica il numero di backup
dierenziali da conservare;
repo-retention-archive indica quali WAL sono rimovibili, a patto
che sia rispettato repo-retention-full;
repo-retention-archive-type vale full, incr o diff e indica
quanti WAL relativi a repo-retention-archive devono essere
mantenuti.
I valori repo-retention-archive e repo-retention-archive-type
servono solo a riparmiare spazio disco in situazioni particolari, ma il loro
utilizzo pregiudica il PITR!
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 20 / 32
Retention Policy in azione
Al termine di una operazione di backup, e quindi quando pgBackRest è
sicuro di avere una nuova copia, viene applicato l'expiring dei backup
presenti. La rimozione di un backup produce la rimozione anche dei backup
collegati, ad esempio la rimozione di un backup full comporta l'eliminazione
anche degli incrementali che su di esso dipendono:
% pgbackrest --stanza miguel --type full backup
...
INFO: new backup label = 20210309-123434F
INFO: backup command end: completed successfully (120011ms)
...
INFO: remove expired backup repo1: 20210207-151554F_20210309-122738I
INFO: remove expired backup repo1: 20210207-151554F_20210219-122236I
INFO: remove expired backup repo1: 20210207-151554F_20210219-112719I
INFO: remove expired backup repo1: 20210207-151554F_20210207-153442I
INFO: remove expired backup repo1: 20210207-151554F
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 21 / 32
Informazioni di backup
Il comando info fornisce informazioni sui backup. Accetta eventualmente
la stanza.
% pgbackrest info
stanza: miguel
status: ok
cipher: none
db (current)
wal archive min/max (12): 000000010000000300000099/000000010000000300
full backup: 20210309-123110F
timestamp start/stop: 2021-03-09 12:31:10 / 2021-03-09 12:32:58
wal start/stop: 000000010000000300000099 / 0000000100000003000000
database size: 2GB, database backup size: 2GB
repo1: backup set size: 181.5MB, backup size: 181.5MB
full backup: 20210309-123434F
timestamp start/stop: 2021-03-09 12:34:34 / 2021-03-09 12:36:32
wal start/stop: 00000001000000030000009B / 0000000100000003000000
database size: 2GB, database backup size: 2GB
repo1: backup set size: 181.5MB, backup size: 181.5MB
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 22 / 32
Backup da uno standby
E' possibile abilitare il backup da un nodo standby mediante l'opzione
--backup-standby:
% cat /etc/pgbackrest.conf
...
[miguel]
pg1-host = miguel
pg1-path = /postgres/12/data
pg1-host-user = postgres
pg2-host = miguel-replica
pg2-path = /postgres/12/data
pg2-host-user = postgres
% pgbackrest --stanza miguel backup --backup-standby
...
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 23 / 32
Restore su macchina remota
Il restore va fatto sulla macchina che ospiterà il cluster:
luca@miguel ~ % sudo -u postgres 
pgbackrest --config=/usr/local/etc/pgbackrest.conf 
--stanza=miguel 
--pg1-path=/postgres/12/restore 
restore
...
INFO: write updated /postgres/12/restore/postgresql.auto.conf
INFO: restore global/pg_control
(performed last to ensure aborted restores cannot be started)
INFO: restore command end: completed successfully (25235ms)
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 24 / 32
Recupero dei WAL
Il comando restore crea un le recovery.conf (versioni vecchie di
PostgreSQL) o recovery.signal (assieme alle opzioni in
postgresql.auto.conf) per ottenere i WAL:
% sudo cat /postgres/12/restore/postgresql.auto.conf
# Recovery settings generated by pgBackRest restore on 2021-03-09 15:54:59
restore_command = ’pgbackrest --config=/usr/local/etc/pgbackrest.conf
--pg1-path=/postgres/12/restore
--stanza=miguel archive-get %f %p’
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 25 / 32
Specicare da quale backup partire per il restore
In default si prende latest, ossia l'ultimo backup disponibile.
E' possibile specicare un backup specico con l'opzione set:
luca@miguel ~ % sudo -u postgres 
pgbackrest --config=/usr/local/etc/pgbackrest.conf 
--stanza=miguel 
--pg1-path=/postgres/12/restore 
--set 20210309-123434F_20210309-130132I
restore
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 26 / 32
Delta Restore
Recovery veloce su una directory cluster esistente.
Si usa l'opzione --delta.
luca@miguel ~ % sudo -u postgres 
pgbackrest --config=/usr/local/etc/pgbackrest.conf 
--stanza=miguel 
--pg1-path=/postgres/12/restore 
--set 20210309-123434F_20210309-130132I 
--delta
restore
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 27 / 32
Restore parziale (selettivo)
E' possibile eettuare il restore di un solo database specico: in sostanza
viene eettuato il restore di tutto il cluster, ma gli altri database sono
invalidati.
% sudo -u postgres pgbackrest --stanza=miguel 
--log-level-console=info --delta 
--db-include=digikamdb restore
...
INFO: restore command end: completed successfully (4780ms)
% psql template1
template1=# c testdb
FATAL: relation mapping file base/16385/pg_filenode.map
contains invalid data
Previous connection kept
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 28 / 32
Point in Time Recovery
Si usano le opzioni target:
% sudo service postgresql stop
% sudo -u postgres 
pgbackrest restore --delta --stanza=main 
--type=time 
--target=’2021-02-04 10:07:09.098026+02’ 
--target-action=promote
...
INFO: write updated /postgres/12/restore/postgresql.auto.conf
...
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 29 / 32
Compressione
E' possibile abilitare la compressione dei le memorizzati nel repository
(ogni le sarà .gz), nonché la compressione di rete:
[global]
...
compress = y
compress-level = 9
compress-level-network = 9
ATTENZIONE:
se compress = y allora si usa compress-level anche per la
trasmissione di rete (ossia compress-level-network è ignorato).
se compress = n allora si usa compress-level-network
(ovviamente se il database da backuppare è acceduto in modo
remoto);
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 30 / 32
Cifratura
L'unico algoritmo di cifratura supportato è Advanced Encryption Standard
con chiave di 256 bit:
[global]
...
repo1-cipher-type = aes-256-cbc
repo1-cipher-pass = aVeryStrongEncryptionPasswordHere
ATTENZIONE: la cifratura deve essere applicata su una nuova stanza.
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 31 / 32
Conclusioni
pgbackrest è un software completo e maturo, fortemente ottimizzato per
database di grosse dimensioni.
ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 32 / 32

More Related Content

Similar to Webminar del 12.03.2012

Linux & Open Source : Lezione Cinque
Linux & Open Source : Lezione CinqueLinux & Open Source : Lezione Cinque
Linux & Open Source : Lezione CinqueDario Mazza
 
Linux & Open Source : Lezione 1
Linux & Open Source : Lezione 1Linux & Open Source : Lezione 1
Linux & Open Source : Lezione 1Dario Mazza
 
Backup e restore - rdiff backup
Backup e restore - rdiff backupBackup e restore - rdiff backup
Backup e restore - rdiff backupJohn Leach
 
Hosting Backup, quali opzioni e quali costi ci aspettano - #TipOfTheDay
Hosting Backup, quali opzioni e quali costi ci aspettano - #TipOfTheDayHosting Backup, quali opzioni e quali costi ci aspettano - #TipOfTheDay
Hosting Backup, quali opzioni e quali costi ci aspettano - #TipOfTheDayAruba S.p.A.
 
Giochiamo ai COW-boy : zfs & btrfs
Giochiamo ai COW-boy : zfs & btrfsGiochiamo ai COW-boy : zfs & btrfs
Giochiamo ai COW-boy : zfs & btrfsalberto fiaschi
 
Pacchi e pacchetti
Pacchi e pacchettiPacchi e pacchetti
Pacchi e pacchettigiallu
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaAlessandro Selli
 
Elaborazione automatica dei dati: calcolatore e matlab
Elaborazione automatica dei dati: calcolatore e matlabElaborazione automatica dei dati: calcolatore e matlab
Elaborazione automatica dei dati: calcolatore e matlabprofman
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2Giorgio Cefaro
 
100526 Sa 1.1 Platespin Forge Webinar (2)
100526 Sa 1.1 Platespin Forge Webinar (2)100526 Sa 1.1 Platespin Forge Webinar (2)
100526 Sa 1.1 Platespin Forge Webinar (2)antonio_tonani
 
Performance dei sistemi di calcolo
Performance dei sistemi di calcoloPerformance dei sistemi di calcolo
Performance dei sistemi di calcoloMajong DevJfu
 
Sistemioperativi
SistemioperativiSistemioperativi
Sistemioperativieleonora4g
 

Similar to Webminar del 12.03.2012 (20)

Linux & Open Source : Lezione Cinque
Linux & Open Source : Lezione CinqueLinux & Open Source : Lezione Cinque
Linux & Open Source : Lezione Cinque
 
Lezione Cinque
Lezione CinqueLezione Cinque
Lezione Cinque
 
Linux & Open Source : Lezione 1
Linux & Open Source : Lezione 1Linux & Open Source : Lezione 1
Linux & Open Source : Lezione 1
 
Backup e restore - rdiff backup
Backup e restore - rdiff backupBackup e restore - rdiff backup
Backup e restore - rdiff backup
 
Hosting Backup, quali opzioni e quali costi ci aspettano - #TipOfTheDay
Hosting Backup, quali opzioni e quali costi ci aspettano - #TipOfTheDayHosting Backup, quali opzioni e quali costi ci aspettano - #TipOfTheDay
Hosting Backup, quali opzioni e quali costi ci aspettano - #TipOfTheDay
 
Giochiamo ai COW-boy : zfs & btrfs
Giochiamo ai COW-boy : zfs & btrfsGiochiamo ai COW-boy : zfs & btrfs
Giochiamo ai COW-boy : zfs & btrfs
 
Pacchi e pacchetti
Pacchi e pacchettiPacchi e pacchetti
Pacchi e pacchetti
 
Apcamp
ApcampApcamp
Apcamp
 
2 backup dei_dati
2 backup dei_dati2 backup dei_dati
2 backup dei_dati
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compatta
 
Elaborazione automatica dei dati: calcolatore e matlab
Elaborazione automatica dei dati: calcolatore e matlabElaborazione automatica dei dati: calcolatore e matlab
Elaborazione automatica dei dati: calcolatore e matlab
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2
 
100526 Sa 1.1 Platespin Forge Webinar (2)
100526 Sa 1.1 Platespin Forge Webinar (2)100526 Sa 1.1 Platespin Forge Webinar (2)
100526 Sa 1.1 Platespin Forge Webinar (2)
 
Service Backup Online
Service Backup OnlineService Backup Online
Service Backup Online
 
Performance dei sistemi di calcolo
Performance dei sistemi di calcoloPerformance dei sistemi di calcolo
Performance dei sistemi di calcolo
 
Clustering Magento
Clustering MagentoClustering Magento
Clustering Magento
 
Sistemioperativi
SistemioperativiSistemioperativi
Sistemioperativi
 
Corso linux base
Corso linux baseCorso linux base
Corso linux base
 
APT per RPM
APT per RPMAPT per RPM
APT per RPM
 
Da Oracle a PostgreSQL: l'evoluzione dei RDBMS
Da Oracle a PostgreSQL: l'evoluzione dei RDBMSDa Oracle a PostgreSQL: l'evoluzione dei RDBMS
Da Oracle a PostgreSQL: l'evoluzione dei RDBMS
 

More from PgTraining

Webminar del 12.03.2012
Webminar del 12.03.2012Webminar del 12.03.2012
Webminar del 12.03.2012PgTraining
 
Weminar 12.03.2021 . JIT
Weminar 12.03.2021 . JITWeminar 12.03.2021 . JIT
Weminar 12.03.2021 . JITPgTraining
 
Love Your Database (ESC 2k16)
Love Your Database (ESC 2k16)Love Your Database (ESC 2k16)
Love Your Database (ESC 2k16)PgTraining
 
Oracle to Postgres Migration - part 2
Oracle to Postgres Migration - part 2Oracle to Postgres Migration - part 2
Oracle to Postgres Migration - part 2PgTraining
 
Oracle to Postgres Migration - part 1
Oracle to Postgres Migration - part 1Oracle to Postgres Migration - part 1
Oracle to Postgres Migration - part 1PgTraining
 
Openday - PostgreSQL: primi passi con Json/Jsonb
Openday - PostgreSQL: primi passi con Json/Jsonb Openday - PostgreSQL: primi passi con Json/Jsonb
Openday - PostgreSQL: primi passi con Json/Jsonb PgTraining
 
Pgtraining bdr
Pgtraining bdrPgtraining bdr
Pgtraining bdrPgTraining
 

More from PgTraining (8)

Webminar del 12.03.2012
Webminar del 12.03.2012Webminar del 12.03.2012
Webminar del 12.03.2012
 
Weminar 12.03.2021 . JIT
Weminar 12.03.2021 . JITWeminar 12.03.2021 . JIT
Weminar 12.03.2021 . JIT
 
Love Your Database (ESC 2k16)
Love Your Database (ESC 2k16)Love Your Database (ESC 2k16)
Love Your Database (ESC 2k16)
 
Oracle to Postgres Migration - part 2
Oracle to Postgres Migration - part 2Oracle to Postgres Migration - part 2
Oracle to Postgres Migration - part 2
 
Oracle to Postgres Migration - part 1
Oracle to Postgres Migration - part 1Oracle to Postgres Migration - part 1
Oracle to Postgres Migration - part 1
 
Openday - PostgreSQL: primi passi con Json/Jsonb
Openday - PostgreSQL: primi passi con Json/Jsonb Openday - PostgreSQL: primi passi con Json/Jsonb
Openday - PostgreSQL: primi passi con Json/Jsonb
 
Pgtraining bdr
Pgtraining bdrPgtraining bdr
Pgtraining bdr
 
Messa in rete
Messa in reteMessa in rete
Messa in rete
 

Webminar del 12.03.2012

  • 1. pgBackRest backup adabili e veloci ing. Luca Ferrari, PhD uca1978 https://fluca1978.github.io 12 Marzo 2021 ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 1 / 32
  • 2. Attribution-NonCommercial-ShareAlike 4.0 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 2 / 32
  • 3. Who Am I? prima versione PostgreSQL usata: 7.3 (anno 2003)! appassionato di Open Source Perl, Raku, Unix, Emacs! Java, PHP, Oracle . . . Università degli Studi di Modena e Reggio Emilia (PhD, tutor, . . . ) Nipissing University (Adjunct Professor) https://fluca1978.github.io ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 3 / 32
  • 4. Libri ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 4 / 32
  • 5. Backup Un backup è una copia di sicurezza dei dati. Un backup deve essere: sicuro e adabile, nessuno vuole scoprire di non avere un backup completo quando serve, né di aver avuto un data leak per colpa dei propri backup; veloce, soprattutto per il restore; non invasivo, perché non vogliamo fermare i nostri sistemi per fare una copia potenzialmente mai utilizzata. ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 5 / 32
  • 6. Restore Il processo inverso di un backup: ripristina i dati ad un punto precedente nel tempo. Potenzialmente si vuole poter tornare ad un attimo fa (Recovery Point Objective - RPO - pari a zero). Potenzialmente si vuole poter eettuare un ripristino in un lampo (Recovery Time Objective - RTO - pari a zero). La realtà è ovviamente un compromesso fra i due valori di cui sopra. ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 6 / 32
  • 7. Strumenti di Backup (e Restore) PostgreSQL è un sistema completo: fornisce strumenti per il backup e il restore (pg_dump, pg_restore, pg_dumpall). Si tratta di backup logici. Non sempre sono la soluzione migliore: sono invasivi, richiedono tempo proporzionale alla dimensione del database/cluster. Soluzione possibile: backup sico (hot backup, backup a caldo, basebackup, ...): si fa una copia a livello di lesystem della directory PGDATA mentre il sistema è in funzione, poi si archiviano i segmenti WAL necessari a consolidare tale copia. Il restore consiste nel mescolare la PGDATA e i segmenti di WAL simulando un crash recovery. pgbackrest eettua backup sici! ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 7 / 32
  • 8. Infrastruttura di esempio ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 8 / 32
  • 9. Parallelismo! PgBackRest nasce con il concetto di parallelismo in mente: le operazioni di restore devono essere veloci e parallele (o parallelizzabili). Molti tool di backup si avvalgono di rsync(1) ma questo non è uno strumento eciente per il backup dei database: non supporta bene il parallelismo, la compressione è both-sides e ha il problema della risluzione del tempo a 1 secondo. PgBackRest decide di implementare la propria strategia di copia fortemente integrata con PostgreSQL per risolvere i problemi piu' comuni e permettere quindi un'esperienza migliore con database molto grandi. pgbackrest si prende in carico il backup, ma vuole comandare! Occorre che la stessa versione sia installata sulle macchine! ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 9 / 32
  • 10. Features Principali PgBackRest supporta, fra le altre, alcune feature molto interessanti: backup full, incrementali e dierenziali con la possibilità di cancellare backup intermedi e riallocare i backup collegandoli fra loro. delta restore, si eettua il restore solo dei le eettivamente modicati; restore parziale, possibilità di eettuare il restore di un solo database all'interno dell'intero cluster; compressione e streaming, i le devono essere toccati il meno possibile; cifratura, perché anche i backup non devono consentire data-leak; ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 10 / 32
  • 11. Concetti Generali pgBackRest opera sul concetto di stanza e di repository. Una stanza è una congurazione di un server remoto per il backup, di fatto è un insieme di target da sottoporre a backup. Un repository è uno storage locale o remoto (SSH) sul quale salvare i backup. Il repository può essere cifrato. ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 11 / 32
  • 12. Tipologie di backup Sono supportati tre tipi di backup: full è il primo backup o comunque un backup totale, e quindi occupa piu' spazio; incr (incrementale) è un backup basato sulle dierenze dall'ultimo backup valido (che può essere a sua volta full o incr); di (delta) è un backup di tipo incr ma basato sempre sull'ultimo full realizzato. In default il backup è sempre incr (dierenze dall'ultimo backup) a parte il primo che viene sempre fatto come full. I backup non full dipendono da altri backup (questo è importante per la retention). ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 12 / 32
  • 13. Struttura del repository La struttura del repository è interessante: pgBackRest archivia il backup con la stessa struttura di una PGDATA. % cd /backup/pgbackrest/ % sudo ls backup/miguel/20210207-151554F/pg_data backup_label.gz global pg_hba.conf.gz pg_tblspc base log pg_hba.conf~.gz pg_twophase conf.d pg_commit_ts pg_ident.conf.gz PG_VERSION.gz current_logfiles.gz pg_dynshmem pg_logical pg_wal ... ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 13 / 32
  • 14. Schema di funzionamento ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 14 / 32
  • 15. Congurazione: Concetti Il le principale di congurazione è /etc/pgbackrest.conf: le ini tre sezioni particolari: globale contiene tutte le opzioni impostate a livello globale per il funzionamento (es. log); repository contiene le informazioni sullo storage da usare; stanza contiene le impostazioni di un determinato set di backup. La stanza può contenere piu' server, nel qual caso il primo (pg1) è il master, gli altri sono considerati standby. Un repository può contenere piu' denizioni, ma solo la prima (repo1) è attualmente supportata. Ogni parametro specicato nel le di congurazione può essere sovrascritto dal relativo parametro fornito su linea di comando. ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 15 / 32
  • 16. Simmetria pgBackRest è simmetrico: praticamente ogni comando può essere eseguito sulla macchina di backup o sulla machina target. luca@miguel ~ % pgbackrest --stanza=miguel info stanza: miguel status: ok cipher: none db (current) wal archive min/max (11-1): 0000000500000213000000D6/0000000600000213000000DA ... luca@carmensita ~ % pgbackrest --stanza=miguel info stanza: miguel status: ok cipher: none db (current) wal archive min/max (11-1): 0000000500000213000000D6/0000000600000213000000DA ... ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 16 / 32
  • 17. Backup Il primo backup deve essere sempre full. La stanza deve essere stata creata sul repository con il comando stanza-create. E' possibile specicare il tipo di backup con l'opzione type, ma se non viene trovato un backup full viene eseguito in automatico: % pgbackrest --stanza miguel --log-level-console info backup ... P00 INFO: full backup size = 228.9MB P00 INFO: execute non-exclusive pg_stop_backup() and wait for all WAL segments to archive P00 INFO: backup stop archive = 0000000500000213000000AA, lsn = 213/AA00 P00 INFO: new backup label = 20210309-123110F P00 INFO: backup command end: completed successfully (108290ms) ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 17 / 32
  • 18. Backup Interrotti Se un backup viene interrotto, per qualunque motivo, il software tenta di recuperare quanto già trasferito: % pgbackrest --stanza miguel backup ^C % pgbackrest --stanza miguel backup WARN: resumable backup 20210207-151554F_20210309-122738I of same type exists -- remove invalid files and resume L'opzione che controlla il resume dei backup interrotti è --resume (e il contrario --no-resume. ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 18 / 32
  • 19. Cancellazione di un backup Si deve usare la retention policy e/o il comando expire. Non esiste un comando per la cancellazione di un backup. ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 19 / 32
  • 20. Retention Policy Le possibili opzioni sono: repo-retention-full il numero di backup full da conservare. Il valore dipende da repo-retention-full-type che può valere time per indicare che si tratta di giorni; count per indicare che si tratta di backup; repo-retention-diff se impostato indica il numero di backup dierenziali da conservare; repo-retention-archive indica quali WAL sono rimovibili, a patto che sia rispettato repo-retention-full; repo-retention-archive-type vale full, incr o diff e indica quanti WAL relativi a repo-retention-archive devono essere mantenuti. I valori repo-retention-archive e repo-retention-archive-type servono solo a riparmiare spazio disco in situazioni particolari, ma il loro utilizzo pregiudica il PITR! ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 20 / 32
  • 21. Retention Policy in azione Al termine di una operazione di backup, e quindi quando pgBackRest è sicuro di avere una nuova copia, viene applicato l'expiring dei backup presenti. La rimozione di un backup produce la rimozione anche dei backup collegati, ad esempio la rimozione di un backup full comporta l'eliminazione anche degli incrementali che su di esso dipendono: % pgbackrest --stanza miguel --type full backup ... INFO: new backup label = 20210309-123434F INFO: backup command end: completed successfully (120011ms) ... INFO: remove expired backup repo1: 20210207-151554F_20210309-122738I INFO: remove expired backup repo1: 20210207-151554F_20210219-122236I INFO: remove expired backup repo1: 20210207-151554F_20210219-112719I INFO: remove expired backup repo1: 20210207-151554F_20210207-153442I INFO: remove expired backup repo1: 20210207-151554F ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 21 / 32
  • 22. Informazioni di backup Il comando info fornisce informazioni sui backup. Accetta eventualmente la stanza. % pgbackrest info stanza: miguel status: ok cipher: none db (current) wal archive min/max (12): 000000010000000300000099/000000010000000300 full backup: 20210309-123110F timestamp start/stop: 2021-03-09 12:31:10 / 2021-03-09 12:32:58 wal start/stop: 000000010000000300000099 / 0000000100000003000000 database size: 2GB, database backup size: 2GB repo1: backup set size: 181.5MB, backup size: 181.5MB full backup: 20210309-123434F timestamp start/stop: 2021-03-09 12:34:34 / 2021-03-09 12:36:32 wal start/stop: 00000001000000030000009B / 0000000100000003000000 database size: 2GB, database backup size: 2GB repo1: backup set size: 181.5MB, backup size: 181.5MB ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 22 / 32
  • 23. Backup da uno standby E' possibile abilitare il backup da un nodo standby mediante l'opzione --backup-standby: % cat /etc/pgbackrest.conf ... [miguel] pg1-host = miguel pg1-path = /postgres/12/data pg1-host-user = postgres pg2-host = miguel-replica pg2-path = /postgres/12/data pg2-host-user = postgres % pgbackrest --stanza miguel backup --backup-standby ... ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 23 / 32
  • 24. Restore su macchina remota Il restore va fatto sulla macchina che ospiterà il cluster: luca@miguel ~ % sudo -u postgres pgbackrest --config=/usr/local/etc/pgbackrest.conf --stanza=miguel --pg1-path=/postgres/12/restore restore ... INFO: write updated /postgres/12/restore/postgresql.auto.conf INFO: restore global/pg_control (performed last to ensure aborted restores cannot be started) INFO: restore command end: completed successfully (25235ms) ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 24 / 32
  • 25. Recupero dei WAL Il comando restore crea un le recovery.conf (versioni vecchie di PostgreSQL) o recovery.signal (assieme alle opzioni in postgresql.auto.conf) per ottenere i WAL: % sudo cat /postgres/12/restore/postgresql.auto.conf # Recovery settings generated by pgBackRest restore on 2021-03-09 15:54:59 restore_command = ’pgbackrest --config=/usr/local/etc/pgbackrest.conf --pg1-path=/postgres/12/restore --stanza=miguel archive-get %f %p’ ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 25 / 32
  • 26. Specicare da quale backup partire per il restore In default si prende latest, ossia l'ultimo backup disponibile. E' possibile specicare un backup specico con l'opzione set: luca@miguel ~ % sudo -u postgres pgbackrest --config=/usr/local/etc/pgbackrest.conf --stanza=miguel --pg1-path=/postgres/12/restore --set 20210309-123434F_20210309-130132I restore ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 26 / 32
  • 27. Delta Restore Recovery veloce su una directory cluster esistente. Si usa l'opzione --delta. luca@miguel ~ % sudo -u postgres pgbackrest --config=/usr/local/etc/pgbackrest.conf --stanza=miguel --pg1-path=/postgres/12/restore --set 20210309-123434F_20210309-130132I --delta restore ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 27 / 32
  • 28. Restore parziale (selettivo) E' possibile eettuare il restore di un solo database specico: in sostanza viene eettuato il restore di tutto il cluster, ma gli altri database sono invalidati. % sudo -u postgres pgbackrest --stanza=miguel --log-level-console=info --delta --db-include=digikamdb restore ... INFO: restore command end: completed successfully (4780ms) % psql template1 template1=# c testdb FATAL: relation mapping file base/16385/pg_filenode.map contains invalid data Previous connection kept ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 28 / 32
  • 29. Point in Time Recovery Si usano le opzioni target: % sudo service postgresql stop % sudo -u postgres pgbackrest restore --delta --stanza=main --type=time --target=’2021-02-04 10:07:09.098026+02’ --target-action=promote ... INFO: write updated /postgres/12/restore/postgresql.auto.conf ... ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 29 / 32
  • 30. Compressione E' possibile abilitare la compressione dei le memorizzati nel repository (ogni le sarà .gz), nonché la compressione di rete: [global] ... compress = y compress-level = 9 compress-level-network = 9 ATTENZIONE: se compress = y allora si usa compress-level anche per la trasmissione di rete (ossia compress-level-network è ignorato). se compress = n allora si usa compress-level-network (ovviamente se il database da backuppare è acceduto in modo remoto); ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 30 / 32
  • 31. Cifratura L'unico algoritmo di cifratura supportato è Advanced Encryption Standard con chiave di 256 bit: [global] ... repo1-cipher-type = aes-256-cbc repo1-cipher-pass = aVeryStrongEncryptionPasswordHere ATTENZIONE: la cifratura deve essere applicata su una nuova stanza. ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 31 / 32
  • 32. Conclusioni pgbackrest è un software completo e maturo, fortemente ottimizzato per database di grosse dimensioni. ing. Luca Ferrari, PhD (uca1978) pgBackRest 12 Marzo 2021 32 / 32