Professional Documents
Culture Documents
de Backups
com pgbarman
● O que é
Barman (Backup and Recovery Manager) é uma ferramenta open source
de administração para recuperação de disastre de servidores PostgreSQL
escrita em Python.
Permite fazer backups remotos de múltiplos servidores em ambientes
críticos de negócios e auxilia DBAs durante a fase de recuperação.
Dentre seus mais úteis recursos incluem backup de catálogos, políticas de
retenção, recuperação remota, arquivamento e compressão de arquivos de
WAL.
O Barman foi desenvolvido e é mantido pelos profissionais PostgreSQL da
2ndQuadrant.
Apresentação
● Características e Objetivos
● Características e Objetivos
➔ Hook scripts de backup (pre/post);
➔ Armazenamento local de metadados;
➔ Um simples arquivo INI de configuração;
➔ Point-In-Time-Recovery (PITR);
➔ Backup remoto de um servidor PostgreSQL;
➔ Gerenciamento de backups da base e arquivos de WAL por um catálogo;
➔ Totalmente escrito em Python;
➔ Informações gerais de uso de disco de backup;
➔ Diagnósticos do servidor para backup;
➔ rsync sobre ssh para sincronização de arquivos e transferências.
Apresentação
● Licença
Barman é propriedade exclusiva da 2ndQuadrant Itália e seu código é
distribuído sob a licença GPLv3.
Contribuições ao Barman são bem vindas, e serão listadas no arquivo
AUTHORS.
Apresentação
● Suporte
Site oficial: http://www.pgbarman.org
Blog: http://www.pgbarman.org/blog/
Lista de discussão: https://groups.google.com/group/pgbarman
Canal IRC: irc://irc.freenode.net/barman
Suporte de Serviços da 2ndQuadrant
FAQ: http://www.pgbarman.org/FAQ/
Documentação oficial: http://www.pgbarman.org/documentation/
Cenário de Testes
● Requisitos do Sistema
➔ Linux/Unix
➔ Python 2.6 or 2.7
➔ Módulos Python:
➔ argcomplete
➔ argh >= 0.21.2
➔ psycopg2 (driver PostgreSQL para Python)
➔ python-dateutil < 2.0 (desde a versão 2.0 requer Python 3)
➔ distribute (optional)
➔ PostgreSQL >= 8.4
➔ rsync >= 3.0.4
Instalação
● Linux
➔ Via Código Fonte
Respectivamente, criação de grupo* e usuário* de sistema:
# groupadd g 105 barman
# useradd u 102 g barman s /bin/bash d /var/lib/barman \
k /etc/skel m barman
# aptitude y install \
python{argcomplete,argh,argparse,dateutil,psycopg2} \
rsync bashcompletion postgresqlclient9.2
● Linux
➔ Via Código Fonte
Baixando o código-fonte:
# cd /usr/src/
# wget c \
http://tenet.dl.sourceforge.net/project/pgbarman/1.2.2/barman
1.2.2.tar.gz
Instalação
● Linux
➔ Via Código Fonte
Descompactação:
# tar xvf barman1.2.2.tar.gz
Entrar no diretório do código fonte:
# cd barman1.2.2/
● Linux
➔ Via Código Fonte
Cópia dos arquivos de manuais para os respectivos diretórios:
# cp doc/barman.1 /usr/local/man/man1/
# cp doc/barman.5 /usr/local/man/man5/
● Linux
➔ Via Código Fonte
Cópia do arquivo de configuração para o diretório do usuário de sistema
barman:
# cp doc/barman.conf ~barman/
# chown R barman: ~barman /etc/barman.d /var/log/barman
Instalação
● Linux
➔ Via Código Fonte
Utilizando o usuário de sistema barman para testar o man:
# su barman
$ man barman
$ man 5 barman
$ mkdir pm 0700 /var/lib/barman/bkp/pg/incoming/
Instalação
# su postgres
$ psql c "CREATE ROLE barman LOGIN SUPERUSER PASSWORD 'senha';"
$ sshkeygen t rsa P '' f ~/.ssh/id_rsa
Usuário barman
Usuário postgres
Configuração
$ cat ~barman/.ssh/id_rsa.pub | ssh root@pg "cat >>
~postgres/.ssh/authorized_keys"
$ ssh root@pg "chown R postgres: ~postgres/.ssh"
Configuração
ssh root@pg "chmod 0700 ~postgres/.ssh"
$ ssh root@pg "chmod 0600 R ~postgres/.ssh/*"
Configuração
$ cat ~postgres/.ssh/id_rsa.pub | ssh root@backup "cat >>
~barman/.ssh/authorized_keys"
$ ssh root@backup "chown R barman: ~barman/.ssh"
Configuração
ssh root@backup "chmod 0700 ~barman/.ssh"
$ ssh root@backup "chmod 0600 R ~barman/.ssh/*"
Configuração
$ ssh barman@backup
$ ssh postgres@pg
Configuração
● Diretório de Backup
● Configuração Básica
No diretório doc (dentro do diretório dos sources) há um arquivo com
configurações mínimas, que deve ser usado como modelo para
/etc/barman.conf ou ~/.barman.conf.
● Configuração Básica
- Uma seção para cada servidor PostgreSQL, cada uma identificada por uma
etiqueta.
"all" e "barman" são palavras reservadas e não podem ser usadas como
labels de servidores
Configuração
● Configuração Básica
Caso contrário, pode ser utilizado o padrão do Barman que é especificar várias
seções no mesmo arquivo de configuração
Configuração
● Arquivo /etc/barman.conf
; Barman, Backup and Recovery Manager for PostgreSQL
; http://www.pgbarman.org/ http://www.2ndQuadrant.com/
;
; Main configuration file
[barman]
; Diretório principal
barman_home = /var/lib/barman/bkp
; Usuário de sistema
barman_user = barman
; Arquivo de log
log_file = /var/log/barman/barman.log
; Compressão padrão: valores possíveis são None (padrão), bzip2, gzip ou custom
compression = gzip
Continua...
Configuração
● Arquivo /etc/barman.conf
; Scripts hook de backup Pre/post
;pre_backup_script = env | grep ^BARMAN
;post_backup_script = env | grep ^BARMAN
; Diretório de arquivos de configuração.
; Coloque suas seções em arquivos separados com a extensão .conf
configuration_files_directory = /etc/barman.d
; Minimum number of required backups (redundancy)
minimum_redundancy = 0
...
; Global retention policy (REDUNDANCY or RECOVERY WINDOW) default empty
retention_policy =
; Global bandwidth limit in KBPS default 0 (meaning no limit)
bandwidth_limit = 0
Configuração
● Arquivo /etc/barman.d/pg.conf
; Configuração do Servidor Postgres pg
[pg]
; Descrição
description = "Servidor PostgreSQL pg"
; Opções SSH
ssh_command = ssh postgres@pg
; String de conexão PostgreSQL
conninfo = host=pg user=barman password=senha dbname=postgres
;Compressão customizada
compression = custom
custom_compression_filter = xz z9
custom_decompression_filter = xz d
Continua...
Configuração
● Arquivo /etc/barman.d/pg.conf
; Número mínimo de backups mantidos
minimum_redundancy = 0
; Política de retenção
retention_policy =
● Servidores
➔ Listando os Servidores
$ barman listserver
pg – Servidor PostgreSQL pg
Uso do pgbarman
● Servidores
● Mostra a Configuração de um Servidor
$ barman showserver pg
Server pg:
active: true
description: Servidor PostgreSQL pg
ssh_command: ssh postgres@pg
conninfo: host=pg user=barman password=senha dbname=postgres
backup_directory: /var/lib/barman/bkp/pg
basebackups_directory: /var/lib/barman/bkp/pg/base
wals_directory: /var/lib/barman/bkp/pg/wals
incoming_wals_directory: /var/lib/barman/bkp/pg/incoming
lock_file: /var/lib/barman/bkp/pg/pg.lock
compression: custom
custom_compression_filter: xz z9
custom_decompression_filter: xz d
Continua...
Uso do pgbarman
● Servidores
● Mostra a Configuração de um Servidor
retention_policy_mode: auto
retention_policy:
wal_retention_policy: main
pre_backup_script: None
post_backup_script: None
minimum_redundancy: 0
bandwidth_limit: 0
tablespace_bandwidth_limit: None
current_xlog: 000000020000000000000013
last_shipped_wal: None
archive_command: scp %p barman@backup:/var/lib/barman/bkp/pg/incoming/%f
server_txt_version: 9.2.4
data_directory: /var/lib/postgresql/9.2/main
archive_mode: on
config_file: /etc/postgresql/9.2/main/postgresql.conf
hba_file: /etc/postgresql/9.2/main/pg_hba.conf
ident_file: /etc/postgresql/9.2/main/pg_ident.conf
Uso do pgbarman
● Servidores
● Checagem de Diagnóstico
$ barman check pg
Server pg:
ssh: OK
PostgreSQL: OK
archive_mode: OK
archive_command: OK
directories: OK
retention policy settings: OK
compression settings: OK
minimum redundancy requirements: OK (have 5 backups, expected at least 0)
Uso do pgbarman
● Backups
● Backup IDs
<data>T<hora>
YYYYmmDDTHHMMSS
Uso do pgbarman
● Backups
YYYYmmDDTHHMMSS
YYYYmmDDTHHMMSS
● Backup IDs
<data>
YYYYY - Ano com quatro dígitos: 2013
mm - Mês com dois dígitos: 05
DD - Dia com dois dígitos: 20
<hora>
● Backups
● Apelidos de Backup IDs
A partir da versão 1.1.12, pode usar qualquer um dos seguintes apelidos para
identificar um backup em particular para um dado servidor.
De acordo com a ordem cronológica:
Esses apelidos podem ser usados com qualquer um dos seguintes comandos
do barman: showbackup, delete, listfiles ou recover.
Uso do pgbarman
● Backups
● Execução de um Backup Completo
$ barman backup pg
Starting backup for server pg in /var/lib/barman/bkp/pg/base/20130721T183941
Backup start at xlog location: 0/14000020 (000000020000000000000014, 00000020)
Copying files.
Copy done.
Asking PostgreSQL server to finalize the backup.
Backup end at xlog location: 0/140000A8 (000000020000000000000014, 000000A8)
Backup completed
Uso do pgbarman
● Backups
● Listando Backups por Servidor
$ barman listbackup pg
pg 20130721T183941 Sun Jul 21 18:39:49 2013 Size: 32.0 MiB WAL Size: 0 B
pg 20130721T161648 Sun Jul 21 16:16:56 2013 Size: 32.0 MiB WAL Size: 0 B
pg 20130719T211849 Fri Jul 19 21:18:58 2013 Size: 32.0 MiB WAL Size: 0 B
pg 20130715T215424 Mon Jul 15 21:54:34 2013 Size: 32.0 MiB WAL Size: 0 B
pg 20130713T103810 Sat Jul 13 10:38:16 2013 Size: 32.0 MiB WAL Size: 0 B
pg 20130713T101241 Sat Jul 13 10:12:48 2013 Size: 32.0 MiB WAL Size: 10.0 MiB
Uso do pgbarman
● Backups
● Exibindo Informações de um Backup
$ barman showbackup pg oldest
Backup 20130713T101241:
Server Name : pg
Status : DONE
PostgreSQL Version: 90204
PGDATA directory : /var/lib/postgresql/9.2/main
Base backup information:
Disk usage : 36.0 MiB
Timeline : 1
Begin WAL : 000000010000000000000005
End WAL : 000000010000000000000005
WAL number : 1
Begin time : 20130713 10:12:41.253963
End time : 20130713 10:12:48.463451
Begin Offset : 32
End Offset : 168
Begin XLOG : 0/5000020
End XLOG : 0/50000A8
Continua...
Uso do pgbarman
● Backups
● Exibindo Informações de um Backup
WAL information:
No of files : 5
Disk usage : 10.0 MiB
Last available : 00000001000000000000000F
Catalog information:
Retention Policy: not enforced
Previous Backup : (this is the oldest base backup)
Next Backup : 20130713T103810
Uso do pgbarman
● Backups
● Listando Arquivos de um Backup
$ barman listfiles pg 20130719T211849
/var/lib/barman/bkp/pg/base/20130719T211849/backup.info
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/PG_VERSION
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/backup_label
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/backup_label.old
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/environment
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/pg_ctl.conf
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/pg_hba.conf
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/pg_ident.conf
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/postgresql.conf
/var/lib/barman/bkp/pg/base/20130719T211849/pgdata/postgresql.conf.origin
. . .
Uso do pgbarman
● Backups
● Apagando um Backup
$ barman delete pg first
Deleting backup 20130713T101241 for server pg
Delete associated WAL segments:
000000010000000000000001
000000010000000000000002
000000010000000000000003
000000010000000000000004
000000010000000000000005
000000010000000000000005.00000020.backup
000000010000000000000006
00000001000000000000000C
00000001000000000000000D
00000001000000000000000E
00000001000000000000000F
Done
Uso do pgbarman
$ barman recover pg 20130719T211849 /tmp/teste
Processing xlog segments for pg
00000002.history
000000020000000000000005
000000020000000000000006
. . .
$ pg_ctl D /tmp/teste
Uso do pgbarman
$ barman recover remotesshcommand="ssh postgres@pg" pg last
/var/lib/postgresql/9.2/main
barman recover remotesshcommand="ssh postgres@pg" pg last
/var/lib/postgresql/9.2/data
Starting remote restore for server pg using backup 20130721T183941
Destination directory: /var/lib/postgresql/9.2/data
Copying the base backup.
Copying required wal segments.
The archive_command was set to 'false' to prevent data losses.
Your PostgreSQL server has been successfully prepared for recovery!
. . .
Uso do pgbarman
$ barman recover remotesshcommand="ssh postgres@pg" targettime "201307
21 19:00:00" pg last /var/lib/postgresql/9.2/main
Starting remote restore for server pg using backup 20130721T183941
Destination directory: /var/lib/postgresql/9.2/main
Doing PITR. Recovery target time: '20130721 19:00:00'
Copying the base backup.
Copying required wal segments.
Generating recovery.conf
. . .
Limitando o Uso de Largura de Banda de I/O
Sintaxe de configuração:
tablespace_bandwidth_limit = tbname:bwlimit[, tbname:bwlimit, ...]
Esse parâmetro aceita uma lista separada de pares que são respectivamente o
nome do tablespace e seu limite correspondente (em kb/s).
$ barman cron
Processing xlog segments for pg
00000003.history
000000030000000000000015
000000030000000000000016
000000030000000000000017
000000030000000000000017.00000020.backup
000000030000000000000018
. . .
Modo de Manutenção
● Compressão do WAL
A compressão dos arquivos do WAL se dá pela execução do comando cron do
barman (como visto anteriormente).
Essa compressão é feita conforme o arquivo de configuração (global ou por
servidor).
O parâmetro compression aceita três opções:
➔ gzip: Compressão Gzip (requer gzip);
➔ bzip2: Compressão Bzip2 (requer bzip2);
➔ custom: Para compressão customizada, que requer mais dois parâmetros:
➔ custom_compression_filter: Filtro de compressão;
➔ custom_decompression_filter: Filtro de descompressão.
Modo de Manutenção
Importante: Tomar cuidado para que políticas de retenção não conflitem com a
redundância mínima de segurança.
Verifique os logs do Barman regularmente sobre isso.
Modo de Manutenção
● Políticas de Retenção
● Políticas de Retenção
● Baseada em Redundância
retention_policy = REDUNDANCY 3
● Políticas de Retenção
● Baseada em Redundância
$ barman listbackup pg
pg 20130721T195414 Sun Jul 21 19:54:20 2013 Size: 32.0 MiB WAL Size: 0 B
pg 20130721T183941 Sun Jul 21 18:39:49 2013 Size: 32.0 MiB WAL Size: 2.0 KiB
pg 20130721T161648 Sun Jul 21 16:16:56 2013 Size: 32.0 MiB WAL Size: 3.0 MiB
pg 20130719T211849 Fri Jul 19 21:18:58 2013 Size: 32.0 MiB WAL Size: 5.0 KiB OBSOLETE
pg 20130715T215424 Mon Jul 15 21:54:34 2013 Size: 32.0 MiB WAL Size: 3.0 MiB OBSOLETE
pg 20130713T103810 Sat Jul 13 10:38:16 2013 Size: 32.0 MiB WAL Size: 1.0 MiB OBSOLETE
● Políticas de Retenção
● Baseada em Janela de Recuperação
retention_policy = RECOVERY WINDOW OF 1 WEEKS
● Políticas de Retenção
● Baseada em Janela de Recuperação
$ barman listbackup pg
pg 20130728T110724 Sun Jul 28 11:07:34 2013 Size: 32.0 MiB WAL Size: 0 B
pg 20130725T205248 Thu Jul 25 20:52:58 2013 Size: 32.0 MiB WAL Size: 0 B
pg 20130723T231858 Tue Jul 23 23:19:05 2013 Size: 32.0 MiB WAL Size: 0 B
pg 20130721T183941 Sun Jul 21 18:39:49 2013 Size: 32.0 MiB WAL Size: 2.0 KiB
pg 20130721T161648 Sun Jul 21 16:16:56 2013 Size: 32.0 MiB WAL Size: 3.0 MiB OBSOLETE
pg 20130719T211849 Fri Jul 19 21:18:58 2013 Size: 32.0 MiB WAL Size: 5.0 KiB OBSOLETE
pg 20130715T215424 Mon Jul 15 21:54:34 2013 Size: 32.0 MiB WAL Size: 3.0 MiB OBSOLETE
pg 20130713T103810 Sat Jul 13 10:38:16 2013 Size: 32.0 MiB WAL Size: 1.0 MiB OBSOLETE
Modo de Manutenção
● Configuração e Sintaxe
A partir da versão 1.1.0, o Barman permite ao DBA rodar hook scripts antes
e depois de um backup.
Podem ser configurados na configuração global ou ser sobrescrita por
configurações individuais de servidores.
● !! Backup incremental !!
● ! Suporte a streaming replication !
● Sandbox recovery, com a opção --pgdump
● Integração com o ambiente Amazon S3
● Versão Windows (e precisa???)
Obrigado! :)
Juliano Atanazio
juliano.atanazio@serpro.gov.br