Configure o pgBackRest para o AlloyDB Omni

Selecione uma versão da documentação:

Esta página mostra-lhe como proteger os seus dados configurando o AlloyDB Omni para funcionar com o pgBackRest, um servidor de cópia de segurança de base de dados de código aberto.

Para informações baseadas no Kubernetes, consulte o artigo Faça uma cópia de segurança e restaure no Kubernetes.

Para mais informações sobre o pgBackRest, consulte o respetivo manual do utilizador.

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 cópias de segurança locais

Os passos nesta secção explicam uma configuração básica do pgBackRest. As configurações básicas não ativam as cópias de segurança de acordo com uma programação. Para mais informações, consulte o artigo Configure cópias de segurança programadas.

Uma vez que o pgBackRest é um produto de terceiros flexível compatível com o AlloyDB Omni, pode modificar qualquer um destes passos conforme adequado para as suas próprias necessidades e preferências.

Monte um volume de cópia de segurança no seu contentor

Para fins de organização, recomendamos vivamente que crie e monte um volume separado para as cópias de segurança do pgBackRest. Para configurar um novo volume, conclua os passos seguintes:

  1. Se o contentor estiver em execução, pare-o 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 usou para o seu contentor.
  2. Crie um diretório de cópia de segurança no sistema de ficheiros do contentor.

    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 de anfitrião no qual as cópias de segurança vão ser armazenadas.
  3. Recrie o contentor com o novo volume de cópias de segurança.

    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 usou para o seu contentor.
    • NEW_PASSWORD: palavra-passe atribuída ao utilizador postgres do novo contentor após a respetiva criação. Tenha em atenção que NEW_PASSWORD só define uma nova palavra-passe quando DATA_DIR é uma nova localização.
    • DATA_DIR: caminho do diretório do anfitrião onde os seus dados estão armazenados.
    • DATA_DIR: caminho do diretório do anfitrião onde os seus dados estão armazenados.
    • BACKUP_DIR: diretório de anfitrião no qual as cópias de segurança vão ser armazenadas.
    • HOST_PORT: porta TCP na máquina anfitriã para a qual o contentor deve publicar a sua própria porta 5432. Para usar a porta predefinida do PostgreSQL também na máquina anfitriã, especifique 5432.
  4. Torne o diretório de cópias de segurança, no seu contentor, 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 usou para o seu contentor.

Configure cópias de segurança locais

O pgBackRest cria subdiretórios para cada cópia de segurança feita e inclui um ficheiro de manifesto de texto simples.

O pgBackRest usa o termo stanza para se referir à configuração de um cluster de base de dados do PostgreSQL. O nome da secção é arbitrário e não tem de corresponder ao nome do servidor anfitrião, do cluster do PostgreSQL ou da base de dados. A documentação do pgBackRest sugere dar ao stanza o nome da função do cluster.

O repositório é onde as cópias de segurança são escritas. O pgBackRest suporta a escrita em mais do que um repositório numa determinada secção. A maioria dos parâmetros de configuração relacionados com os repositórios é indexada com um valor numérico. Por exemplo, repo1-. Os parâmetros relacionados com clusters do PostgreSQL também são indexados de forma independente. Por exemplo, pg1-.

O pgBackRest tira partido de um ficheiro de configuração denominado pgbackrest.conf para conter parâmetros globais e específicos da secção.

Para criar e inicializar um ficheiro de configuração para fazer uma cópia de segurança do cluster do AlloyDB Omni, crie o ficheiro pgbackrest.conf no diretório de cópias de segurança do lado do anfitrião que criou em Monte um volume de cópia de segurança no seu contentor.

