gerenciamento de backups postgresql com pgbarman

62

Click here to load reader

Upload: juliano-atanazio

Post on 14-Jun-2015

1.754 views

Category:

Technology


85 download

DESCRIPTION

Tutorial desde a instalação a aplicações práticas do pgbarman. Apresentação feita originalmente como palestra no evento nacional de PostgreSQL (PgBr 2013.

TRANSCRIPT

Page 1: Gerenciamento de Backups PostgreSQL com pgbarman

Palestrante: Juliano Atanazio

Gerenciamentode Backups

com pgbarman

Page 2: Gerenciamento de Backups PostgreSQL com pgbarman

http://www.pgbarman.org/

Page 3: Gerenciamento de Backups PostgreSQL com pgbarman

Apresentação

● 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.

Page 4: Gerenciamento de Backups PostgreSQL com pgbarman

Apresentação

● Características e Objetivos

➔ Backup físico completo a quente de um servidor PostgreSQL;

➔ Gerenciamento de backups de múltiplos servidores PostgreSQL;

➔ Recuperação local e remota de um backup;

➔ Suporte SSH para operações remotas;

➔ Informações e estado do servidor;

➔ Compressão de arquivos de WAL (bzip, gzip ou customizado);

➔ Integração com ferramentas padronizadas de arquivamento (e. g. tar);

Page 5: Gerenciamento de Backups PostgreSQL com pgbarman

Apresentação

● 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.

Page 6: Gerenciamento de Backups PostgreSQL com pgbarman

Apresentação

● LicençaBarman é 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.

Page 7: Gerenciamento de Backups PostgreSQL com pgbarman

Apresentação

● SuporteSite 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/

Page 8: Gerenciamento de Backups PostgreSQL com pgbarman

Cenário de Testes

Hostname: backupIP: 192.168.7.70System User: barman

Hostname: pgIP: 192.168.7.71System User: postgres

Page 9: Gerenciamento de Backups PostgreSQL com pgbarman

Instalação

● 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

Page 10: Gerenciamento de Backups PostgreSQL com pgbarman

Instalação

● Linux➔ Via Código Fonte

Respectivamente, criação de grupo* e usuário* de sistema:

Instalação de pacotes necessários:

*Próximos IDs de sistema para grupo e usuário

# 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 bash­completion postgresql­client­9.2

Page 11: Gerenciamento de Backups PostgreSQL com pgbarman

Instalação

● 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

Page 12: Gerenciamento de Backups PostgreSQL com pgbarman

Instalação

● Linux➔ Via Código Fonte

Descompactação:

Entrar no diretório do código fonte:

Execução do script Python de instalação (build):

Criação de diretórios de manuais (1 e 5), diretório de configuração de servidores PostgreSQL e diretório de logs do Barman :

# tar xvf barman­1.2.2.tar.gz

# cd barman­1.2.2/

# ./setup.py build

# mkdir ­p /usr/local/man/{man1,man5} /etc/barman.d  /var/log/barman

Page 13: Gerenciamento de Backups PostgreSQL com pgbarman

Instalação

● Linux➔ Via Código Fonte

Cópia dos arquivos de manuais para os respectivos diretórios:

Execução do script Python de instalação (install)::

Cópia do arquivo de bash completion:

# cp doc/barman.1 /usr/local/man/man1/

# cp doc/barman.5 /usr/local/man/man5/

# ./setup.py install

# cp scripts/barman.bash_completion /etc/bash_completion.d/barman

Page 14: Gerenciamento de Backups PostgreSQL com pgbarman

Instalação

● Linux➔ Via Código Fonte

Cópia do arquivo de configuração para o diretório do usuário de sistema

barman:

Criação de link para o arquivo de configuração em /etc:

Permissões, grupo e usuário donos de diretórios:

# cp doc/barman.conf ~barman/

# ln ­s ~barman/barman.conf  /etc/

# chmod ­R 770 ~barman /etc/barman.d  /var/log/barman

# chown ­R barman: ~barman /etc/barman.d  /var/log/barman

Page 15: Gerenciamento de Backups PostgreSQL com pgbarman

Instalação

● Linux➔ Via Código Fonte

Utilizando o usuário de sistema barman para testar o man:

Criação da estrutura de diretórios de backup para o servidor pg:

# su ­ barman

$ man barman

$ man 5 barman

$ mkdir ­pm 0700 /var/lib/barman/bkp/pg/incoming/

Page 16: Gerenciamento de Backups PostgreSQL com pgbarman

Instalação

● Linux (Servidor PostgreSQL)➔ Via Código Fonte

Instalação do rsync:

Arquivo pg_hba.conf (adicionar):

Arquivo postgresql.conf (alterar):

# aptitude install rsync

host    all             barman          192.168.7.70/32  md5

wal_level = 'archive' archive_mode = onarchive_command = 'scp %p barman@backup:/var/lib/barman/bkp/pg/incoming/%f'

Page 17: Gerenciamento de Backups PostgreSQL com pgbarman

Instalação

● Linux (Servidor PostgreSQL)➔ Via Código Fonte

Utilizando o usuário de sistema postgres para criar o usuário barman

no cluster e sua senha:

Reinicialização do serviço (como root):

# su ­ postgres

$ psql ­c "CREATE ROLE barman LOGIN SUPERUSER PASSWORD 'senha';"

# service postgresql restart

Page 18: Gerenciamento de Backups PostgreSQL com pgbarman

Configuração

● Comunicação SSH Bidirecional

Em ambos servidores, criar a chave SSH para ser utilizada na comunicação sem senha:

$ ssh­keygen ­t rsa ­P '' ­f ~/.ssh/id_rsa

Usuário barman

Usuário postgres

Page 19: Gerenciamento de Backups PostgreSQL com pgbarman

Configuração

● Comunicação SSH BidirecionalNo servidor Barman

Inserir a chave pública no conteúdo do arquivo de chaves autorizadas no servidor PostreSQL, no usuário postgres:

Garantir que o usuário postgres seja dono do diretório .ssh:

$ cat ~barman/.ssh/id_rsa.pub | ssh root@pg "cat ­ >> ~postgres/.ssh/authorized_keys"

$ ssh root@pg "chown ­R postgres: ~postgres/.ssh"

Page 20: Gerenciamento de Backups PostgreSQL com pgbarman

Configuração

● Comunicação SSH BidirecionalNo servidor Barman

Ajuste de permissão 0700 ao diretório .ssh:

Ajuste de permissão 0600 aos araquivos do diretório .ssh:

$ ssh root@pg "chmod 0600 ­R  ~postgres/.ssh/*"

ssh root@pg "chmod 0700 ~postgres/.ssh"

Page 21: Gerenciamento de Backups PostgreSQL com pgbarman

Configuração

● Comunicação SSH BidirecionalNo servidor PostgreSQL

Inserir a chave pública no conteúdo do arquivo de chaves autorizadas no servidor Barman, no usuário barman:

Garantir que o usuário postgres seja dono do diretório .ssh:

$ cat ~postgres/.ssh/id_rsa.pub | ssh root@backup "cat ­ >> ~barman/.ssh/authorized_keys"

$ ssh root@backup "chown ­R barman: ~barman/.ssh"

Page 22: Gerenciamento de Backups PostgreSQL com pgbarman

Configuração

● Comunicação SSH BidirecionalNo servidor PostgreSQL

Ajuste de permissão 0700 ao diretório .ssh:

Ajuste de permissão 0600 aos araquivos do diretório .ssh:

$ ssh root@backup "chmod 0600 ­R  ~barman/.ssh/*"

ssh root@backup "chmod 0700 ~barman/.ssh"

Page 23: Gerenciamento de Backups PostgreSQL com pgbarman

Configuração

● Comunicação SSH BidirecionalTestando

No servidor de banco de dados com o usuário postgres:

No servidor de backup com o usuário barman:

$ ssh barman@backup

$ ssh postgres@pg

Page 24: Gerenciamento de Backups PostgreSQL com pgbarman

Configuração

● Diretório de Backup

O Barman precisa de um diretório principal de backup para armazenar todos backups, através do qual pode-se definir uma pasta para cada servidor que fará backup e para cada tipo de recurso (backup ou segmentos WAL, por instância).

O arquivo de configuração define o parâmetro barman_home, que é o diretório onde o Barman armazenará todos os backups por padrão.

Esse diretório é o “home” para o usuário de sistema do Barman.

Geralmente é /srv/barman ou /var/lib/barman.

Page 25: Gerenciamento de Backups PostgreSQL com pgbarman

Configuração

● Configuração BásicaNo 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.

Usualmente, o primeiro se aplica a todos usuários no servidor de backup, enquanto o último aplica-se ao usuário barman.

A partir da versão 1.2.1 pode ser usado o /etc/barman/barman.conf como arquivo de configuração para o sistema.

Page 26: Gerenciamento de Backups PostgreSQL com pgbarman

Configuração

● Configuração Básica

O arquivo de configuração segue o formato INI padrão e se divide em:

- Uma seção para configurações gerais (identificada pela etiqueta (label) barman);

- 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

Page 27: Gerenciamento de Backups PostgreSQL com pgbarman

Configuração

● Configuração Básica

A partir da versão 1.1.2 é possível especificar um diretório para arquivos de configuração, similarmente a outras aplicações Linux, através do parâmetro configuration_files_directory (vazio por padrão).

O Barman vai ler todos os arquivos com a extensão .conf que estiverem nessa pasta.

Por exemplo, se o valor do parâmetro configuration_files_directory for /etc/barman.d, pode-se designar um arquivo por servidor cada um contendo sua etiqueta referente à sua seção.

Caso contrário, pode ser utilizado o padrão do Barman que é especificar várias seções no mesmo arquivo de configuração

Page 28: Gerenciamento de Backups PostgreSQL com pgbarman

Configuração

● Arquivo /etc/barman.conf

Continua...

; Barman, Backup and Recovery Manager for PostgreSQL; http://www.pgbarman.org/ ­ http://www.2ndQuadrant.com/;; Main configuration file

[barman]; Diretório principalbarman_home = /var/lib/barman/bkp

; Usuário de sistemabarman_user = barman

; Arquivo de loglog_file = /var/log/barman/barman.log

; Compressão padrão: valores possíveis são None (padrão), bzip2, gzip ou custom

compression = gzip

Page 29: Gerenciamento de Backups PostgreSQL com pgbarman

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 emptyretention_policy =

; Global bandwidth limit in KBPS ­ default 0 (meaning no limit)bandwidth_limit = 0

Page 30: Gerenciamento de Backups PostgreSQL com pgbarman

Configuração

● Arquivo /etc/barman.d/pg.conf

Continua...

; Configuração do Servidor Postgres pg

[pg]

; Descriçãodescription =  "Servidor PostgreSQL pg"

; Opções SSHssh_command = ssh postgres@pg

; String de conexão PostgreSQLconninfo = host=pg user=barman password=senha dbname=postgres

;Compressão customizadacompression = customcustom_compression_filter = xz ­z9custom_decompression_filter = xz ­d

Page 31: Gerenciamento de Backups PostgreSQL com pgbarman

Configuração

● Arquivo /etc/barman.d/pg.conf

Nota-se que há configurações do servidor pg que foram sobrescritas.

; Número mínimo de backups mantidosminimum_redundancy = 0

; Política de retenção

retention_policy =

Page 32: Gerenciamento de Backups PostgreSQL com pgbarman

Uso do pgbarman

● Servidores➔ Listando os Servidores

O seguinte comando exibe a lista de todos os servidores disponíveis:

$ barman list­server

pg – Servidor PostgreSQL pg

Page 33: Gerenciamento de Backups PostgreSQL com pgbarman

Uso do pgbarman

● Servidores● Mostra a Configuração de um Servidor

Continua...

$ barman show­server pg

Server pg:active: truedescription: Servidor PostgreSQL pgssh_command: ssh postgres@pgconninfo: host=pg user=barman password=senha dbname=postgresbackup_directory: /var/lib/barman/bkp/pgbasebackups_directory: /var/lib/barman/bkp/pg/basewals_directory: /var/lib/barman/bkp/pg/walsincoming_wals_directory: /var/lib/barman/bkp/pg/incominglock_file: /var/lib/barman/bkp/pg/pg.lockcompression: customcustom_compression_filter: xz ­z9custom_decompression_filter: xz ­d

Page 34: Gerenciamento de Backups PostgreSQL com pgbarman

Uso do pgbarman

● Servidores● Mostra a Configuração de um Servidor

retention_policy_mode: autoretention_policy: wal_retention_policy: mainpre_backup_script: Nonepost_backup_script: Noneminimum_redundancy: 0bandwidth_limit: 0tablespace_bandwidth_limit: Nonecurrent_xlog: 000000020000000000000013last_shipped_wal: Nonearchive_command: scp %p barman@backup:/var/lib/barman/bkp/pg/incoming/%fserver_txt_version: 9.2.4data_directory: /var/lib/postgresql/9.2/mainarchive_mode: onconfig_file: /etc/postgresql/9.2/main/postgresql.confhba_file: /etc/postgresql/9.2/main/pg_hba.confident_file: /etc/postgresql/9.2/main/pg_ident.conf

Page 35: Gerenciamento de Backups PostgreSQL com pgbarman

Uso do pgbarman

● Servidores● Checagem de Diagnóstico

Pode-se checar se a conexão para um dado servidor está funcionando apropriadamente com o seguinte comando:

$ barman check pg

Server pg:ssh: OKPostgreSQL: OKarchive_mode: OKarchive_command: OKdirectories: OKretention policy settings: OKcompression settings: OKminimum redundancy requirements: OK (have 5 backups, expected at least 0)

Page 36: Gerenciamento de Backups PostgreSQL com pgbarman

Uso do pgbarman

● Backups● Backup IDs

Uma identificação de backup ou backup ID é uma nomenclatura de backup para um dado servidor que tem seu nome formado a partir da data e hora que foi iniciado.

Dado o backup ID: 20130520T235823

<data>T<hora>

YYYYmmDDTHHMMSS

Page 37: Gerenciamento de Backups PostgreSQL com pgbarman

Uso do pgbarman

● Backups● 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>

HH - Hora em formato 24h: 23

MM - Minutos: 58

SS - Segundos: 23

YYYYmmDDTHHMMSSYYYYmmDDTHHMMSS

Page 38: Gerenciamento de Backups PostgreSQL com pgbarman

Uso do pgbarman

● 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:

- latest/last: o último backup disponível para o servidor.

- oldest/first: o backup mais antigo de um servidor.

Esses apelidos podem ser usados com qualquer um dos seguintes comandos do barman: show­backup, delete, list­files ou recover.

Page 39: Gerenciamento de Backups PostgreSQL com pgbarman

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/20130721T183941Backup 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

Page 40: Gerenciamento de Backups PostgreSQL com pgbarman

Uso do pgbarman

● Backups● Listando Backups por Servidor

$ barman list­backup pg

pg 20130721T183941 ­ Sun Jul 21 18:39:49 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 Bpg 20130721T161648 ­ Sun Jul 21 16:16:56 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 Bpg 20130719T211849 ­ Fri Jul 19 21:18:58 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 Bpg 20130715T215424 ­ Mon Jul 15 21:54:34 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 Bpg 20130713T103810 ­ Sat Jul 13 10:38:16 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 Bpg 20130713T101241 ­ Sat Jul 13 10:12:48 2013 ­ Size: 32.0 MiB ­ WAL Size: 10.0 MiB

Page 41: Gerenciamento de Backups PostgreSQL com pgbarman

Uso do pgbarman

● Backups● Exibindo Informações de um Backup

Continua...

$ barman show­backup 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      : 2013­07­13 10:12:41.253963    End time        : 2013­07­13 10:12:48.463451    Begin Offset    : 32    End Offset      : 168    Begin XLOG      : 0/5000020    End XLOG        : 0/50000A8

Page 42: Gerenciamento de Backups PostgreSQL com pgbarman

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

Page 43: Gerenciamento de Backups PostgreSQL com pgbarman

Uso do pgbarman

● Backups● Listando Arquivos de um Backup

$ barman list­files 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

. . .

Page 44: Gerenciamento de Backups PostgreSQL com pgbarman

Uso do pgbarman

● Backups● Apagando um Backup

$ barman delete pg first

Deleting backup 20130713T101241 for server pgDelete associated WAL segments:

000000010000000000000001000000010000000000000002000000010000000000000003000000010000000000000004000000010000000000000005000000010000000000000005.00000020.backup00000001000000000000000600000001000000000000000C00000001000000000000000D00000001000000000000000E00000001000000000000000F

Done

Page 45: Gerenciamento de Backups PostgreSQL com pgbarman

Uso do pgbarman

● Restauração Completa de um Servidor ● Local

Não foi instalado o servidor PostgreSQL na máquina de backup do laboratório. Se tivesse sido instalado, poderia levantar o banco localmente utilizando o diretório /tmp/teste como cluster do Postgres:

$ barman recover pg 20130719T211849 /tmp/teste

Processing xlog segments for pg00000002.history000000020000000000000005000000020000000000000006

. . .

$ pg_ctl ­D /tmp/teste

Page 46: Gerenciamento de Backups PostgreSQL com pgbarman

Uso do pgbarman

● Restauração Completa de um Servidor ● Remota

$ barman recover ­­remote­ssh­command="ssh postgres@pg" pg last /var/lib/postgresql/9.2/main

barman recover ­­remote­ssh­command="ssh postgres@pg" pg last /var/lib/postgresql/9.2/dataStarting remote restore for server pg using backup 20130721T183941 Destination directory: /var/lib/postgresql/9.2/dataCopying 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!

. . .

Page 47: Gerenciamento de Backups PostgreSQL com pgbarman

Uso do pgbarman

● Restauração Completa de um Servidor ● PITR

$ barman recover ­­remote­ssh­command="ssh postgres@pg" ­­target­time "2013­07­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/mainDoing PITR. Recovery target time: '2013­07­21 19:00:00'Copying the base backup.Copying required wal segments.Generating recovery.conf. . .

Page 48: Gerenciamento de Backups PostgreSQL com pgbarman

Limitando o Uso de Largura de Banda de I/O

A partir da versão 1.2.1 é possível limitar o uso de largura de banda através da opção bandwidth_limit (global/por servidor), especificando o máximo em kb/s (kilobytes por segundo).

O padrão é 0 (zero), sem limite.

Sintaxe de configuração:

Obs.: Esse recurso foi proposto por Gregory Smith

tablespace_bandwidth_limit = tbname:bwlimit[, tbname:bwlimit, ...]

Page 49: Gerenciamento de Backups PostgreSQL com pgbarman

Limitando o Uso de Largura de Banda de I/O

Esse parâmetro aceita uma lista separada de pares que são respectivamente o nome do tablespace e seu limite correspondente (em kb/s).

Ao fazer backup de um servidor, o Barman tentará localizar os tablespaces declarados.

Se encontrar, o limite configurado será forçado, caso contrário o padrão será aplicado.

Page 50: Gerenciamento de Backups PostgreSQL com pgbarman

Modo de Manutenção

Operações de manutenção fazem compressão de arquivos do WAL e os move do diretório de entrada (incoming) para o de arquivamento (wal), além de aplicar as políticas de retenção.

O seguinte comando pode ser utilizado manualmente, mas é indicado para ser incluído nas rotinas do cron do sistema operacional.

$ barman cron

Processing xlog segments for pg00000003.history000000030000000000000015000000030000000000000016000000030000000000000017000000030000000000000017.00000020.backup000000030000000000000018

. . .

Page 51: Gerenciamento de Backups PostgreSQL com pgbarman

Modo de Manutenção

● Compressão do WALA 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.

Page 52: Gerenciamento de Backups PostgreSQL com pgbarman

Modo de Manutenção

● Redundância Mínima de SegurançaA partir da versão 1.2.0, pode-se definir um número mínimo de backups a serem mantidos pelo parâmetro de configuração minimum_redundancy, por padrão é 0.

Pode ser feito como configuração global ou por servidor.

É uma proteção contra operações de remoções acidentais de backups

(barman delete).

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.

Page 53: Gerenciamento de Backups PostgreSQL com pgbarman

Modo de Manutenção

● Políticas de Retenção

Desde a versão 1.2.0, o Barman suporta políticas de retenção para backups.

Uma política de retenção de backup é uma política definida pelo usuário de quanto tempo backups precisam ser retidos para procedimentos de recuperação.

As políticas de retenção podem ser definidas em termos de redundância de backup (quantos backups) ou uma janela de recuperação (quanto tempo).

Page 54: Gerenciamento de Backups PostgreSQL com pgbarman

Modo de Manutenção

● Políticas de Retenção ● Baseada em Redundância

Em uma política de retenção é a configuração que determina quantos backups a serem mantidos:

Conforme o exemplo, a política de retenção aplicada, baseada em redundância, mantém no mínimo 3 backups.

retention_policy = REDUNDANCY 3

Page 55: Gerenciamento de Backups PostgreSQL com pgbarman

Modo de Manutenção

● Políticas de Retenção ● Baseada em Redundância

Obs.: Destacado em vermelho a palavra “OBSOLETE” significa que os backups em questão estão obsoletos e são passíveis de serem deletados.

$ barman list­backup pg

pg 20130721T195414 ­ Sun Jul 21 19:54:20 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 Bpg 20130721T183941 ­ Sun Jul 21 18:39:49 2013 ­ Size: 32.0 MiB ­ WAL Size: 2.0 KiBpg 20130721T161648 ­ Sun Jul 21 16:16:56 2013 ­ Size: 32.0 MiB ­ WAL Size: 3.0 MiBpg 20130719T211849 ­ Fri Jul 19 21:18:58 2013 ­ Size: 32.0 MiB ­ WAL Size: 5.0 KiB ­ OBSOLETEpg 20130715T215424 ­ Mon Jul 15 21:54:34 2013 ­ Size: 32.0 MiB ­ WAL Size: 3.0 MiB ­ OBSOLETEpg 20130713T103810 ­ Sat Jul 13 10:38:16 2013 ­ Size: 32.0 MiB ­ WAL Size: 1.0 MiB ­ OBSOLETE

Page 56: Gerenciamento de Backups PostgreSQL com pgbarman

Modo de Manutenção

● Políticas de Retenção ● Baseada em Janela de Recuperação

Uma janela de recuperação é um tipo de política de retenção de backup do Barman em que é especificado um período para que o Barman assegure a retenção de backups e/ou arquivos de WAL arquivados:

Conforme o exemplo, a política de retenção aplicada, baseada em janela de recuperação, mantém backups feitos em até uma semana.

retention_policy = RECOVERY WINDOW OF 1 WEEKS

Page 57: Gerenciamento de Backups PostgreSQL com pgbarman

Modo de Manutenção

● Políticas de Retenção ● Baseada em Janela de Recuperação

$ barman list­backup pg

pg 20130728T110724 ­ Sun Jul 28 11:07:34 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 Bpg 20130725T205248 ­ Thu Jul 25 20:52:58 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 Bpg 20130723T231858 ­ Tue Jul 23 23:19:05 2013 ­ Size: 32.0 MiB ­ WAL Size: 0 Bpg 20130721T183941 ­ Sun Jul 21 18:39:49 2013 ­ Size: 32.0 MiB ­ WAL Size: 2.0 KiBpg 20130721T161648 ­ Sun Jul 21 16:16:56 2013 ­ Size: 32.0 MiB ­ WAL Size: 3.0 MiB ­ OBSOLETEpg 20130719T211849 ­ Fri Jul 19 21:18:58 2013 ­ Size: 32.0 MiB ­ WAL Size: 5.0 KiB ­ OBSOLETEpg 20130715T215424 ­ Mon Jul 15 21:54:34 2013 ­ Size: 32.0 MiB ­ WAL Size: 3.0 MiB ­ OBSOLETEpg 20130713T103810 ­ Sat Jul 13 10:38:16 2013 ­ Size: 32.0 MiB ­ WAL Size: 1.0 MiB ­ OBSOLETE

Page 58: Gerenciamento de Backups PostgreSQL com pgbarman

Modo de Manutenção

● Configuração e Sintaxe

A sintaxe geral para política de retenção de backups é a seguinte:

retention_policy  =  {REDUNDANCY  value  |  RECOVERY  WINDOW  OF  value {DAYS | WEEKS | MONTHS}}

Por padrão, retention_policy tem seu valor vazio (nenhuma política de retenção).

Page 59: Gerenciamento de Backups PostgreSQL com pgbarman

Hook Scripts

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.

● pre_backup_script: hook script carregado antes de ser feito um backup.

● post_backup_script: hook script carregado depois que um backup termina.

A definição do script é passada ao shell e pode retornar qualquer código de saída.

Page 60: Gerenciamento de Backups PostgreSQL com pgbarman

Variáveis de Ambiente

● BARMAN_BACKUP_DIR: Diretório de backup;

● BARMAN_BACKUP_ID: Backup ID;

● BARMAN_CONFIGURATION: Arquivo de configuração utilizado pelo Barman;

● BARMAN_ERROR: Mensagem de erro, se houver (apenas para a fase pós backup);

● BARMAN_PHASE: Fase do hook script, ou pré (pre) ou pós (post);

● BARMAN_PREVIOUS_ID: ID do backup anterior (se existir);

● BARMAN_SERVER: Nome do servidor;

● BARMAN_STATUS: Estado do backup;

● BARMAN_VERSION: Versão do Barman.

Page 61: Gerenciamento de Backups PostgreSQL com pgbarman

Futuras Implementações

● !! 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???)

Page 62: Gerenciamento de Backups PostgreSQL com pgbarman

Obrigado! :)

Juliano Atanazio

[email protected]