Você está na página 1de 52

Sidymar Ramos Prexedes / sprexedes@hotmail.

com

Curso 801

Administração
PostgreSQL com Alta
Performance
Versão 2015_3.0
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Administração PostgreSQL com Alta


Performance

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Backup e Restauração

Objetivos da aula

➢ Backup pontual e restauração de um banco de dados

➢ Backup pontual e Restauração de um cluster

➢ Point-In-Time Recovery – Estratégia de Backup

➢ Point-In-Time Recovery – Backup inicial

➢ Point-In-Time Recovery – Recuperação

➢ Backup e Restore com a ferramenta Barman

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

IT Experience

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Backup pontual

➢ O backup conterá apenas os dados do momento do

backup;

➢ DUMP

pg_dump [banco de dados] > [arquivo.dump]

➢ 10 a 50% do tamanho normal do banco de dados;

Backups pontuais são aqueles que guardam as informações no momento em que


foram criados. Imagine que, num ambiente de produção, dados são inseridos, alterados e
removidos o tempo todo dos bancos de dados. Portanto, um backup pontual permitirá ao
administrador recuperar os dados em um ponto no passado, quando o backup foi
executado.

Backups pontuais no PostgreSQL são feitos com o comando pg_dump, e seu uso
básico é: pg_dump [banco de dados] > [arquivo.dump]

Pode-se utilizar uma extensão .sql para dumps textuais. O pg_dump possui opções úteis
como -t (fazer backup apenas de uma tabela) e -F c (arquivo próprio do pg_restore,
comprimindo com zlib). As opções de conexão do psql são aceitas, como usuário,
hostname, porta e etc.

Dumps de bancos de dados tem, geralmente, de 10 a 50\% do tamanho ocupado


em disco por um banco de dados em produção, portanto, não se assuste.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Backup pontual

➢ Pode ser com aplicações e usuários trabalhando;

➢ Pode ser automatizado.

Recomenda-se que o usuário que faça o backup seja um superusuário, dono do


banco de dados sendo feito backup ou, pelo menos, tenha acesso de leitura em todos os
objetos do banco de dados. O diretório onde estará o arquivo de backup deve possuir
permissão de escrita para o usuário do sistema operacional que estiver executando o
comando pg_dump.

O backup pode ser feito com o banco de dados funcionando, normalmente. Note,
porém, que durante o processo é feita uma cópia completa de cada tabela, o acesso a
disco será intenso, portanto, escolha horários de menor movimento transacional para
execução de dumps quando grandes tabelas estão envolvidas.

Scripts automatizados e agendados podem ser utilizados para backups, desde que
seja sempre verificada a saída do comando executado para garantir que não
aconteceram erros durante o processo.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Backup pontual - restauração

➢ Criar papéis, tablespaces;

➢ Criar o banco de dados:

psql [database] < [arquivo.sql]

pg_restore -f [arquivo.dump] -d [database]

Um usuário com direitos para tal deve criar o banco de dados conforme já
vimos em capítulo anterior. Se o banco de dados já existir, recomenda-se limpá-lo
primeiro, exceto se o dump foi criado com a opção de destruir objetos já existentes.

Para restaurar um dump textual, utilize o psql, assim:


psql [banco de dados] < [arquivo.sql]

Utilize as opções de conexão necessárias como hostname, usuário, etc.

Para dumps comprimidos do pg_restore (opção -F c do pg_dump), será obrigatório


utilizar o pg_restore:
pg_restore -d [banco de dados] [arquivo.dump]

As opções de conexão estilo psql também são aceitas.

As opções acima não restauram papéis de usuário e grupo. Devem ser


recriados manualmente de preferência antes da restauração. Também não são
copiadas as tablespaces. As mesmas tablespaces utilizadas devem ser criadas
manualmente antes da restauração.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Backup pontual - cluster

pg_dumpall > arquivo.sql

➢ Para recuperar, utilizar psql como postgres:

psql < arquivo.sql

➢ Antes de recuperar, tenha os diretórios de tablespaces


criados e com permissões corretas.

Pode-se utilizar o comando pg_dumpall para fazer um backup completo de um


