postgresql postgres backup barman
O Barman é uma ferramenta de backup completa desenvolvida pela 2ndQuadrant. Ele é capaz de fazer backups completos e incrementais, comprimidos, gestão de política de retenção de backups, expurgo automático de segmentos de WAL antigos, entre outras funcionalidades. Também tem boa integração com o repmgr.
A configuração é sobre arquivos estilo ini em /etc/barman.conf e /etc/barman.d,
com ;
(ponto-e-vírgula) iniciando comentários. É comum criar um arquivo de
configuração para cada instância, por exemplo com a instância 'app' identificada
pela seção [app]
do arquivo /etc/barman.d/app.conf
:
[app] ; como o barman consegue acessar a máquina original por ssh ssh_command = ssh postgres@pg-1.local ; como o barman consegue acessar a máquina original por postgres conninfo = host=pg-1.local user=barman dbname=postgres ; modo de backup (concorrente, por rsync e com deduplicação) backup_options = concurrent_backup backup_method = rsync reuse_backup = link ; cria um restore_command na restauração usando barman-wal-restore recovery_options = 'get-wal' ; aceita arquivamento por barman-cli archiver = on ; aceita arquivamento por pg_receivewal streaming_conninfo = host=pg-1.local user=barman streaming_archiver = on slot_name = barman ; política de retenção - os últimos 2 backups válidos são mantidos retention_policy = REDUNDANCY 2 ; política de retenção - backups válidos que restauram ao menos os últimos 5 dias são mantidos ; retention_policy = RECOVERY WINDOW OF 5 DAYS ; caminho para os binários da versão do PostgreSQL path_prefix = "/usr/pgsql-16/bin"
Sobre as configurações:
-
ssh_command
: Comando ssh que é usado pelo Barman para alcançar a máquina de onde o backup é extraído. -
conninfo
: String de conexão usada para iniciar o backup. O usuário da conexão precisa ter acesso de replicação. -
backup_options
,backup_method
,reuse_backup
: O método de backup concorrente por rsync é recomendado; a opção de reuso por link permite backups incrementais (por usar a deduplicação de arquivos entre backups completos disponível no rsync). -
recovery_options
: Opções de recuperação, que permitem que restaurações busquem WAL do Barman. -
archiver
: Habilita arquivamento porarchive_command
. -
streaming_archiver
Habilita arquivamento por streaming através depg_receivewal
. -
streaming_conninfo
eslot_name
: String de conexão e slot de replicação da conexão usada para arquivamento por streaming, que deve ser feita com um usuário com permissão de replicação. -
retention_policy
: Política de retenção de backups, mantendo uma quantidade de backups passados válidos ('REDUNDANCY 2') ou mantendo backups necessários para restauração no período especificado ('RETENTION WINDOW OF 2 WEEKS', por exemplo). -
path_prefix
: Caminho para os binários do PostgreSQL da mesma versão majoritária da instância, onde o Barman pode encontrar opg_receivewal
e outros programas.
Todos os comandos do Barman aceitam o nome da instância como primeiro argumento ('app', como no exemplo). Em alguns, como 'check' e 'backup', é possível usar 'all' para indicar que a operação deve ser aplicada a todas as instâncias configuradas no Barman.
O comando barman check
faz uma validação das configurações e mostra um
relatório listando problemas:
[barman@pg-a ~]$ barman check app Server app: 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 0 backups, expected at least 0) ssh: OK (PostgreSQL server) systemid coherence: OK (no system Id stored on disk) pg_receivexlog: OK pg_receivexlog compatible: OK receive-wal running: OK archive_mode: OK archive_command: OK continuous archiving: OK archiver errors: OK
Mais detalhes sobre cada erro podem ser encontrados no log
/var/log/barman/barman.log
.
O comando barman backup
é usado para gerar um novo backup da instância:
[barman@pg-a ~]$ barman backup app Starting backup using rsync-concurrent method for server app in /var/lib/barman/app/base/20240530T013618 Backup start at LSN: 0/3000028 (000000010000000000000003, 00000028) This is the first backup for server app WAL segments preceding the current backup have been found: 000000010000000000000001 from server app has been removed Starting backup copy via rsync/SSH for 20240530T013618 Copy done (time: 2 seconds) This is the first backup for server app Asking PostgreSQL server to finalize the backup. Backup size: 31.0 MiB. Actual size on disk: 31.0 MiB (-0.00% deduplication ratio). Backup end at LSN: 0/3000138 (000000010000000000000003, 00000138) Backup completed (start time: 2024-05-30 01:36:19.040241, elapsed time: 5 seconds) Processing xlog segments from streaming for app 000000010000000000000002 Processing xlog segments from file archival for app 000000010000000000000002 000000010000000000000003 000000010000000000000003.00000028.backup
Backups podem ser listados com barman list-backup
:
[barman@pg-a ~]$ barman list-backup app app 20240530T013618 - Sat May 30 01:36:22 2024 - Size: 47.0 MiB - WAL Size: 0 B
O Barman não agenda backups, mas podemos gerar backups periodicamente agendando
no crontab, pelo usuário barman: 0 0 * * * barman backup all
.
Para restaurar um backup na mesma máquina de origem, forneça o nome da instância, o identificador do backup (ou 'latest' para restaurar o mais recente) e o caminho de destino no servidor remoto:
[barman@pg-a ~]$ barman recover app 20240530T013618 16/data_restaurado
Para restaurar o backup em outra máquina, forneça também o ssh_command
:
[barman@pg-a ~]$ barman recover app latest 16/data --remote-ssh-command 'ssh postgres@pg-2.local'
A forma ideal de fazer o arquivamento de segmentos de WAL é com um comando que
garante a escrita em disco no destino. O Barman traz um comando
barman-wal-archive
para esse arquivamento (e outro de restauração
barman-wal-restore
). É necessário informar o hostname ou IP da máquina do
barman, seguido do nome da instância, como reconhecida pelo Barman, assim como o
caminho para o segmento a ser arquivado (%p
). Por exemplo:
archive_command = 'barman-wal-archive pg-a.local app %p'
Instale e configure o Barman na máquina pg-a, obtendo um backup da máquina pg-1 e restaurando na máquina pg-2. Configure o arquivamento dos segmentos e o envio de WAL por streaming com slot de replicação:
-
Instale o pacote
barman
e o PostgreSQL na máquina pg-a -
Instale o pacote
barman-cli
na máquina pg-1 e pg-2 - Crie um slot de replicação na máquina pg-1
- Crie um usuário (superusuário e replicação) para o barman, com senha
- Crie as chaves e estabeleça a confiança entre postgres@pg-1, postgres@pg-2 e barman@pg-a
-
Configure o primário para arquivar para o Barman:
-
archive_mode = on
-
archive_command = 'barman-wal-archive pg-a.local app %p'
-
-
Configure o primário para autenticar conexões da rede local por senha (md5 ou
scram-sha-256):
-
host all all samenet md5
-
host replication all samenet md5
-
- Faça o backup de pg-1
- Restaure o backup em pg-2