PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Barman Cloud – Parte 2:Backup na Nuvem


Na primeira parte deste blog, Jonathan explicou como funciona o comando barman-wal-archive. Agora, supondo que você tenha seguido essas instruções, você tem uma instância do PostgreSQL configurada corretamente em execução. Nesta segunda parte, mostrarei como o barman-cloud-backup comando funciona.


Como você pode adivinhar pelo próprio nome do comando, o barman-cloud-backup O comando permite que você execute backups diretamente de um servidor PostgreSQL e use um armazenamento de objetos compatível com S3 na nuvem como destino.
[email protected]:~ $ barman-cloud-backup --help
usage: barman-cloud-backup [-V] [--help] [-v | -q] [-P PROFILE] [-z | -j]
                           [-e {AES256,aws:kms}] [-t] [-h HOST] [-p PORT]
                           [-U USER] [--immediate-checkpoint] [-J JOBS]
                           [-S MAX_ARCHIVE_SIZE] [--endpoint-url ENDPOINT_URL]
                           destination_url server_name

This script can be used to perform a backup of a local PostgreSQL instance and
ship the resulting tarball(s) to the Cloud. Currently only AWS S3 is supported.

positional arguments:
  destination_url       URL of the cloud destination, such as a bucket in AWS
                        S3. For example: `s3://bucket/path/to/folder`.
  server_name           the name of the server as configured in Barman.

optional arguments:
  -V, --version         show program's version number and exit
  --help                show this help message and exit
  -v, --verbose         increase output verbosity (e.g., -vv is more than -v)
  -q, --quiet           decrease output verbosity (e.g., -qq is less than -q)
  -P PROFILE, --profile PROFILE
                        profile name (e.g. INI section in AWS credentials
                        file)
  -z, --gzip            gzip-compress the WAL while uploading to the cloud
  -j, --bzip2           bzip2-compress the WAL while uploading to the cloud
  -e {AES256,aws:kms}, --encryption {AES256,aws:kms}
                        Enable server-side encryption for the transfer.
                        Allowed values: 'AES256'|'aws:kms'.
  -t, --test            Test cloud connectivity and exit
  -h HOST, --host HOST  host or Unix socket for PostgreSQL connection
                        (default: libpq settings)
  -p PORT, --port PORT  port for PostgreSQL connection (default: libpq
                        settings)
  -U USER, --user USER  user name for PostgreSQL connection (default: libpq
                        settings)
  --immediate-checkpoint
                        forces the initial checkpoint to be done as quickly as
                        possible
  -J JOBS, --jobs JOBS  number of subprocesses to upload data to S3 (default:
                        2)
  -S MAX_ARCHIVE_SIZE, --max-archive-size MAX_ARCHIVE_SIZE
                        maximum size of an archive when uploading to S3
                        (default: 100GB)
  --endpoint-url ENDPOINT_URL
                        Override default S3 endpoint URL with the given one

Agora que temos uma ideia mais clara do comando e suas opções, estamos prontos para executar nosso primeiro backup em nuvem:
[email protected]:~ $ barman-cloud-backup -P barman-cloud \
  -e AES256 -j --immediate-checkpoint -J 4 \
  s3://barman-s3-test/ pg12

Assim que o backup for concluído com sucesso, a base diretório que contém o backup estará em seu bucket do S3. Vamos verificar, construindo o caminho de destino com o nome do servidor e a base diretório:
[email protected]:~ $ aws s3 --profile barman-cloud ls s3://barman-s3-test/pg12/base/
                           PRE 20200713T120856/

Alternativamente, você pode usar barman-cloud-backup-list , mas neste artigo eu gostaria de focar na mecânica por trás disso.

O 20200711T092548 diretório contém todos os arquivos relacionados ao backup que acabamos de executar. Vejamos seu conteúdo:
[email protected]:~ $ aws s3 --profile barman-cloud ls s3://barman-s3-test/pg12/base/20200713T120856/
2020-07-13 12:09:08       1138 backup.info
2020-07-13 12:09:07    9263096 data.tar.bz2

Como podemos ver, existe um arquivo compactado e criptografado contendo nosso backup (data.tar.bz2 ) e um arquivo chamado backup.info contendo as informações relacionadas ao backup. Podemos restaurar o backup copiando e descompactando o arquivo data.tar.bz2 arquivo em nosso servidor local, conforme mostrado abaixo:
[email protected]:~ $ aws s3 --profile barman-cloud cp s3://barman-s3-test/pg12/base/20200713T120856/data.tar.bz2 restore-dir
download: s3://barman-s3-test/pg12/base/20200713T120856/data.tar.bz2 to restore-dir/data.tar.bz2

[email protected]:~ $ cd restore-dir

[email protected]:~/restore-dir $ tar xjvf data.tar.bz2

[email protected]:~/restore-dir $ ls
PG_VERSION    conf.d        pg_commit_ts  pg_ident.conf  pg_notify    pg_snapshots  pg_subtrans  pg_wal                postgresql.conf
backup_label  data.tar.bz2  pg_dynshmem   pg_logical     pg_replslot  pg_stat       pg_tblspc    pg_xact
base          global        pg_hba.conf   pg_multixact   pg_serial    pg_stat_tmp   pg_twophase  postgresql.auto.conf

Excelente! Como podemos ver, todos os arquivos no DATADIR da instância do PostgreSQL que fizemos backup, incluindo os arquivos de configuração, estão listados corretamente aqui.

Conclusões


Com o barman-cloud-backup command Barman apresenta um recurso importante que permite executar e enviar backups básicos diretamente de um servidor PostgreSQL local para serviços de armazenamento de objetos em nuvem compatíveis com AWS S3 em apenas algumas etapas simples. Ele suporta criptografia, upload paralelo, compactação e permite economizar espaço em disco em seu servidor local e transferir com segurança os backups para a nuvem.

Com o lançamento do Barman 2.11 , que aconteceu há alguns dias, novos recursos importantes foram introduzidos, incluindo o barman-cloud-wal-restore e o barman-cloud-restore comandos, que permitem recuperar os arquivos de backup e WAL de um armazenamento de objetos, como AWS S3. Nesse sentido, publicaremos em breve um novo artigo no blog explicando como preparar a recuperação de uma instância do PostgreSQL usando esses comandos. Fique atento.