cluster. O comando é:

pg_dumpall > arquivo.sql

As opções de conexão estilo psql são possíveis também. Todas os papéis,


bancos de dados e permissões serão copiadas em formato textual. Informações dos
catálogos de sistema do PostgreSQL não são copiadas.

Crie um cluster novo com initdb. Utilize o psql como usuário postgres para
recuperação:
psql < arquivo.sql

As opções de conexão como hostname e porta são possíveis.

Observação importante: dumps fazem cópias apenas das informações internas


do cluster. Será necessário copiar manualmente arquivos de configuração.
Observação muito importante: backups de cluster contém comandos que
recriam tablespaces, porém, os diretórios onde residem devem existir antes da
recuperação, na mesma localização original.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Backup PITR - Arquivamento

Point-In-Time Recovey
● Apenas backup do cluster completo;
● Aplicações e usuários trabalhando;
● É contínuo e incremental;

O PITR permite apenas cópias completas de clusters, inclusive usuários,


regras, privilégios, etc. Embora pareça complicado, uma vez habilitado o PITR é
muito simples de administrar.

A estratégia de backup PITR inicial pode ser feita com o servidor de banco de
dados funcionando normalmente. Como os arquivos de dados serão totalmente lidos
pelos comandos executados, tenha em mente que existirá um aumento do consumo
de I/O que pode afetar as transações normais. Prefira horários de baixo movimento
transacional para o backup inicial.

A maior vantagem do PITR é que o cluster terá um backup contínuo e


incremental. A estratégia consiste em avisar ao PostgreSQL que um backup será
feito. O PostgreSQL marcará então qual foi esse momento. Depois, pode-se copiar
normalmente os arquivos dos diretórios de dados e tablespaces sem se preocupar
com suas alterações durante o backup. O PostgreSQL gravará as modificações feitas
nos arquivos WAL. Após a finalização do backup o recurso de archiving manterá uma
alimentação contínua de arquivos WAL para o local de backup especificado.

Portanto o PITR mantém dois momentos: a cópia inicial e o arquivamento


contínuo. Reserve espaços especiais em disco para eles.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Backup PITR - Arquivamento

Point-In-Time Recovey
● Permite volta no tempo, desde o ponto de backup
inicial;
● Habilitar archive_mode;

10

Outra vantagem do PITR é justamente seu nome: recuperação em momento


no tempo. O administrador poderá retornar o backup em qualquer momento no tempo
desde o backup inicial até o momento da falha. Isto é muito útil em situações em que
um usuário executou um comando que destruiu dados em determinado momento do
dia, ou se uma nova versão de uma aplicação fez alguma bagunça com seus dados
após um deploy.

Para habilitar o PITR utilizamos o recurso archiving. No arquivo


postgresql.conf:


wal_level=archive
● archive_mode = on
● archive_command = 'comando'

onde 'comando' é o comando de cópia do arquivo WAL do momento.

O comando deve retornar 0 em caso de sucesso. Se um comando que não


retorna 0 for utilizado, ou se o comando falhar por algum motivo (diretório cheio, por
exemplo), o PostgreSQL manterá os arquivos não copiados no diretório pg_xlog. Isto
precisa ser monitorado pelo administrador.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Backup PITR - Arquivamento

● Utilizar um archive_command;
archive_timeout
wal_level >= archive
● O comando deve retornar zero;
● Exemplo de comando:
'cp -i %p /dir/archives/%f < /dev/null'
● Pode-se enviar os arquivos para um servidor remoto,
via rede.

11

Após o sucesso, o respectivo arquivo de log de transações será apagado ou


renomeado para reuso pelo PostgreSQL, evitando fragmentação do sistema de arquivos.
Comandos interessantes a utilizar em archive_command:
cp -i %p /dir/archives/%f < /dev/null
Para copiar os arquivos WAL para o diretório /dir/archives
scp %p IP:/dir/archives/%f < /dev/null

Para enviar os arquivos WAL para a máquina IP no diretório /dir/archives. Neste


caso, a máquina de destino deve ter um servidor ssh e chaves públicas trocadas
adequadamente.

