Configurar o pgBackRest para o AlloyDB Omni

Esta página mostra como proteger seus dados configurando o AlloyDB Omni para funcionar com o pgBackRest, um servidor de backup de banco de dados de código aberto.

Para informações baseadas no Kubernetes, consulte Fazer backup e restaurar no Kubernetes.

Para mais informações sobre o pgBackRest, consulte o guia do usuário.

Antes de começar

Antes de configurar o AlloyDB Omni para funcionar com o pgBackRest, conclua os seguintes pré-requisitos:

Configuração básica com backups locais

As etapas desta seção orientam você em uma configuração básica do pgBackRest. As configurações básicas não ativam backups em uma programação. Para mais informações, consulte Configurar backups programados.

Como o pgBackRest é um produto terceirizado flexível compatível com o AlloyDB Omni, é possível modificar qualquer uma dessas etapas conforme necessário para atender às suas necessidades e preferências.

Montar um volume de backup no contêiner

Para fins de organização, recomendamos que você crie e monte um volume separado para backups do pgBackRest. Para configurar um novo volume, siga estas etapas:

  1. Se o contêiner estiver em execução, pare e remova-o.

    Docker

    docker stop CONTAINER_NAME
    docker rm CONTAINER_NAME

    Docker

    docker stop CONTAINER_NAME
    docker rm CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
    podman rm CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
    podman rm CONTAINER_NAME

    Substitua a seguinte variável:

    • CONTAINER_NAME: nome que você usou para o contêiner.
  2. Crie um diretório de backup no sistema de arquivos do contêiner.

    Docker

    mkdir -p BACKUP_DIR
    

    Docker

    mkdir -p BACKUP_DIR
    

    Podman

    mkdir -p BACKUP_DIR
    

    Podman

    mkdir -p BACKUP_DIR
    

    Substitua a seguinte variável:

    • BACKUP_DIR: diretório do host em que seus backups serão armazenados.
  3. Recrie o contêiner com o novo volume de backups.

    Docker

    docker run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest
    

    Docker

    docker run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest
    

    Substitua as seguintes variáveis:

    • CONTAINER_NAME: nome que você usou para o contêiner.
    • NEW_PASSWORD: senha atribuída ao usuário postgres do novo contêiner após a criação. NEW_PASSWORD só vai definir uma nova senha quando DATA_DIR for um novo local.
    • DATA_DIR: caminho do diretório do host em que seus dados são armazenados.
    • DATA_DIR: caminho do diretório do host em que seus dados são armazenados.
    • BACKUP_DIR: diretório do host em que seus backups serão armazenados.
    • HOST_PORT: porta TCP na máquina host em que o contêiner precisa publicar a própria porta 5432. Para usar a porta padrão do PostgreSQL na máquina host, especifique 5432.
  4. Faça com que o diretório de backups no contêiner seja legível por postgres.

    Docker

    docker exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Docker

    docker exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Podman

    podman exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Podman

    podman exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Substitua a seguinte variável:

    • CONTAINER_NAME: nome que você usou para o contêiner.

Configurar backups locais

O pgBackRest cria subdiretórios para cada backup feito e inclui um arquivo de manifesto de texto simples.

O pgBackRest usa o termo estrofe para se referir à configuração de um cluster de banco de dados PostgreSQL. O nome da estrofe é arbitrário e não precisa corresponder ao servidor host, ao cluster do PostgreSQL ou ao nome do banco de dados. A documentação do pgBackRest sugere nomear a estrofe com base na função do cluster.

O repositório é onde os backups são gravados. O pgBackRest oferece suporte à gravação em mais de um repositório em uma determinada estrofe. A maioria dos parâmetros de configuração relacionados aos repositórios são indexados com um valor numérico. Por exemplo, repo1- Os parâmetros relacionados aos clusters do PostgreSQL também são indexados de forma independente. Por exemplo, pg1-.

O pgBackRest usa um arquivo de configuração, chamado pgbackrest.conf, para armazenar parâmetros globais e específicos da estrofe.

