Graças aos novos utilitários
barman-cloud-restore
e barman-cloud-wal-restore
introduzido no Barman 2.11
, agora é possível executar a recuperação de uma instância do PostgreSQL usando um backup completo executado anteriormente usando barman-cloud-wal-archive
e barman-cloud-backup
comandos. Vamos descobrir juntos como implementar isso no artigo a seguir. Vale a pena notar que no Barman 2.11, todos os utilitários de nuvem para Barman estão agora em um pacote separado chamado
barman-cli-cloud
. Requisitos
1.
barman-cli-cloud
pacote2. Uma instância do PostgreSQL
3. Um bucket do AWS S3
4. Uma segunda máquina virtual onde executar a restauração
Neste artigo, testaremos
barman-cli-cloud
funcionalidades em uma máquina virtual com Debian Buster e PostgreSQL 12. Para seguir corretamente as instruções contidas neste artigo, também assumimos que você tenha:- configurou o Postgres para arquivar arquivos WAL em um bucket S3 existente usando
barman-cloud-wal-archive
- executou um backup e o enviou para o mesmo bucket do S3 por meio de
barman-cloud-backup
Você pode conseguir isso facilmente seguindo as instruções contidas nestes artigos anteriores do blog:
- Barman Cloud – Parte 1:Arquivo WAL
- Barman Cloud – Parte 2:Backup na nuvem
Configure o servidor de recuperação
Como resultado, temos um bucket do S3 na AWS chamado
barman-s3-test
que já contém os arquivos WAL e backup arquivados via barman-cloud-wal-archive
e barman-cloud-backup
tools, agora precisamos configurar corretamente um servidor que será o host para a recuperação da instância do PostgreSQL. 1. Instale o PostgreSQL 12 do repositório oficial do PGDG
2. Instale o repositório público do 2ndQuadrant
3. Instale o
barman-cli-cloud
pacote:[email protected]:~# apt [email protected]:~# apt install barman-cli-cloud
4. Instale o
awscli
pacote:[email protected]:~# apt install awscli
5. Configure as credenciais da AWS com a ferramenta awscli como usuário postgres:
[email protected]:~$ aws configure --profile barman-cloudAWS ID da chave de acesso [Nenhum]:AKI******************** Chave de Acesso Secreta da AWS [Nenhum ]:**************************************** Nome da região padrão [Nenhum]:eu -west-1Formato de saída padrão [Nenhum]:json
Execute o procedimento de restauração
Agora que o servidor de recuperação está configurado corretamente, estamos prontos para iniciar o procedimento de restauração.
Barman 2.11 apresenta a
barman-cloud-backup-list
comando que permite recuperar informações sobre os backups feitos com barman-cloud-backup
:[email protected]:~$ barman-cloud-backup-list \ --profile barman-cloud \ s3://barman-s3-test pg12Backup ID End Time Begin Wal20200713T120856 2020-07-13 12:09:05 00000001000000000000000C
Agora estamos prontos para executar a restauração usando o
barman-cloud-restore
comando:[email protected]:~$ barman-cloud-restore \ --profile barman-cloud \ s3://barman-s3-test \ pg12 20200713T120856 \ /var/lib/postgresql/12/main/
Assim que a restauração terminar com sucesso, podemos verificar o conteúdo do diretório PGDATA:
[email protected]:~$ ls /var/lib/postgresql/12/main/PG_VERSION global pg_hba.conf pg_multixact pg_serial pg_stat_tmp pg_twophase postgresql.auto.confbackup_label pg_commit_ts pg_ident.conf pg_notify pg_snapshots pg_subtrans pg_wlogical postgresql.confmem_dyn pg_replslot pg_stat pg_tblspc pg_xact
Agora, para ter certeza de que o processo de restauração funcionou corretamente, precisamos iniciar a instância recuperada do PostgreSQL e verificar se tudo funciona conforme o esperado. Este processo requer algumas etapas adicionais.
Primeiro, como estamos em um sistema Debian, precisamos copiar os arquivos que contêm a configuração do PostgreSQL no/etc/postgresql/12/main/
diretório:
[email protected]:~$ cp /var/lib/postgresql/12/main/postgresql.conf /etc/postgresql/12/main/[email protected]:~$ cp /var/lib/postgresql /12/main/pg_hba.conf /etc/postgresql/12/main/[email protected]:~$ cp /var/lib/postgresql/12/main/pg_ident.conf /etc/postgresql/12/main/
Segundo, crie orecovery.signal
Arquivo:
[email protected]:~$ touch /var/lib/postgresql/12/main/recovery.signal
Em seguida, desative oarchive_command
para evitar que a instância recuperada grave no mesmo bucket que a instância original:
[email protected]:~$ echo \"archive_command ='cd .'\">> /etc/postgresql/12/main/postgresql.conf
Depois disso, você precisa configurar o PostgreSQL para recuperar os arquivos WAL da última linha do tempo disponível do bucket do S3 usando obarman-cloud-wal-restore
norestore_command
:
[email protected]:~$ echo \"restore_command ='barman-cloud-wal-restore --profile barman-cloud s3://barman-s3-test pg12 %f %p'\">> / etc/postgresql/12/main/[email protected]:~$ echo \"recovery_target_timeline ='latest'\">> /etc/postgresql/12/main/postgresql.conf
IMPORTANTE :Antes de continuar, verifique se a instância do PostgreSQL não está em execução e se o diretório de destino (o diretório de dados padrão do PostgreSQL) está vazio.
Finalmente, estamos prontos para iniciar a nova instância recuperada:
[email protected]:~# systemctl restart [email protected]
Excelente! Como podemos ver no log do PostgreSQL, os arquivos WAL são recuperados do bucket do S3 e a instância foi iniciada corretamente:
[email protected]:~$ less /var/log/postgresql/postgresql-12-main.log...2020-07-13 12:43:25.093 UTC [9458] LOG:iniciando PostgreSQL 12.3 (Debian 12.3-1.pgdg100+1) em x86_64-pc-linux-gnu, compilado por gcc (Debian 8.3.0-6) 8.3.0, 64-bit2020-07-13 12:43:25.093 UTC [9458] LOG:escutando no endereço IPv4 "127.0.0.1", porta 54322020-07-13 12:43:25.095 UTC [9458] LOG:escutando no soquete Unix "/var/run/postgresql/.s.PGSQL.5432"2020-07- 13 12:43:25.111 UTC [9459] LOG:sistema de banco de dados foi interrompido; último conhecido em 2020-07-13 12:08:56 UTC2020-07-13 12:43:25.508 UTC [9459] LOG:iniciando a recuperação do arquivo2020-07-13 12:43:26.010 UTC [9459] LOG:log restaurado arquivo "00000001000000000000000C" do archive2020-07-13 12:43:26.052 UTC [9459] LOG:refazer começa em 0/C0000282020-07-13 12:43:26.054 UTC [9459] LOG:estado de recuperação consistente alcançado em 0/C000138200 -07-13 12:43:26.054 UTC [9458] LOG:o sistema de banco de dados está pronto para aceitar conexões somente leitura2020-07-13 12:43:26.469 UTC [9459] LOG:arquivo de log restaurado "00000001000000000000000D" do arquivo2020-07- 13 12:43:26.823 UTC [9459] LOG:refazer feito em 0/D0001B02020-07-13 12:43:27.242 UTC [9459] LOG:arquivo de log restaurado "00000001000000000000000D" do arquivo2020-07-13 12:43:27.59.59. UTC [9459] LOG:nova linha de tempo selecionada ID:22020-07-13 12:43:27.644 UTC [9459] LOG:recuperação de arquivo concluída2020-07-13 12:43:27.979 UTC [9458] LOG:o sistema de banco de dados está pronto para aceitar conexõesConclusão
Como de costume em qualquer nova versão do Barman, recomendamos que todos atualizem seus sistemas para a versão mais recente. Uma lista completa de alterações e correções de bugs está disponível aqui.
Observe que, se você já estiver usandobarman-cloud-wal-archive
oubarman-cloud-backup
instalado via pacote RPM/Apt e você está atualizando seu sistema, você deve instalar obarman-cli-cloud
pacote. Isso se deve ao fato de que, com a versão Barman 2.11, todas as ferramentas relacionadas à nuvem fazem parte dobarman-cli-cloud
pacote conforme explicado no início do artigo.
As próximas versões do Barman podem melhorar os recursos de usabilidade e automação do comando de recuperação, por exemplo, preparando umrecovery.conf
ourecovery.signal
arquivo como o Barman real faz.