A variável %p é o caminho completo do arquivo WAL original do PostgreSQL e \%f


é apenas o nome dele. Portanto, os comandos irão literalmente copiar o arquivo de
pg_xlog para o diretório escolhido pelo administrador.

Pelo fato de os segmentos somente serem copiados quando estiverem completos,


em bancos com poucas transações os segmentos vão levar um tempo considerável para
serem completados e em consequência o backup pode ficar muito atrasado. No entanto
essa situação pode ser evitada definindo um tempo máximo a ser aguardado pelo
preenchimento do segmento, o que é definido através da opção archive_timeout'.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Backup PITR - Arquivamento

● Uma estratégia combinada, como cópia dos arquivos WAL para


um diretório nfs, drdb ou outra partição e depois um rsync
acionado pelo cron é interessante para garantir um backup local e
remoto ao mesmo tempo.
● Uma estratégia combinada pode ser a chamada de um shell script
pelo archive_command. Este script pode fazer as duas coisas,
uma cópia para a partição local e um envio via rsync para um
servidor remoto. Tome precauções para que o script retorne 0
quando for bem sucedido e qualquer outro valor em caso de
falha.

12

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Backup PITR - Backup Base

➢ Superusuário, psql:

SELECT pg_start_backup('label');

➢ Executar a cópia do cluster, tablespaces;

➢ Superusuário, psql:

SELECT pg_stop_backup;

13

Um backup PITR precisa começar em um ponto conhecido pelo PostgreSQL.


Um backup PITR pode se tornar muito grande com o tempo e/ou muito demorado
para ser restaurado, portanto, um backup inicial em um novo ponto conhecido deve
ser feito com frequência. Mais de um backup inicial pode ser feito sem problemas.
● Para fazer o backup base:
● Prepare o servidor conforme o item anterior;
● Como superusuário e o banco de dados rodando normalmente: SELECT
pg_start_backup('label');
● Label é um nome de sua escolha, que identificará este backup. Espere o
comando retornar alguma mensagem que não seja erro. Warnings podem ser
ignorados e são normais.
● Faça uma cópia completa do diretório do cluster.
● Alguns erros relativos a arquivos abertos podem ocorrer, isso é normal porque o
banco está on-line e arquivos de transação estão em uso enquanto isso.
● Como superusuário novamente, avise o PostgreSQL que o seu backup terminou:
SELECT pg_stop_backup();

Dependendo do tempo entre o pg_start_backup e o pg_stop_backup muitas
operações podem ter ocorrido, portanto, o comando pg_stop_backup pode levar
algum tempo até ser completado com sucesso.
● Dependendo da configuração checkpoint_segments, o comando pg_start_backup
pode demorar bastante também, vários minutos. Isto é normal.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Backup PITR - Backup Base

➢ O arquivamento segue continuamente;

➢ Apagar arquivos antigos.

14

A partir da versão 9.1 existe uma ferramenta chamada pg_basebackup, esta


ferramenta facilita o trabalho de realizar um backup base, pois ela implicitamente
efetua o pg_start_backup'', copia os arquivos e efetua o pg_stop_backup. Esta
ferramenta sera mostrada no capitulo de replicação.''
\end{Nota}

Dentro do diretório pg_xlog vai existir um arquivo nomeado


XXXXX.YYYYY.backup. Todos os arquivos anteriores (em ordem hexadecimal)
podem ser deletados do seu diretório de backup.

O arquivo XXXXX e os arquivos subsequentes serão enviados normalmente


pelo archive_command, o que pode levar algum tempo após a conclusão do backup,
dependendo da carga do sistema e dos meios de comunicação utilizados.

Atenção: se estiver fazendo vários backups iniciais, apague somente os


arquivos WAL mais antigos que o seu backup inicial mais antigo mantido.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Backup PITR - Recuperação

➢ Mover ou apagar cluster atual;

➢ Copiar do backup;

➢ Criar recovery.conf:

restore_command = 'cp /dir/archives/%f %p'


recovery_target_time (timestamp)

15

A recuperação total por PITR é muito simples:

● Pare o PostgreSQL.
● Limpe mova seu diretório do cluster.
● Copie todo o seu backup inicial para seu cluster original, lembre-se de
tablespaces.
● Crie um arquivo recovery.conf dentro do diretório do cluster. O conteúdo do
arquivo deve ser: restore_command = 'cp /dir/WAL/%f "%p"'
● Onde /dir/WAL é o diretório onde estão os arquivos WAL arquivados pelo
archive_command''.

Ajuste as permissões de seu \emph{cluster} com:
chmod -R 700 /dir/cluster/
chown -R postgres /dir/cluster/

● Inicie seu \emph{cluster} normalmente. Os arquivos de transação serão


processados e, em seguida, banco de dados funcionando. A recuperação pode
ser acompanhada no log.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Backup PITR - Recuperação

➢Iniciar cluster, reindexar R-tree;


recovery_target_time (timestamp)

recovery_target_name (string) -
pg_create_restore_point()

recovery_target_xid (string)

16

A sequência de comandos fará com que seu cluster seja recuperado por
completo até o último arquivo WAL existente no seu backup. Caso deseje voltar para
um momento específico no tempo, tenha em mente que não é possível voltar para
um momento antes do backup inicial. Para recuperações em momento no tempo,
insira a seguinte linha em recovery.conf:

recovery_target_time (timestamp)

Onde timestamp é o momento onde se deseja o estado do cluster. Ele é no


formato do PostgreSQL como 'YYYY-MM-DD HH:MM:SS'.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter

Executar Backup e restauração na máquina DB Master

Tarefas:

● Backup e restauração através de dump



Backup e restauração através de PITR
● Gerar script de backup para empresa Dexter

17

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Dump de banco de dados máquina DB Master

1# su - postgres

2$ pg_dump dexter > dexter_copy.sql

3$ pg_dump --inserts dexter > dexter_insert.sql

4$ pg_dump -F c dexter > dexter_bin.dump

5$ less dexter_copy.sql

6$ less dexter_insert.sql

7$ less dexter_bin.dump

18

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Restauração através do comando psql máquina DB Master

1$ createdb dextertemp

2$ pg_restore -d dextertemp dexter_bin.dump

3$ psql dextertemp

4=# \d

5=# SELECT * FROM funcionarios;

6=# \q

7$ dropdb dextertemp

8$ exit
19

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Backup PITR máquina DB Master

1# mkdir /pg_backup

2# mkdir /pg_backup/base

3# mkdir /pg_backup/arquivamento

4# chown -R postgres:postgres /pg_backup

5# chmod -R 700 /pg_backup

20

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Backup PITR máquina DB Master

6# vim /etc/postgresql/9.4/main/postgresql.conf
....

wal_level = archive

archive_mode = on

archive_command = 'cp %p /pg_backup/arquivamento/%f </dev/null'

archive_timeout = 60

7# service postgresql restart

21

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Backup PITR máquina DB Master

8# su - postgres

9$ psql

10 =# SELECT pg_start_backup('curso01');

11 =# \q