Para criar e inicializar um arquivo de configuração para fazer backup do cluster AlloyDB Omni, crie o arquivo pgbackrest.conf no diretório de backups do host que você criou em Montar um volume de backup no contêiner.

[global]
# Paths (all mandatory):
repo1-path=/var/lib/postgresql/backups
spool-path=/var/lib/postgresql/backups/spool
lock-path=/var/lib/postgresql/backups

# Retention details:
repo1-retention-full=3
repo1-retention-full-type=count
repo1-retention-diff=16

# Force a checkpoint to start backup immediately:
start-fast=y

# Logging parameters:
log-path=/var/lib/postgresql/backups
log-level-console=info
log-level-file=info

# Recommended ZSTD compression:
compress-type=zst

# Other performance parameters:
archive-async=y
archive-push-queue-max=1024MB
archive-get-queue-max=256MB
archive-missing-retry=y

[global:archive-push]
process-max=2

[global:archive-get]
process-max=2

[omni]
pg1-user=postgres
pg1-socket-path=/tmp
pg1-path=/var/lib/postgresql/data

Alguns parâmetros são obrigatórios, mas outros podem ser ajustados para atender aos requisitos específicos, se necessário, como os seguintes:

  • repo1-path: local do diretório em que os backups são gravados. Recomendamos um local visível para o servidor host e o contêiner.

  • log-path: local do diretório em que os arquivos de registro são gravados. Se você quiser gravar os arquivos de registro em um local separado, sem misturar com os backups, ajuste esse parâmetro.

  • repo1-retention-full: número de backups completos a serem mantidos.

  • repo1-retention-full-type: informa se a retenção é medida por contagem ou período (dias).

  • repo1-retention-diff: número de backups diferenciais a serem retidos.

Outras configurações de parâmetros não críticas, mas recomendadas, que são compatíveis com o AlloyDB Omni no arquivo de configuração incluem:

  • log-level-console: nível de registro gravado na tela (STDOUT) ao executar comandos pgBackup. É possível ajustar esse valor para atender às suas necessidades no arquivo de configuração ou substituir esse valor com o argumento de linha de comando --log-level-console. O padrão é warn.

  • start-fast: força um ponto de verificação para iniciar os backups rapidamente. O padrão é n.

  • archive-async: envia arquivos de segmento WAL de forma assíncrona para melhorar o desempenho. O padrão é n.

  • process-max: número máximo de processos a serem usados para compactação e transferência. Isso geralmente é definido como max_cpu/4 em um cluster principal ou max_cpu/2 em um cluster de espera. O padrão é 1.

  • compress-type: algoritmo de compactação a ser usado. O padrão é gz.

Muitos outros parâmetros de configuração do pgBackRest existem e podem ser ajustados. Esta documentação abrange apenas os parâmetros obrigatórios para a configuração padrão do AlloyDB Omni e algumas configurações de parâmetros recomendadas. Para conferir a lista completa de parâmetros de configuração, consulte a documentação on-line Referência de configuração do pgBackRest.

Depois de configurar o pgBackRest, os repositórios de destino em que os backups são gravados precisam ser inicializados criando a estrofe, que usa os parâmetros definidos no arquivo de configuração.

Para configurar o banco de dados para backups, siga estas etapas:

  1. Crie a estrofe usando o comando stanza-create.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Substitua as seguintes variáveis:

    • CONTAINER_NAME: nome que você usou para o contêiner.
  2. Configure o banco de dados para backups.

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Substitua as seguintes variáveis:

    • CONTAINER_NAME: nome que você usou para o contêiner.
  3. Reinicie o contêiner.

    Docker

    docker restart CONTAINER_NAME
    

    Docker

    docker restart CONTAINER_NAME
    

    Podman

    podman restart CONTAINER_NAME
    

    Podman

    podman restart CONTAINER_NAME
    

    Substitua as seguintes variáveis:

    • CONTAINER_NAME: nome que você usou para o contêiner.
  4. Valide a configuração de backup.

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Substitua as seguintes variáveis:

    • CONTAINER_NAME: nome que você usou para o contêiner.
  5. Execute uma verificação do pgBackRest.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Substitua as seguintes variáveis:

    • CONTAINER_NAME: nome que você usou para o contêiner.

