PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Utilizzo di Barman per il backup di PostgreSQL:una panoramica

I backup dei database svolgono un ruolo fondamentale nella progettazione di un'efficace strategia di ripristino di emergenza per i database di produzione. Gli amministratori di database e gli architetti devono lavorare continuamente per progettare una strategia di backup ottimale ed efficace per database mission-critical in tempo reale e garantire ulteriormente il rispetto degli SLA per il ripristino di emergenza. Secondo la mia esperienza, questo non è facile e può richiedere da giorni a settimane per ottenere una strategia di backup impeccabile. Semplicemente non sta scrivendo un buon script per eseguire il backup dei database e assicurarsi che funzioni. Ci sono diversi fattori da considerare, diamo un'occhiata a loro:

  • Dimensioni del database: La dimensione del database gioca un ruolo importante nella progettazione di strategie di backup. In effetti, questo è uno dei fattori chiave che definisce
    • Tempo impiegato dal backup
    • Il carico sui componenti dell'infrastruttura come disco, rete, CPU ecc.
    • Quantità di archiviazione di backup richiesta e costi associati
    • Se i database sono ospitati su cloud, i costi di archiviazione di backup dipendono dalla quantità di spazio di archiviazione richiesta
    • Inoltre, le dimensioni del database influiscono sull'RTO
  • Infrastrutture: La strategia di backup si basa fortemente sull'infrastruttura dei database. La procedura di backup sarebbe diversa per i database ospitati su un server fisico in un data center on-premise rispetto a quelli ospitati su cloud.
  • Posizione di backup: Dove stanno andando i backup? In genere, i backup verranno collocati in una posizione remota, ad esempio su nastro o storage specifico su cloud come AWS S3.
  • Strumento di backup: Identificare uno strumento ottimale per eseguire il backup del database online che potenzialmente garantisca che sia stato eseguito un backup coerente.

Una buona strategia di backup del database deve garantire il raggiungimento di RTO (Recovery Time Objective) e RPO (Recovery Point Objective), che a loro volta aiutano a raggiungere l'obiettivo di Disaster Recovery. I backup a livello di file system possono essere eseguiti sui database PostgreSQL in diversi modi. In questo blog, mi concentrerò su uno strumento chiamato Barman, comunemente utilizzato per eseguire backup di database PostgreSQL.

Barman (gestore di backup e ripristino) è uno strumento open source basato su Python sviluppato dagli sviluppatori del 2° quadrante. Questo strumento è stato sviluppato per ottenere una strategia di backup del database di livello aziendale per i database di produzione PostgreSQL mission-critical. Le sue caratteristiche e caratteristiche ricordano quelle di Oracle's RMAN. A mio parere, barman è una delle migliori opzioni per i database PostgreSQL e può offrire numerosi vantaggi dal punto di vista operativo ai DBA e agli ingegneri delle infrastrutture.

Diamo un'occhiata ad alcune capacità di Barman:

Inizierò con la panoramica della configurazione e quindi elencherò il tipo di backup che è possibile eseguire

Tecnicamente, barman-cli è uno strumento basato su Python e ha due diversi file di configurazione da gestire. Un file che è la configurazione effettiva per il database di cui eseguire il backup risiede nei nomi "/etc/barman.d" come .conf e l'altro file che ha i parametri relativi al barman (come posizione dei backup di barman, server barman, file di registro ecc.) configurati risiede in “/etc” (/etc/barman.conf). I file di configurazione del barman hanno una configurazione dei parametri di tipo MySQL.

Il contenuto di esempio del file /etc/barman.conf è mostrato di seguito

[barman]
barman_user = barman            ---------> barman user who performs backup/recovery of database
configuration_files_directory = /etc/barman.d    -----> location for DB configuration files
barman_home = /dbbackups/barman    ---> barman home directory
log_file = /dbbackups/barman/logs/barman.log ---> barman log file location
log_level = INFO  -----> level of logging for barman operations
compression = gzip  ----->  backups must be compressed

Installazione di Barman

Diamo un'occhiata alla procedura di installazione di barman -

Installazione dal sorgente

Scarica il barman da https://www.pgbarman.org/

Decomprimi / decomprimi il programma di installazione ed esegui il seguente comando come utente root -

[[email protected] barman-2.4]# ./setup.py install
/usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'setup_requires'
  warnings.warn(msg)
/usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'install_requires'
  warnings.warn(msg)
/usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'tests_require'
  warnings.warn(msg)
