Questa pagina mostra come proteggere i dati configurando AlloyDB Omni per il funzionamento con pgBackRest, un server di backup del database open source.
Per informazioni basate su Kubernetes, consulta Eseguire il backup e il ripristino in Kubernetes.
Per ulteriori informazioni su pgBackRest, consulta la guida dell'utente.
Prima di iniziare
Prima di configurare AlloyDB Omni per il funzionamento con pgBackRest, completa i seguenti prerequisiti:
- Installa ed esegui AlloyDB Omni su un server di tua proprietà.
- Configura lo spazio di archiviazione dei dati permanenti per la tua istanza AlloyDB Omni.
Configurazione di base con i backup locali
I passaggi di questa sezione illustrano una configurazione di base di pgBackRest. Le configurazioni di base non attivano i backup pianificati. Per ulteriori informazioni, consulta Configurare i backup pianificati.
Poiché pgBackRest è un prodotto di terze parti flessibile compatibile con AlloyDB Omni, puoi modificare uno qualsiasi di questi passaggi in base alle tue esigenze e preferenze.
Montare un volume di backup nel contenitore
Per motivi di organizzazione, ti consigliamo vivamente di creare e montare un volume distinto per i backup di pgBackRest. Per configurare un nuovo volume, completa i seguenti passaggi:
Se il contenitore è in esecuzione, interrompilo e rimuovilo.
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
Sostituisci la seguente variabile:
CONTAINER_NAME
: il nome utilizzato per il contenitore.
Crea una directory di backup nel file system del contenitore.
Docker
mkdir -p BACKUP_DIR
Docker
mkdir -p BACKUP_DIR
Podman
mkdir -p BACKUP_DIR
Podman
mkdir -p BACKUP_DIR
Sostituisci la seguente variabile:
BACKUP_DIR
: la directory host in cui verranno memorizzati i backup.
Ricrea il contenitore con il nuovo volume di backup.
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
Sostituisci le seguenti variabili:
CONTAINER_NAME
: il nome utilizzato per il contenitore.NEW_PASSWORD
: password assegnata all'utentepostgres
del nuovo contenitore dopo la sua creazione. Tieni presente cheNEW_PASSWORD
imposterà una nuova password solo quandoDATA_DIR
è una nuova posizione.DATA_DIR
: percorso della directory host in cui sono memorizzati i dati.DATA_DIR
: percorso della directory host in cui sono memorizzati i dati.BACKUP_DIR
: la directory host in cui verranno memorizzati i backup.HOST_PORT
: porta TCP sulla macchina host su cui il container deve pubblicare la propria porta5432
. Per utilizzare anche la porta predefinita di PostgreSQL sulla macchina host, specifica5432
.
Rendi la directory dei backup nel tuo contenitore leggibile da
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
Sostituisci la seguente variabile:
CONTAINER_NAME
: il nome utilizzato per il contenitore.
Configurare i backup locali
pgBackRest crea sottodirectory per ogni backup eseguito e include un file manifest in testo normale.
pgBackRest utilizza il termine stanza per fare riferimento alla configurazione di un cluster di database PostgreSQL. Il nome della stanza è arbitrario e non deve corrispondere al nome del server host, del cluster PostgreSQL o del database. La documentazione di pgBackRest suggerisce di assegnare alla stanza il nome della funzione del cluster.
Il repository è il luogo in cui vengono scritti i backup. pgBackRest supporta la scrittura in più
di un repository in una determinata stanza. La maggior parte dei parametri di configurazione relativi ai repository è indicizzata con un valore numerico. Ad esempio, repo1-
. Anche i parametri correlati ai cluster PostgreSQL sono indicizzati in modo indipendente. Ad esempio,
pg1-
.
pgBackRest utilizza un file di configurazione, chiamato pgbackrest.conf
, per contenere parametri globali e specifici della stanza.
Per creare e inizializzare un file di configurazione per il backup del tuo cluster AlloyDB Omni, crea il file pgbackrest.conf
nella directory dei backup lato host che hai creato in Montare un volume di backup nel contenitore.
[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
Alcuni parametri sono obbligatori, ma altri possono essere modificati per soddisfare i tuoi requisiti specifici, se necessario, ad esempio:
repo1-path
: posizione della directory in cui vengono scritti i backup. Ti consigliamo una posizione visibile sia al server host sia al contenitore.log-path
: posizione della directory in cui vengono scritti i file di log. Se vuoi scrivere i file di log in una posizione separata, non insieme ai backup stessi, modifica questo parametro.repo1-retention-full
: numero di backup completi da conservare.repo1-retention-full-type
: indica se la fidelizzazione viene misurata in base al conteggio o al periodo di tempo (giorni).repo1-retention-diff
: Numero di backup differenziali da conservare.
Altre impostazioni dei parametri non critiche, ma consigliate, compatibili con AlloyDB Omni nel file di configurazione includono:
log-level-console
: livello di registrazione scritto sullo schermo (STDOUT) quando vengono eseguiti i comandi pgBackup. Puoi modificarlo in base alle tue esigenze nel file di configurazione o eseguire l'override di questo valore con l'argomento della riga di comando--log-level-console
. Il valore predefinito èwarn
.start-fast
: obbliga un checkpoint per avviare rapidamente i backup. Il valore predefinito èn
.archive-async
: push dei file di segmenti WAL in modo asincrono per migliorare le prestazioni. Il valore predefinito èn
.process-max
: numero massimo di processi da utilizzare per la compressione e il trasferimento. In genere, questo valore è impostato sumax_cpu/4
in un cluster principale o sumax_cpu/2
in un cluster di standby. Il valore predefinito è1
.compress-type
: Algoritmo di compressione da utilizzare. Il valore predefinito ègz
.
Esistono molti altri parametri di configurazione di pgBackRest che possono essere regolati. Questa documentazione riguarda solo i parametri obbligatori per la configurazione predefinita di AlloyDB Omni e alcune impostazioni consigliate dei parametri. Per l'elenco completo dei parametri di configurazione, consulta la documentazione online di Referenze per la configurazione di pgBackRest.
Dopo aver configurato pgBackRest, i repository di destinazione in cui vengono scritti i backup devono essere inizializzati creando la stanza, che utilizza i parametri impostati nel file di configurazione.
Per configurare il database per i backup:
Crea la stanza utilizzando il 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
Sostituisci le seguenti variabili:
CONTAINER_NAME
: il nome utilizzato per il contenitore.
Configura il database per i backup.
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;"
Sostituisci le seguenti variabili:
CONTAINER_NAME
: il nome utilizzato per il contenitore.
Riavvia il contenitore.
Docker
docker restart CONTAINER_NAME
Docker
docker restart CONTAINER_NAME
Podman
podman restart CONTAINER_NAME
Podman
podman restart CONTAINER_NAME
Sostituisci le seguenti variabili:
CONTAINER_NAME
: il nome utilizzato per il contenitore.
Convalida la configurazione del 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"
Sostituisci le seguenti variabili:
CONTAINER_NAME
: il nome utilizzato per il contenitore.
Esegui un controllo di 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
Sostituisci le seguenti variabili:
CONTAINER_NAME
: il nome utilizzato per il contenitore.
Esegui un backup
Esegui un 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
Sostituisci le seguenti variabili:
CONTAINER_NAME
: il nome utilizzato per il contenitore.
Esegui un backup differenziale.
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
Sostituisci le seguenti variabili:
CONTAINER_NAME
: il nome utilizzato per il contenitore.
Segnala i backup.
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
Sostituisci le seguenti variabili:
CONTAINER_NAME
: il nome utilizzato per il contenitore.
Configurare i backup pianificati
Per configurare i backup pianificati, crea un cron job che esegua il comando pgbackrest backup
ogni volta che è necessario. Per ulteriori informazioni, consulta la sezione Pianificare un backup.
Configurazione personalizzata e backup da remoto
Dopo aver creato una configurazione di base funzionante, puoi ottimizzare il file di configurazione in base alle tue esigenze e preferenze utilizzando le opzioni descritte nel documento di riferimento sulla configurazione di pgBackRest.
Ciò include la specifica di repository di backup aggiuntivi situati su macchine remote o nel cloud. Se definisci più repository, pgBackRest scrive contemporaneamente in tutti come azione di backup predefinita.
Ad esempio, pgBackRest supporta l'utilizzo di un bucket Cloud Storage come repository di backup, con una serie di opzioni di configurazione correlate. La sezione seguente mostra un modo per utilizzare queste opzioni.
Un esempio di configurazione che utilizza Cloud Storage
I passaggi in questa sezione si basano sul file di configurazione introdotto in Configurazione di base con i backup locali. Queste modifiche al file definiscono un secondo repository di backup in un bucket Cloud Storage, a cui si accede tramite Identity and Access Management (IAM).
Lo stile di autenticazione automatica in questo esempio richiede l'esecuzione di un cluster AlloyDB Omni su un'istanza VM Compute Engine. Se non esegui AlloyDB Omni su un'istanza VM Compute Engine, puoi comunque eseguire il backup in un bucket Cloud Storage utilizzando un altro metodo di autenticazione, ad esempio una Google Cloud chiave dell'account di servizio salvata nel file system locale.
Per estendere il file di configurazione precedente in modo da definire un repository pgBackRest basato su Cloud Storage:
Configura le autorizzazioni del bucket per consentire all'account di servizio collegato all'istanza VM di scrivere nel bucket. Per farlo, è necessario impostare il ruolo IAM Utente oggetto archiviazione nell'account di servizio.
Aggiungi queste righe alla sezione
[global]
del filepgbackrest.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
Sostituisci la seguente variabile:
BUCKET_NAME
: il nome del bucket Cloud Storage in cui vuoi che pgBackRest memorizzi i backup.PATH_IN_BUCKET
: percorso della directory nel bucket Cloud Storage in cui vuoi che pgBackRest archivi i backup.
Inizializza la posizione di backup basata su cloud utilizzando il 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
Sostituisci la seguente variabile:
CONTAINER_NAME
: il nome utilizzato per il contenitore.
Dopo aver inizializzato il repository di backup nel bucket Cloud Storage
utilizzando il comando pgbackrest stanza-create
, pgBackRest può eseguire il backup in due
località:
Posizione nel file system locale, definita altrove nel file di configurazione come
repo1-path
. Questa è la posizione predefinita quando--repo
non è specificato nel comandopgbackrest
.Bucket Cloud Storage, definito utilizzando le direttive di configurazione
repo2-gcs-bucket
impostate da questo esempio. Per utilizzare il bucket Cloud Storage, specifica--repo=2
nel comandopgbackrest
.