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:
- Instale e execute o AlloyDB Omni num servidor que controla.
- Configure o armazenamento de dados persistente para a sua instância do AlloyDB Omni.
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:
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.
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.
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 utilizadorpostgres
do novo contentor após a respetiva criação. Tenha em atenção queNEW_PASSWORD
só define uma nova palavra-passe quandoDATA_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 porta5432
. Para usar a porta predefinida do PostgreSQL também na máquina anfitriã, especifique5432
.
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 comomax_cpu/4
num cluster principal oumax_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:
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.
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.
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.
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.
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
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.
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.
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:
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.
Adicione estas linhas à secção
[global]
do ficheiropgbackrest.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.
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 comandopgbackrest
.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 comandopgbackrest
.