running install
running build
running build_py
creating build
creating build/lib
creating build/lib/barman
copying barman/utils.py -> build/lib/barman
copying barman/fs.py -> build/lib/barman
copying barman/retention_policies.py -> build/lib/barman
copying barman/diagnose.py -> build/lib/barman
copying barman/backup.py -> build/lib/barman
copying barman/recovery_executor.py -> build/lib/barman
copying barman/backup_executor.py -> build/lib/barman
copying barman/config.py -> build/lib/barman
copying barman/process.py -> build/lib/barman
copying barman/output.py -> build/lib/barman
copying barman/__init__.py -> build/lib/barman
copying barman/remote_status.py -> build/lib/barman
copying barman/xlog.py -> build/lib/barman
copying barman/lockfile.py -> build/lib/barman
copying barman/postgres.py -> build/lib/barman
copying barman/server.py -> build/lib/barman
copying barman/cli.py -> build/lib/barman
copying barman/version.py -> build/lib/barman
copying barman/compression.py -> build/lib/barman
copying barman/wal_archiver.py -> build/lib/barman
copying barman/infofile.py -> build/lib/barman
copying barman/exceptions.py -> build/lib/barman
copying barman/hooks.py -> build/lib/barman
copying barman/copy_controller.py -> build/lib/barman
copying barman/command_wrappers.py -> build/lib/barman
running build_scripts
creating build/scripts-2.7
copying and adjusting bin/barman -> build/scripts-2.7
changing mode of build/scripts-2.7/barman from 644 to 755
running install_lib
creating /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/utils.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/fs.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/retention_policies.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/diagnose.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/backup.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/recovery_executor.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/backup_executor.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/config.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/process.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/output.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/__init__.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/remote_status.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/xlog.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/lockfile.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/postgres.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/server.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/cli.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/version.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/compression.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/wal_archiver.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/infofile.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/exceptions.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/hooks.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/copy_controller.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/command_wrappers.py -> /usr/lib/python2.7/site-packages/barman
byte-compiling /usr/lib/python2.7/site-packages/barman/utils.py to utils.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/fs.py to fs.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/retention_policies.py to retention_policies.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/diagnose.py to diagnose.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/backup.py to backup.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/recovery_executor.py to recovery_executor.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/backup_executor.py to backup_executor.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/config.py to config.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/process.py to process.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/output.py to output.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/__init__.py to __init__.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/remote_status.py to remote_status.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/xlog.py to xlog.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/lockfile.py to lockfile.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/postgres.py to postgres.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/server.py to server.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/cli.py to cli.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/version.py to version.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/compression.py to compression.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/wal_archiver.py to wal_archiver.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/infofile.py to infofile.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/exceptions.py to exceptions.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/hooks.py to hooks.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/copy_controller.py to copy_controller.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/command_wrappers.py to command_wrappers.pyc
running install_scripts
copying build/scripts-2.7/barman -> /usr/bin
changing mode of /usr/bin/barman to 755
running install_data
copying doc/barman.1 -> /usr/share/man/man1
copying doc/barman.5 -> /usr/share/man/man5
running install_egg_info
Writing /usr/lib/python2.7/site-packages/barman-2.4-py2.7.egg-info

Installazione dal repository

L'installazione può essere eseguita anche tramite yum come segue

[[email protected]~]$ yum install barman

Diamo un'occhiata ai diversi tipi di backup supportati da barman

Backup fisici a caldo

Barman supporta Physical Hot Backups, il che significa backup online di file di dati fisici e file di registro delle transazioni del database utilizzando la metodologia rsync che può essere anche in forma compressa.

Diamo un'occhiata ai passaggi e ai comandi per eseguire il backup RSYNC utilizzando barman

File di configurazione del database PostgreSQL n. 1 per barman

[pgdb]
description="Main PostgreSQL server"
conninfo=host=pgserver user=postgres dbname=postgres
ssh_command=ssh [email protected]
archiver=on
backup_method = rsync

“pgdb” è l'identificatore del database Postgres per barman e il nome del file di configurazione dovrebbe essere .conf che si trova in /etc/barman.d/. Quando viene eseguito il comando di backup barman, barman cerca la sezione [pgdb] nel file pgdb.conf.

Il parametro backup_method definisce il tipo di backup da eseguire. In questo caso backup_method è rsync.

Nota:affinché il comando barman backup abbia esito positivo, l'autenticazione ssh senza password deve essere configurata tra i server barman e postgres.