Fazer um backup

  1. Faça um backup completo.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full \
    backup
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full \
    backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full \
    backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full \
    backup
    

    Substitua as seguintes variáveis:

    • CONTAINER_NAME: nome que você usou para o contêiner.
  2. Faça um backup diferencial.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff \
    backup
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff \
    backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff \
    backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff \
    backup
    

    Substitua as seguintes variáveis:

    • CONTAINER_NAME: nome que você usou para o contêiner.
  3. Backups de relatórios.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Substitua as seguintes variáveis:

    • CONTAINER_NAME: nome que você usou para o contêiner.

Configurar backups programados

Para configurar backups programados, crie um trabalho cron que execute o comando pgbackrest backup com a frequência necessária. Para mais informações, consulte Programar um backup.

Configuração personalizada e backups remotos

Depois de ter uma configuração básica funcionando, você pode ajustar seu arquivo de configuração para atender às suas necessidades e preferências usando as opções documentadas na referência de configuração do pgBackRest.

Isso inclui especificar outros repositórios de backup localizados em máquinas remotas ou na nuvem. Se você definir vários repositórios, o pgBackRest vai gravar em todos eles simultaneamente como a ação de backup padrão.

Por exemplo, o pgBackRest oferece suporte a usar um bucket do Cloud Storage como um repositório de backup, com várias opções de configuração relacionadas. A seção a seguir demonstra uma maneira de usar essas opções.

Exemplo de configuração usando o Cloud Storage

As etapas desta seção são baseadas no arquivo de configuração apresentado em Configuração básica com backups locais. Essas modificações no arquivo definem um segundo repositório de backup em um bucket do Cloud Storage, acessado pelo Identity and Access Management (IAM).

O estilo de autenticação automática neste exemplo exige que um cluster do AlloyDB Omni seja executado em uma instância de VM do Compute Engine. Se você não executar o AlloyDB Omni em uma instância de VM do Compute Engine, ainda poderá fazer backup em um bucket do Cloud Storage usando outro método de autenticação, como uma chave de conta de serviço Google Cloud salva no sistema de arquivos local.

Para estender o arquivo de configuração anterior e definir um repositório pgBackRest baseado no Cloud Storage, siga estas etapas:

  1. Configure as permissões do bucket para permitir que a conta de serviço anexada à instância da VM grave no bucket. Isso requer que a função de IAM de usuário de objeto do Storage seja definida nessa conta de serviço.

  2. Adicione estas linhas à seção [global] do arquivo pgbackrest.conf:

    # Cloud Storage access details:
    repo2-type=gcs
    repo2-gcs-key-type=auto
    repo2-storage-verify-tls=n
    
    # Cloud Storage bucket and path details:
    repo2-gcs-bucket=BUCKET_NAME
    repo2-path=PATH_IN_BUCKET
    
    # Cloud Storage backup retention parameters:
    repo2-retention-full=8
    repo2-retention-full-type=count
    

    Substitua a seguinte variável:

    • BUCKET_NAME: nome do bucket do Cloud Storage em que você quer que o pgBackRest armazene backups.
    • PATH_IN_BUCKET: caminho do diretório no bucket do Cloud Storage em que você quer que o pgBackRest armazene backups.
  3. Inicialize o local de backup baseado na nuvem usando o comando pgbackrest stanza-create:

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Substitua a seguinte variável:

    • CONTAINER_NAME: nome que você usou para o contêiner.

Depois de inicializar o repositório de backup no bucket do Cloud Storage usando o comando pgbackrest stanza-create, o pgBackRest pode fazer backup em dois locais:

  • Local no sistema de arquivos local, definido em outro lugar no arquivo de configuração como repo1-path. Esse é o local padrão quando --repo não é especificado no comando pgbackrest.

  • Bucket do Cloud Storage, definido usando as diretivas de configuração repo2-gcs-bucket configuradas por este exemplo. Para usar o bucket do Cloud Storage, especifique --repo=2 no comando pgbackrest.

A seguir