12 $ cp -av /var/lib/postgresql/9.4/main/* /pg_backup/base/

13 $ psql

22

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Backup PITR máquina DB Master

14 =# SELECT pg_stop_backup();

15 =# \q

16 $ ls -lh /pg_backup/base/

$ ls /pg_backup/arquivamento/
17

$ rm /pg_backup/base/postmaster.pid
18

19 $ rm -rf /pg_backup/base/pg_xlog/*

20 $ exit

23

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Restauração PITR máquina DB Master

1# service postgresql stop

2# su - postgres

3$ cp /var/lib/postgresql/9.4/main/pg_xlog/*
/pg_backup/arquivamento/

4$ mv /var/lib/postgresql/9.4/main
/var/lib/postgresql/9.4/main_old

5$ cp -av /pg_backup/base/
/var/lib/postgresql/9.4/main

24

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Restauração PITR máquina DB Master

$ vim /var/lib/postgresql/9.4/main/recovery.conf
6

restore_command = 'cp /pg_backup/arquivamento/%f %p'

$ exit
7

# service postgresql start


8

# tail -f /var/log/postgresql/postgresql-9.4-main.log
9

25

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Script de Backup PostgreSQL máquina DB Master

1# mkdir /srv/backup

2# chown postgres.postgres /srv/backup

3# cp /opt/curso/createDB-Backup.sql
/var/lib/postgresql

4# chown postgres. /var/lib/postgresql/createDB-


Backup.sql

5# su - postgres

6$ psql backup < createDB-Backup.sql

26

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Script de Backup PostgreSQL máquina DB Master

$ vim pgbackup.sh
7

#!/bin/bash

DATA=$(date +%d-%m-%Y)
HORA=$(date +%H:%M:%S)

BACKUPDIR=/srv/backup
bancos=$(psql -l | awk -F" " '{ print $1}' | grep -vE '^-|
^List|^Nome|^backup|^\||template[0|1]|^\(')

for BACKUP in $bancos


do

27

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Script de Backup PostgreSQL máquina DB Master

pg_dump -Fc $BACKUP | gzip -c > $BACKUPDIR/$BACKUP.$DATA.dump.gz

TAMANHO=$(du -sh $BACKUPDIR/$BACKUP.$DATA.dump.gz | awk -F" "


'{print $1}')
psql backup -c "insert into backup (data, hora, banco, arquivo,
tamanho) values ('$DATA','$HORA','$BACKUP','$BACKUP.
$DATA.dump.gz','$TAMANHO');"
done

$ chmod 755 pgbackup.sh


8

$ ./pgbackup.sh
9

$ ls -lR /srv/backup
10

28

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Restaurar tabela utilizando o Backup máquina DB Master

1$ psql dexter -c "drop table funcionarios;"

2$ psql dexter -c "\d"

3$ cp /srv/backup/dexter.<DATA>.dump.gz .

4$ gzip -d dexter.<DATA>.dump.gz

5$ pg_restore -d dexter -t funcionarios


dexter.<DATA>.dump

6$ psql dexter -c "\d"

7$ exit
29

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Backup com Barman (Backup and Recovery


Manager)

➢ O Barman (Backup and Recovery Manager) é uma ferramenta de


administração de código aberto para a recuperação de desastres de
servidores PostgreSQL escritos em Python.

➢ Ele permite realizar backups remotos de vários servidores em


ambientes críticos, sendo uma ótima estratégia negócios para sua
empresa.

➢ Os recursos mais requisitados do barman incluem catálogos de backup,


políticas de retenção, recuperação remota, arquivamento e
compactação de arquivos do WAL e backups

30

A ferramenta barman possui as seguintes características:

● Backup físico completo a quente de um servidor PostgreSQL.


● Gerenciamento de vários servidores PostgreSQL.
● Recuperação remota e local de backup para um servidor PostgreSQL.
● Suporte ssh para operações remotas.
● Status e informações do servidor.
● Compressão de arquivos WAL (bzip2, gzip ou personalizado).
● Integração com ferramentas de arquivamento padrão (por exemplo, tar).
● Pré/pós backup de scripts de gancho.

Arquivo de configuração INI simples.
● Point-In-Time-Recovery (PITR).
● Backup remoto de um servidor PostgreSQL.
● Gestão de backups de base e arquivos do WAL através de um catálogo.
● Gestão de políticas de retenção para backups e arquivos de WAL.
● Remanejamento de PGDATA e espaços de tabela no momento da recuperação.

Geral e do disco informações sobre o uso de backups.
● Diagnósticos servidor para backup.
● Suporte a rsync sobre ssh para sincronização de arquivos e transferências.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter

Instalar e Configurar servidor de Backup

Tarefas:

● Instalar e configurar o servidor barman na máquina


Backup
● Configurar Storage Barman na máquina Backup
● Configurar comunicação SSH bidirecional entre os
servidores barman e postgres

➢ Testar Comandos de gerenciamento do barman

31

Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
máquina Backup
Instalar e Configurar servidor de Backup

# vim /etc/apt/sources.list
1

....
deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg
main

# wget https://www.postgresql.org/media/keys/ACCC4CF8.asc
2

# apt-key add ACCC4CF8.asc


3

# apt-get update
4

# apt-get install barman


5

32

Roteiro de instalação:

● O pacote do barman esta disponível no repositório APT do Postgres para Ubuntu;


● É preciso configurar o arquivo sources.list na máquina Storage na iniciar a
instalação;
● Em seguida obtenha a chave pública do repositório pgdg e a instale (validar os
pacotes);
● Atualize a lista de pacotes e instale o pacote barman.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Configuração do Storage Barman (1/2) máquina Backup

1 # mount -t ext4 /dev/storage/backup /var/lib/barman

2 # blkid | grep storage-backup

3 # vim /etc/fstab

....

UUID=7b161c69-de2b-466b-ace2-f024b8e9beec
/var/lib/barman ext4 defaults 0 2

33

Preparar área de armazenamento para backups:

● Vamos utilizar o LVM e RAID que a máquina File Server possui, com uma área de
armazenamento de 40GB para receber os dados das máquinas DB Master e
Audit;
● A máquina possui um volume lógico de 40GB grupo storage com sistema EXT4;
● É preciso fazer a montagem da nova partição na home do usuário barman.;
● Configure a montagem automática na inicialização do sistema;
● Em nosso exemplo a partição possui apenas 40GB, podendo ser estendida com a
adição de novos discos no RAID.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Configuração do Storage Barman (2/2) máquina Backup

1 # mkdir /var/lib/barman/backups

2 # mkdir -p /var/lib/barman/backups/dbmaster/incoming

3 # mkdir -p /var/lib/barman/backups/audit/incoming

4 # chmod 750 /var/lib/barman -R

5 # chown barman:barman /var/lib/barman -R

34

Preparar área de armazenamento para backups:

● Em seguida crie os diretórios para cada servidor que o Barman ira gerenciar os
backups;
● Para terminar altere a permissão de acesso para o usuário barman no ponto de
montagem.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Configuração do Barman (1/2) máquina Backup

# vim /etc/barman.conf
1

barman_home = /var/lib/barman/backups

compression = gzip

minimum_redundancy = 0

retention_policy =

35

Configuração do Barman

A configuração do barman é feita através do arquivo barman.conf localizado no


diretório /etc. Acompanhe a descrição de algumas diretivas relevantes na
configuração do barman.

● Sessão [barman]: Contem configurações relacionadas ao servidor barman:


● barman_home: Diretório onde o barman vai armazenar os backups.
● barman_user: Nome do usuário do barman.
● log_file: Localização onde os logs do barman serão gravados.

compression: Tipo de compressão para realizar o backup.
● configuration_files_directory: Diretório que o barman utiliza para separar sua
configuração em arquivos por servidor.
● minimum_redundancy: Número mínimo de backups requeridos (redundância).
● retention_policy: Política de retenção.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Configuração do Barman (2/2) máquina Backup

[dbmaster]

description = "Servidor PostgreSQL - DB Master"

ssh_command = ssh postgres@192.168.200.50

conninfo = host=dbmaster.dexter.com.br user=barman


password=4linux dbname=postgres

compression = gzip

minimum_redundancy = 0

retention_policy =
36

Configuração do Barman

● Sessão [main]: Contem configurações relacionadas ao servidor Postgres que o


barman vai gerenciar os backups:
● description: Define a descrição do servidor Postgres.
● ssh_command: Comando ssh usada para acessar o servidor Postgres.
● conninfo: Informações de conexão do servidor Postgres (nome, usuário, senha,
banco).
● compression: Opções de compressão.

Para cada servidor Postgres é necessário criar uma sessão com um nome que
identifique seu cluster.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Configuração de chaves SSH (1/3) máquina DB Master

1 # apt-get install rsync

1 # su - postgres

2 $ ssh-keygen

<TECLE ENTER 2 VEZES>

3 $ cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys

4 $ chmod 600 ~/.ssh/authorized_keys

5 $ exit

37

Configuração de chaves SSH

● É preciso configurar a comunicação SSH bidirecional entre os servidores barman


e postgres;
● Para começar logue com o usuário postgres e crie o par de chaves ssh através do
comando ssh-keygen;
● Em seguida envie a chave pública para o arquivo authorized_keys.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Configuração de chaves SSH (2/3) máquina DB Master

6 # rsync -avz ~postgres/.ssh/authorized_keys


backup:~barman/.ssh/

7 # rsync -avz ~postgres/.ssh/id_rsa*


backup:~barman/.ssh/

8 $ su – postgres

9 $ ssh barman@backup.dexter.com.br

10 $ exit

38

Configuração de chaves SSH

● Através do comando rsync envie os arquivos authorized_keys, chave publica e


privada para o servidor de backup, no login do usuário do Barman.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Configuração de chaves SSH (3/3) máquina Backup

1 # chown barman. /var/lib/barman/.ssh -R

2 # su - barman

3 $ ssh postgres@dbmaster.dexter.com.br

4 $ exit

39

Configuração de chaves SSH

● No servidor onde o Barman esta instalado, ajuste as permissões de acesso ao


usuário barman e teste o acesso via ssh no servidor DB Master.

A nossa meta é permitir que o usuário barman possa logar via ssh, sem
fornecer a senha do usuário postgres.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Configuração do Postgres (1/2) máquina DB Master

1 # su - postgres

2 $ psql

3 =# CREATE ROLE barman LOGIN SUPERUSER PASSWORD '4linux';

4 =# \q

5 $ exit

6 # vim /etc/postgresql/9.4/main/pg_hba.conf

host postgres barman 192.168.200.80/32 md5

40

Configuração do Postgres

● No servidor alvo do backup é necessário criar o usuário barman, e liberar seu


acesso através do arquivos pg_hba.conf.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Configuração do Postgres (2/2) máquina DB Master

7# vim /etc/postgresql/9.4/main/postgresql.conf

Alterar:
archive_command = 'cp %p /pg_backup/arquivamento/%f
</dev/null'
Para:
archive_command = 'scp %p
barman@backup.dexter.com.br:/var/lib/barman/backups/dbmas
ter/incoming/%f'
8# service postgresql restart
41

Configuração do Postgres

● No servidor alvo do backup é necessário ajustar o comando de arquivamento, que


agora sera feito via scp
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Comandos de Gerenciamento (1/6) máquina Backup

Informativos:
# barman list-server
1

# barman check dbmaster


2

# barman show-server dbmaster


3

42

Comandos de gerenciamento

Listar servidores gerenciados pelo barman:


barman list-server

Checar conexão com um servidor Postgres:


barman check dbmaster

Exibir detalhes de configuração de um servidor Postgres:


barman backup dbmaster
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Comandos de Gerenciamento (2/6) máquina Backup

Backup Completo:
# barman backup dbmaster
1

# barman list-backup dbmaster


2

# barman show-backup dbmaster <BACKUP_ID>


3

# barman list-files dbmaster <BACKUP_ID>


4

43

Comandos de gerenciamento

Executar backup completo:


barman backup dbmaster

Listar backups de um servidor Postgres:


barman list-backup dbmaster

Exibir informações de um backup:


barman show-backup dbmaster <BACKUP_ID>

O valor 20131017T175122 é o backup ID formado pela data YYYYMMDD + letra "T"


+ a hora HHMMSS.

Listar arquivos armazenados no backup:


barman list-files dbmaster <BACKUP_ID>
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Comandos de Gerenciamento (3/6) máquina Backup

Restore – Backup Completo:


1# mkdir /dexter

2# chown barman. /dexter

3# su - barman

4$ barman recover dbmaster <BACKUP_ID> /tmp/backup

44

Comandos de gerenciamento

Restauração local do backup completo:


barman recover dbmaster <BACKUP_ID> /tmp/backup

A partir do diretório /tmp/backup é possível levantar uma nova instancia do


Postgres através do comando pg_ctl. Também é necessário criar todas as
tablespaces para os bancos de dados do backup.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Comandos de Gerenciamento (4/6) máquina DB Master

Restore – Backup Completo:

5# service postgresql stop

6# cp -a /var/lib/postgresql/9.4/main /root

7# rm -rf /var/lib/postgresql/9.4/main

45

Comandos de gerenciamento

Faça a cópia do PGDATA para o diretório do /root e em seguida remova seu


conteúdo.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos nas
Comandos de Gerenciamento (5/6) máquinas Backup e DB Master

Restore – Backup Completo:


### Servidor Backup
8$ barman recover dbmaster <BACKUP_ID>
/var/lib/postgresql/9.4/main --remote-ssh-command="ssh
postgres@dbmaster.dexter.com.br"

### Servidor DB Master


9# service postgresql start

46

Comandos de gerenciamento

A restauração remota pode ser utilizada utilizando o comando barman recover


e ssh.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Comandos de Gerenciamento (6/6) máquina Backup

Remoção:
$ barman delete dbmaster <BACKUP_ID>
1

Deleting backup 20131017T175122 for server dbmaster


Delete associated WAL segments:
00000002000000000000004B
00000002000000000000004C
00000002000000000000004C.00000020.backup
Done
$ exit
2

47

Comandos de gerenciamento

Apagando backup:
barman delete dbmaster <BACKUP_ID>
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos na
Restauração PITR (1/3) máquina DB Master

# su - postgres
1

$ createdb barman-test1
2

$ date
3

<ANOTE A DATA E HORA DA CRIAÇÃO>

$ createdb barman-test2
4

$ date
5

<ANOTE A DATA E HORA DA CRIAÇÃO>

48

O Barman emprega o Recovery Point In Time do PostgreSQL (PITR),


permitindo aos DBAs especificar um alvo de recuperação, como um timestamp ou um
ID de transação.

Você também pode especificar se o alvo de recuperação deve ser incluído ou


não na recuperação.

A meta de recuperação pode ser especificado utilizando uma das três opções
abaixo:


--target-time TARGET_TIME: Define a recuperação a partir de um timestamp.
● --target-xid TARGET_XID: Define a recuperação a partir de um ID de transação.
● --target-name TARGET_NAME: Define a recuperação a partir de um nome criado
anteriormente com a função pg_create_restore_point(name)
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos nas
Restauração PITR (2/3) máquinas Backup e DB Master

### Servidor Backup


1 # su - barman

2 $ barman backup dbmaster

### Servidor DB Master


3 $ dropdb barman-test1

4 $ psql -l

5 $ /usr/lib/postgresql/9.4/bin/pg_ctl stop -D
/etc/postgresql/9.4/main -m fast
49

Restauração PITR

● Alterne para o servidor Barman e crie um novo backup completo;


● Alterne para máquina DB Master e remova o ultimo banco criado as
<HORA:MINUTO> conforme o slide anterior;
● Confirme a remoção do banco e pare o serviço do Postgres.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Laboratório Dexter
Executar os comandos nas
Restauração PITR (3/3) máquinas Backup e DB Master

### Servidor Backup


$ barman recover dbmaster <BACKUP_ID>
1

/var/lib/postgresql/9.4/main --remote-ssh-command="ssh
postgres@dbmaster.dexter.com.br" --target-time "2015-
10-17 19:05:26"

### Servidor DB Master


$ //usr/lib/postgresql/9.4/bin/pg_ctl start -D
2

/etc/postgresql/9.4/main -m fast

$ psql -l
3

50

Restauração PITR

● Alterne para o servidro Barman e faça uma restauração PITR a partir de um


timestamp;
● Alterne para máquina DB Master, inicie o serviço do Postgres e verifique se o
banco foi restaurado.

Todas as tarefas com a ferramenta barman podem ser executadas em


servidores CentOS. Fique atento quando informar o caminho completo do PGDATA
no CentOS, em restaurações de backup completo ou PITR.
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Próximos Passos

Para que você tenha um melhor aproveitamento do curso,


participe das seguintes atividades disponíveis no Netclass:

➢ Resolver o Desafio para executar dump de tabelas através do


PgAdmin e postar o resultado no Fórum Temático;
➢ Responder as questões do Teste de Conhecimento.

Mãos à obra!

51
Sidymar Ramos Prexedes / sprexedes@hotmail.com

Você também pode gostar