Parametri del file postgresql.conf n. 2

wal_level=replica
archive_mode=on
archive_command=’rsync to <ARCHIVE LOCATION>’

Il comando di backup di Barman

#3 Verifica se barman è pronto per eseguire i backup

[[email protected] pgdb]$ barman check pgdb
Server pgdb:
        PostgreSQL: OK
        is_superuser: OK
        wal_level: OK
        directories: OK
        retention policy settings: OK
        backup maximum age: OK (no last_backup_maximum_age provided)
        compression settings: OK
        failed backups: OK (there are 0 failed backups)
        minimum redundancy requirements: OK (have 4 backups, expected at least 0)
        ssh: OK (PostgreSQL server)
        not in recovery: OK
        archive_mode: OK
        archive_command: OK
        continuous archiving: OK
        archiver errors: OK

L'output sopra dice che tutto è "OK" per procedere con il backup, il che significa che sei a posto per eseguire un backup.

Ad esempio, sotto l'output dice che il backup non può essere eseguito perché secondo il barman SSH non funziona -

[[email protected]  ~]$ barman check pgdb
Server pgdb:
        PostgreSQL: OK
        is_superuser: OK
        wal_level: OK
        directories: OK
        retention policy settings: OK
        backup maximum age: OK (no last_backup_maximum_age provided)
        compression settings: OK
        failed backups: OK (there are 0 failed backups)
        minimum redundancy requirements: OK (have 0 backups, expected at least 0)
        ssh: FAILED (Connection failed using '[email protected] -o BatchMode=yes -o StrictHostKeyChecking=no' return code 127)
        not in recovery: OK
        archive_mode: OK
        archive_command: OK
        continuous archiving: OK
        archiver errors: OK

#4 Esegui backup del database

[[email protected] ~]$ barman backup pgdb
Starting backup using rsync-exclusive method for server pgdb in /dbbackup/barman_backups/pgdb/base/20180816T153846
Backup start at LSN: 0/1C000028 (00000001000000000000001C, 00000028)
This is the first backup for server pgdb
WAL segments preceding the current backup have been found:
        00000001000000000000000B from server pgdb has been removed
        00000001000000000000000C from server pgdb has been removed
        00000001000000000000000D from server pgdb has been removed
        00000001000000000000000E from server pgdb has been removed
        00000001000000000000000F from server pgdb has been removed
        000000010000000000000010 from server pgdb has been removed
        000000010000000000000011 from server pgdb has been removed
        000000010000000000000012 from server pgdb has been removed
        000000010000000000000013 from server pgdb has been removed
        000000010000000000000014 from server pgdb has been removed
        000000010000000000000015 from server pgdb has been removed
        000000010000000000000016 from server pgdb has been removed
Starting backup copy via rsync/SSH for 20180816T153846
Copy done (time: 1 second)
This is the first backup for server pgdb
Asking PostgreSQL server to finalize the backup.
Backup size: 21.8 MiB
Backup end at LSN: 0/1C0000F8 (00000001000000000000001C, 000000F8)
Backup completed (start time: 2018-08-16 15:38:46.668492, elapsed time: 1 second)
Processing xlog segments from file archival for pgdb
        000000010000000000000016
        000000010000000000000017
        000000010000000000000018
        000000010000000000000019
        00000001000000000000001A
        00000001000000000000001B
        00000001000000000000001C
        00000001000000000000001C.00000028.backup

Per capire se il comando di backup del barman avrà successo, il comando seguente aiuta -

Backup incrementali

Un'altra grande capacità di Barman è la possibilità di eseguire backup incrementali. Ciò significa che è possibile eseguire il backup solo dei blocchi modificati dall'ultimo backup completo del database. Per i database che subiscono meno modifiche ai dati, il backup incrementale può ridurre l'utilizzo delle risorse.

Dipende fortemente da rsync e hard-link. Di seguito sono riportati i vantaggi dei backup incrementali –

  • Riduce significativamente il tempo di backup giornaliero
  • Il volume dei dati di cui viene eseguito il backup si riduce poiché verrà eseguito il backup solo dei blocchi di dati modificati, il che, a sua volta, riduce l'utilizzo delle risorse dell'infrastruttura come larghezza di banda di rete, spazio su disco, I/O ecc.
  • Se stai cercando di ottenere un ottimo RTO, questa è la funzionalità che cercherai