[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 cumprir os seus requisitos específicos, se necessário, como os seguintes:

  • repo1-path: Localização do diretório onde as cópias de segurança são escritas. Recomendamos uma localização visível para o servidor anfitrião e o contentor.

  • log-path: Localização do diretório onde os ficheiros de registo são escritos. Se quiser escrever os ficheiros de registo numa localização separada, não misturada com as próprias cópias de segurança, ajuste este parâmetro.

  • repo1-retention-full: Número de cópias de segurança completas a reter.

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

  • repo1-retention-diff: Número de cópias de segurança diferenciais a reter.

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

  • log-level-console: Nível de registo escrito no ecrã (STDOUT) quando executa comandos pgBackup. Pode ajustar esta opção de acordo com as suas necessidades no ficheiro de configuração ou substituir este valor com o argumento da linha de comandos --log-level-console. A predefinição é warn.

  • start-fast: Força um ponto de verificação para iniciar rapidamente as cópias de segurança. A predefinição é n.

  • archive-async: Envie ficheiros de segmentos WAL de forma assíncrona para melhorar o desempenho. A predefinição é n.

  • process-max: Número máximo de processos a usar para compressão e transferência. Normalmente, esta opção está definida como max_cpu/4 num cluster principal ou max_cpu/2 num cluster em espera. A predefinição é 1.

  • compress-type: Algoritmo de compressão a usar. A predefinição é gz.

Existem muitos outros parâmetros de configuração do pgBackRest que podem ser ajustados. Esta documentação abrange apenas os parâmetros obrigatórios para a configuração predefinida do AlloyDB Omni e algumas definições de parâmetros recomendadas. Para ver a lista completa de parâmetros de configuração, consulte a referência de configuração do pgBackRest na documentação online.

Depois de configurar o pgBackRest, os repositórios de destino onde as cópias de segurança são escritas têm de ser inicializados através da criação da secção, que usa os parâmetros definidos no ficheiro de configuração.

Para configurar a base de dados para cópias de segurança, conclua os seguintes passos:

  1. Crie a stanza com 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 usou para o seu contentor.
  2. Configure a base de dados para cópias de segurança.

    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 usou para o seu contentor.
  3. Reinicie o contentor.

    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 usou para o seu contentor.
  4. Valide a configuração da cópia de segurança.

    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 usou para o seu contentor.
  5. Faça 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 usou para o seu contentor.

Faça uma cópia de segurança

  1. Faça uma cópia de segurança completa.

    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 usou para o seu contentor.
  2. Faça uma cópia de segurança 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 usou para o seu contentor.
  3. Denuncie cópias de segurança.

    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 usou para o seu contentor.

Configure cópias de segurança agendadas

Para configurar cópias de segurança agendadas, crie uma tarefa cron que execute o comando pgbackrest backup com a frequência necessária. Para mais informações, consulte o artigo Agende uma cópia de segurança.

Configuração personalizada e cópias de segurança remotas

Depois de ter uma configuração básica a funcionar, pode ajustar o ficheiro de configuração de acordo com as suas necessidades e preferências através das opções documentadas na referência de configuração do pgBackRest.

Isto inclui a especificação de repositórios de cópias de segurança adicionais localizados em máquinas remotas ou na nuvem. Se definir vários repositórios, o pgBackRest escreve simultaneamente em todos eles como ação de cópia de segurança predefinida.

Por exemplo, o pgBackRest suporta a utilização de um contentor do Cloud Storage como repositório de cópias de segurança, com várias opções de configuração relacionadas. A secção seguinte demonstra uma forma de usar estas opções.

Um exemplo de configuração com o Cloud Storage

Os passos nesta secção baseiam-se no ficheiro de configuração apresentado no artigo Configuração básica com cópias de segurança locais. Estas modificações ao ficheiro definem um segundo repositório de cópias de segurança num contentor do Cloud Storage, acedido através do Identity and Access Management (IAM).

O estilo de autenticação automática neste exemplo requer um cluster do AlloyDB Omni para ser executado numa instância de VM do Compute Engine. Se não executar o AlloyDB Omni numa instância de VM do Compute Engine, pode continuar a fazer cópias de segurança para um contentor do Cloud Storage através de outro método de autenticação, como uma Google Cloud chave de conta de serviço guardada no sistema de ficheiros local.

Para estender o ficheiro de configuração anterior para definir um repositório pgBackRest baseado no Cloud Storage, siga estes passos:

  1. Configure as autorizações do contentor para permitir que a conta de serviço associada à sua instância de VM escreva no contentor. Isto requer que a função de IAM de utilizador de objetos de armazenamento seja definida nessa conta de serviço.

  2. Adicione estas linhas à secção [global] do ficheiro 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 contentor do Cloud Storage no qual quer que o pgBackRest armazene as cópias de segurança.
    • PATH_IN_BUCKET: caminho do diretório no contentor do Cloud Storage onde quer que o pgBackRest armazene as cópias de segurança.
  3. Inicialize a localização da cópia de segurança baseada na nuvem com 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 usou para o seu contentor.

Depois de inicializar o repositório de cópias de segurança no seu contentor do Cloud Storage com o comando pgbackrest stanza-create, o pgBackRest pode fazer cópias de segurança em até duas localizações:

  • Localização no sistema de ficheiros local, definida noutro local no ficheiro de configuração como repo1-path. Esta é a localização predefinida quando --repo não está especificado no comando pgbackrest.

  • Contentor do Cloud Storage, definido através das diretivas de configuração repo2-gcs-bucket configuradas por este exemplo. Para usar o contentor do Google Cloud Storage, especifique --repo=2 no comando pgbackrest.

O que se segue?