I comandi per il backup incrementale sono praticamente gli stessi. Eventuali backup successivi dopo il primo backup eseguito con l'opzione backup_method=rsync saranno backup incrementali e barman estrae i WAL utilizzando l'utilità pg_recievexlog.

Backup e ripristino di database remoti

Questa capacità di Barman è altamente vantaggiosa per i DBA secondo me. La prima cosa che i DBA cercherebbero è evitare di stressare il più possibile le risorse del server di database di produzione durante i backup e di eseguirli in remoto sarebbe l'opzione migliore. Barman sfrutta pg_basebackup che rende molto più semplice lo scripting e l'automazione.

In generale, le opzioni tradizionalmente disponibili per i backup automatici saranno -

  1. pg_basebackup
  2. copia tar

Le due opzioni precedenti richiedono molto sviluppo e test per garantire che sia in atto una strategia di backup efficace per soddisfare le richieste degli SLA e possono rappresentare una sfida per database di grandi dimensioni con più tablespace.

Con Barman, è piuttosto semplice. Un'altra capacità eccezionale del barman è lo streaming WAL continuo. Diamo un'occhiata un po' più in dettaglio.

Scarica il whitepaper oggi Gestione e automazione di PostgreSQL con ClusterControlScopri ciò che devi sapere per distribuire, monitorare, gestire e ridimensionare PostgreSQLScarica il whitepaper

Backup in streaming con streaming WAL continuo

Questo rende il barman straordinario rispetto ad altri strumenti sul mercato. I file WAL live possono essere trasmessi in streaming continuamente a una posizione di backup remota utilizzando Barman. Questa è LA FUNZIONE che i DBA sarebbero entusiasti di conoscere. Ero entusiasta di sapere di questo. È estremamente difficile o quasi impossibile ottenere questo risultato con script creati manualmente o con una combinazione di strumenti come pg_basebackup e pg_receivewal. Con lo streaming WAL continuo, è possibile ottenere un RPO migliore. Se la strategia di backup è progettata meticolosamente, non sarebbe esagerato affermare che è possibile raggiungere un RPO quasi 0.

Diamo un'occhiata ai passaggi, ai comandi per eseguire un backup del barman in streaming

Modifiche ai parametri n. 1 postgresql.conf

Segue la configurazione da eseguire in postgresql.conf

wal_level=replica
max_wal_senders = 2
max_replication_slots = 2
synchronous_standby_names = 'barman_receive_wal'
archive_mode=on
archive_command = 'rsync -a %p [email protected]:INCOMING_WAL_DIRECTORY/%f'
archive_timeout=3600 (should not be 0 or disabled)

#2 Crea slot di replica usando il barman

Lo slot di replica è importante per i backup in streaming. Nel caso in cui lo streaming continuo di WAL non riesca per qualsiasi motivo, tutti i WAL non trasmessi in streaming possono essere conservati nel database postgres senza essere rimossi.

[[email protected] ~]$ barman receive-wal --create-slot pgdb
Creating physical replication slot 'barman' on server 'pgdb'
Replication slot 'barman' created

#3 Configura il file di configurazione del server database per barman

L'identificatore del database per il barman è "pgdb". Un file di configurazione chiamato pgdb.conf deve essere creato nella posizione /etc/barman.d/ con i seguenti contenuti

[pgdb]
description="Main PostgreSQL server"
conninfo=host=pgserver user=postgres dbname=postgres
streaming_conninfo=host=pgserver user=barman
backup_method=postgres
archiver=on
incoming_wals_directory=/dbbackups/barman_backups/pgdb/incoming
streaming_archiver=on
slot_name=barman

streaming_conninfo è il parametro da configurare affinché il barman esegua i backup in streaming
backup_method deve essere configurato su "postgres" quando deve essere eseguito il backup in streaming
streaming_archiver deve essere configurato su "on"
slot_name=barman Questo parametro deve essere configurato quando è necessario che il barman utilizzi gli slot di replica. In questo caso il nome dello slot di replica è barman

Una volta completata la configurazione, fai un controllo da barman per assicurarti che i backup in streaming vengano eseguiti correttamente.

#4 Controlla se barman receive-wal funziona correttamente

In generale per il primo barman receive-wal non funziona subito dopo le modifiche alla configurazione, potrebbe verificarsi un errore e il comando di controllo del barman potrebbe mostrare quanto segue -

[[email protected]  archive_status]$ barman check pgdb
Server pgdb:
        PostgreSQL: OK
        is_superuser: OK
        PostgreSQL streaming: OK
        wal_level: OK
        directories: OK
        retention policy settings: OK
        backup maximum age: OK (no last_backup_maximum_age provided)
        compression settings: OK
        failed backups: OK (there are 0 failed backups)
        minimum redundancy requirements: OK (have 0 backups, expected at least 0)
        pg_basebackup: OK
        pg_basebackup compatible: OK
        pg_basebackup supports tablespaces mapping: OK
        archive_mode: OK
        archive_command: OK
        continuous archiving: OK
        pg_receivexlog: OK
        pg_receivexlog compatible: OK
        receive-wal running: FAILED (See the Barman log file for more details)
        archiver errors: OK

Quando esegui barman receive-wal, potrebbe bloccarsi. Affinché la ricezione di wal funzioni correttamente per la prima volta, è necessario eseguire il comando seguente.

[[email protected]  arch_logs]$ barman cron
Starting WAL archiving for server pgdb
Starting streaming archiver for server pgdb

Ora, fai di nuovo un controllo da barista, ora dovrebbe essere a posto.

[[email protected]  arch_logs]$ barman check pgdb
Server pgdb:
        PostgreSQL: OK
        is_superuser: OK
        PostgreSQL streaming: OK
        wal_level: OK
        replication slot: OK
        directories: OK
        retention policy settings: OK
        backup maximum age: OK (no last_backup_maximum_age provided)
        compression settings: OK
        failed backups: OK (there are 0 failed backups)
        minimum redundancy requirements: OK (have 2 backups, expected at least 0)
        pg_basebackup: OK
        pg_basebackup compatible: OK
        pg_basebackup supports tablespaces mapping: OK
        archive_mode: OK
        archive_command: OK
        continuous archiving: OK
        pg_receivexlog: OK
        pg_receivexlog compatible: OK
        receive-wal running: OK
        archiver errors: OK

Se riesci a vedere, lo stato di receivexlog mostra ok. Questo è uno dei problemi che ho dovuto affrontare.

#5 Controlla se il barista è pronto per eseguire i backup

[[email protected] ~]$ barman check pgdb
Server pgdb:
        PostgreSQL: OK
        is_superuser: OK
        PostgreSQL streaming: OK
        wal_level: OK
        replication slot: OK
        directories: OK
        retention policy settings: OK
        backup maximum age: OK (no last_backup_maximum_age provided)
        compression settings: OK
        failed backups: OK (there are 0 failed backups)
        minimum redundancy requirements: OK (have 4 backups, expected at least 0)
        pg_basebackup: OK
        pg_basebackup compatible: OK
        pg_basebackup supports tablespaces mapping: OK
        archive_mode: OK
        archive_command: OK
        continuous archiving: OK
        pg_receivexlog: OK
        pg_receivexlog compatible: OK
        receive-wal running: OK
        archiver errors: OK

#6 Controlla lo stato dello streaming utilizzando barman

[[email protected] pgdb]$ barman replication-status pgdb
Status of streaming clients for server 'pgdb':
  Current LSN on master: 0/250008A8
  Number of streaming clients: 1

  1. #1 Sync WAL streamer
     Application name: barman_receive_wal
     Sync stage      : 3/3 Remote write
     Communication   : TCP/IP
     IP Address      : 192.168.1.10 / Port: 52602 / Host: -
     User name       : barman
     Current state   : streaming (sync)
     Replication slot: barman
     WAL sender PID  : 26592
     Started at      : 2018-08-16 16:03:21.422430+10:00
     Sent LSN   : 0/250008A8 (diff: 0 B)
     Write LSN  : 0/250008A8 (diff: 0 B)
     Flush LSN  : 0/250008A8 (diff: 0 B)

Lo stato sopra indica che il barman è pronto per eseguire il backup in streaming. Esegui il backup come mostrato di seguito -

[[email protected] arch_logs]$ barman backup pgdb
Starting backup using postgres method for server pgdb in /dbbackup/barman_backups/pgdb/base/20180816T160710
Backup start at LSN: 0/1F000528 (00000001000000000000001F, 00000528)
Starting backup copy via pg_basebackup for 20180816T160710
Copy done (time: 1 second)
Finalising the backup.
Backup size: 21.9 MiB
Backup end at LSN: 0/21000000 (000000010000000000000020, 00000000)
Backup completed (start time: 2018-08-16 16:07:10.401526, elapsed time: 1 second)
Processing xlog segments from file archival for pgdb
        00000001000000000000001F
        000000010000000000000020
        000000010000000000000020.00000028.backup
        000000010000000000000021
Processing xlog segments from streaming for pgdb
        00000001000000000000001F
        000000010000000000000020

Backup centralizzati e catalogati

È estremamente vantaggioso per gli ambienti che eseguono più database su più server in un ambiente di rete. Questa è una delle caratteristiche eccezionali di Barman. Ho lavorato in ambienti in tempo reale in cui dovevo gestire, amministrare centinaia di database e ho sempre sentito la necessità di backup centralizzati dei database ed è per questo che Oracle RMAN è diventato popolare per la strategia di backup dei database Oracle e ora Barman lo sta riempiendo spazio per PostgreSQL. Con Barman, gli ingegneri DBA e DevOps possono lavorare per creare un server di backup centralizzato in cui i backup dei database per tutti i database siano mantenuti e convalidati.

Backup catalogati significa che barman mantiene un repository centralizzato in cui vengono mantenuti gli stati di tutti i backup. Puoi controllare i backup disponibili per un database particolare come mostrato di seguito -

[[email protected] ~]$  barman list-backup pgdb
pgdb 20180816T160924 - Thu Aug 16 16:09:25 2018 - Size: 22.0 MiB - WAL Size: 135.7 KiB
pgdb 20180816T160710 - Thu Aug 16 16:07:11 2018 - Size: 21.9 MiB - WAL Size: 105.8 KiB
pgdb 20180816T153913 - Thu Aug 16 15:39:15 2018 - Size: 21.9 MiB - WAL Size: 54.2 KiB
pgdb 20180816T153846 - Thu Aug 16 15:38:48 2018 - Size: 21.9 MiB - WAL Size: 53.0 KiB

Norme di conservazione del backup

Norme di conservazione può essere definito per i backup del database. I backup possono essere resi obsoleti dopo un certo periodo e i backup obsoleti possono essere eliminati di volta in volta.

Ci sono opzioni nel file di configurazione per assicurarsi che i backup vengano conservati e resi obsoleti quando il periodo di conservazione supera -

Il primo parametro da configurare è minimum_redundancy . Configura sempre la ridondanza_minima su>0 per assicurarti che i backup non vengano eliminati accidentalmente.

Esempio:ridondanza_minima =1

  • politiche di conservazione determina per quanto tempo devono essere conservati i backup di base per garantire il rispetto degli SLA per il ripristino di emergenza.
  • wal_retention_policy parametro determinerà per quanto tempo devono essere conservati i backup di wal. Ciò garantisce che l'RPO previsto sia soddisfatto.

Le politiche di conservazione e ridondanza esistenti per un server di database possono essere verificate utilizzando il comando barman check come segue

[[email protected] ~]$ barman check pgdb
Server pgdb:
        PostgreSQL: OK
        is_superuser: OK
        PostgreSQL streaming: OK
        wal_level: OK
        replication slot: OK
        directories: OK
        retention policy settings: OK
        backup maximum age: OK (no last_backup_maximum_age provided)
        compression settings: OK
        failed backups: OK (there are 0 failed backups)
        minimum redundancy requirements: OK (have 4 backups, expected at least 0)
        pg_basebackup: OK
        pg_basebackup compatible: OK
        pg_basebackup supports tablespaces mapping: OK
        archive_mode: OK
        archive_command: OK
        continuous archiving: OK
        pg_receivexlog: OK
        pg_receivexlog compatible: OK
        receive-wal running: OK
        archiver errors: OK

Backup e ripristini paralleli può essere eseguito utilizzando più CPU che rendono davvero più rapidi i backup e i ripristini. Questa funzione è vantaggiosa per database molto grandi con dimensioni fino a TeraByte.

Per eseguire i backup in parallelo, aggiungi la seguente opzione nel file di configurazione del server del database (che è il file /etc/barman.d/pgdb.conf)-

parallel_jobs = 1

Posso concludere dicendo che barman è uno strumento di livello aziendale che può potenzialmente aiutare i DBA a progettare un'efficace strategia di ripristino di emergenza.

Risorse correlate ClusterControl per PostgreSQLUlteriori informazioni Utilizzo di pg_dump e pg_dumpall per eseguire il backup di PostgreSQLLeggi il blog I migliori strumenti di backup per PostgreSQLLeggi il blog Diventa un DBA PostgreSQL - Backup PostgreSQL logici e fisiciLeggi il blog