Backup e ripristino in Kubernetes

Questa pagina mostra come eseguire il backup e il ripristino dei dati di AlloyDB Omni utilizzando l'operatore AlloyDB Omni Kubernetes. Ciò richiede conoscenza di base sull'aggiornamento di un cluster Kubernetes utilizzando i file manifest e lo strumento a riga di comando kubectl. Per ulteriori informazioni sull'installazione e sull'esecuzione di AlloyDB Omni su un cluster Kubernetes, consulta Installare AlloyDB su Kubernetes.

Per attivare il backup e il recupero continui di AlloyDB Omni, devi creare un piano di backup per ogni cluster di database. I backup vengono eseguiti in base alle pianificazioni dei backup definite nella risorsa backupPlan. Se nel piano di backup non è definita alcuna pianificazione del backup, i backup continui vengono eseguiti quotidianamente per impostazione predefinita. Puoi ripristinare o clonare i backup da qualsiasi timestamp nella finestra di recupero con una granularità di secondi.

Per informazioni sul backup e sul ripristino dei dati di AlloyDB Omni su implementazioni non Kubernetes, consulta Installare e configurare Barman.

Abilita e pianifica i backup

I backup continui vengono attivati quando crei una risorsa di piano di backup per il tuo cluster di database. Devi creare una risorsa backupPlan per ogni cluster database per abilitare il backup continuo per quel cluster. Questa risorsa del piano di backup definisce i seguenti parametri:

  • La posizione in cui l'operatore AlloyDB Omni archivia i backup. Può essere locale nel tuo cluster Kubernetes o in un bucket Cloud Storage.

  • Un'opzione per impostare più pianificazioni dei backup che creano automaticamente backup di full, incremental e differential. Puoi mettere in pausa questa programmazione in qualsiasi momento, anche durante la definizione iniziale del piano di backup. Se un piano di backup è in pausa, i backup pianificati non vengono creati, ma puoi comunque utilizzarlo per creare backup manualmente.

    Se non vengono specificate pianificazioni dei backup, il valore predefinito è "0 0 * * *", che esegue un backup completo giornaliero a mezzanotte, ora locale.

  • Un periodo di conservazione per i backup archiviati. Può essere breve, come un giorno, o lungo, come 90 giorni. Il valore predefinito è 14.

Il cluster di database può avere più piani di backup, ciascuno con nome e configurazione propri. Se crei più risorse backupPlan con pianificazioni di backup diverse per un cluster di database, devi definire una posizione di backup univoca per ogni risorsa di backup.

Crea un piano per archiviare i backup localmente

Per attivare i backup archiviati localmente, applica il seguente manifest:

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: BackupPlan
    metadata:
      name: BACKUP_PLAN_NAME
      namespace: NAMESPACE
    spec:
      dbclusterRef: DB_CLUSTER_NAME
      backupSchedules:
        full: "FULL_CRON_SCHEDULE"
        differential: "DIFF_CRON_SCHEDULE"
        incremental: "INCR_CRON_SCHEDULE"
      backupRetainDays: RETENTION_DAYS
      paused: PAUSED_BOOLEAN

Sostituisci quanto segue:

  • BACKUP_PLAN_NAME: un nome per questa risorsa del piano di backup, ad esempio backup-plan-1.

  • NAMESPACE: lo spazio dei nomi Kubernetes per questo piano di backup. Deve corrispondere allo spazio dei nomi del cluster di database.

  • DB_CLUSTER_NAME: il nome del cluster di database che hai assegnato al momento della creazione.

  • FULL_CRON_SCHEDULE: una pianificazione del backup per creare un backup completo contenente tutti i dati, espresso in formato cron. Ad esempio, imposta "0 0 * * 0" per eseguire un backup completo alle 00:00 di ogni domenica.

  • DIFF_CRON_SCHEDULE: una pianificazione dei backup per creare backup awalmente completi. I backup successivi sono differenziali, in base alle modifiche intervenute ai dati, espresse in formato cron. Ad esempio, imposta "0 22 * * 3" per eseguire un backup differenziale alle 22:00 di ogni mercoledì.

  • INCR_CRON_SCHEDULE: una pianificazione dei backup per creare backup che includono i dati modificati dall'ultimo backup completo, differenziale o incrementale. È espresso nel cron formato. Ad esempio, imposta "0 21 * * *" per eseguire un backup incrementale ogni giorno alle 21:00.

  • RETENTION_DAYS: il numero di giorni per i quali l'Operatore AlloyDB Omni conserva questo backup. Deve essere un numero intero compreso tra 1 e 90. Il valore predefinito è 14.

  • PAUSED_BOOLEAN: specifica se il piano di backup è in pausa o meno. Fornisci uno dei seguenti valori:

    • true: i backup sono in pausa e non vengono creati backup pianificati.

    • false: l'operatore AlloyDB Omni crea i backup in base alla pianificazione specificata da cronSchedule. Questo è il valore predefinito, se non impostato esplicitamente su true.

    Il valore predefinito è false.

Crea un piano che memorizzi i backup in Cloud Storage

Per attivare i backup archiviati su Cloud Storage:

  1. Crea un bucket Cloud Storage. Prendi nota del nome assegnato a questo bucket, ti servirà in un passaggio successivo.

  2. Crea un account di servizio per aggiungere i backup al bucket.

  3. Concedi il ruolo storage.objectAdmin Identity and Access Management all'account di servizio.

  4. Crea una chiave per l'account di servizio. In questo modo, la chiave privata viene scaricata nel tuo ambiente locale.

  5. Rinomina il file della chiave scaricato in key.json.

  6. Crea un secret Kubernetes contenente la chiave privata:

    kubectl create secret generic SECRET_NAME --from-file=KEY_PATH -n NAMESPACE

    Sostituisci quanto segue:

    • SECRET_NAME: il nome del secret Kubernetes che stai creando, ad esempio gcs-key.

    • KEY_PATH: il percorso del file system locale al key.json file scaricato nei passaggi precedenti.

    • NAMESPACE: lo spazio dei nomi del cluster di database.

  7. Applica il seguente manifest:

      apiVersion: alloydbomni.dbadmin.goog/v1
      kind: BackupPlan
      metadata:
        name: BACKUP_PLAN_NAME
        namespace: NAMESPACE
      spec:
        dbclusterRef: DB_CLUSTER_NAME
        backupSchedules:
          full: "FULL_CRON_SCHEDULE"
          differential: "DIFF_CRON_SCHEDULE"
          incremental: "INCR_CRON_SCHEDULE"
        backupRetainDays: RETENTION_DAYS
        paused: PAUSED_BOOLEAN
        backupLocation:
          type: GCS
          gcsOptions:
            bucket: BUCKET_URL
            key: BACKUP_PATH
            secretRef:
              name: SECRET_NAME
              namespace: NAMESPACE
    

    Sostituisci quanto segue:

    • BACKUP_PLAN_NAME: un nome per questa risorsa del piano di backup, ad esempio backup-plan-1.

    • NAMESPACE: lo spazio dei nomi Kubernetes per questo piano di backup. Deve corrispondere allo spazio dei nomi del cluster di database.

    • DB_CLUSTER_NAME: il nome del cluster di database che hai assegnato al momento della creazione.

    • FULL_CRON_SCHEDULE: una pianificazione del backup per creare un backup completo contenente tutti i dati, espresso in formato cron. Ad esempio, imposta "0 0 * * 0" per eseguire un backup completo alle 00:00 di ogni domenica.

    • DIFF_CRON_SCHEDULE: una pianificazione dei backup per creare backup awalmente completi. I backup successivi sono differenziali, in base alle modifiche intervenute ai dati, espresse in formato cron. Ad esempio, imposta "0 22 * * 3" per eseguire un backup differenziale alle 22:00 di ogni mercoledì.

    • INCR_CRON_SCHEDULE: una pianificazione dei backup per creare backup che includono i dati modificati dall'ultimo backup completo, differenziale o incrementale. È espresso nel cron formato. Ad esempio, imposta "0 21 * * *" per eseguire un backup incrementale ogni giorno alle 21:00.

    • RETENTION_DAYS: il numero di giorni per i quali l'Operatore AlloyDB Omni conserva questo backup. Deve essere un numero intero compreso tra 1 e 90. Il valore predefinito è 14.

    • PAUSED_BOOLEAN: specifica se il piano di backup è in pausa o meno. Fornisci uno dei seguenti valori:

      • true: i backup sono in pausa e non vengono creati backup pianificati.

      • false: l'operatore AlloyDB Omni crea i backup in base alla pianificazione specificata da cronSchedule. Questo è il valore predefinito, se non impostato esplicitamente su true.

      Il valore predefinito è false.

    • BUCKET_URL: il nome del bucket Cloud Storage che hai creato in un passaggio precedente. Non si tratta dell'URL completo del bucket; non anteporre il nome del bucket con gs://.

    • BACKUP_PATH: il percorso della directory in cui l'operatore AlloyDB Omni scrive i backup all'interno del bucket Cloud Storage. Il percorso deve essere assoluto e iniziare con /.

    • SECRET_NAME: il nome scelto per il segreto Kubernetes creato in un passaggio precedente.

Creare manualmente un backup

Puoi creare manualmente una risorsa di backup in qualsiasi momento utilizzando qualsiasi piano di backup che hai già applicato a un cluster di database. L'operatore AlloyDB Omni applica al nuovo backup manuale la posizione di archiviazione e il periodo di conservazione del piano di backup scelto.

Per creare manualmente un backup, applica il seguente manifest:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: Backup
metadata:
  name: BACKUP_NAME
  namespace: NAMESPACE
spec:
  dbclusterRef: DB_CLUSTER_NAME
  backupPlanRef: BACKUP_PLAN_NAME
  manual: true
  physicalBackupSpec:
    backupType: BACKUP_TYPE

Sostituisci quanto segue:

  • BACKUP_NAME: un nome per questo backup, ad esempio backup-1.

  • NAMESPACE: lo spazio dei nomi Kubernetes di questo ripristino. Deve corrispondere allo spazio dei nomi del cluster di database.

  • BACKUP_PLAN_NAME: il nome della risorsa del piano di backup a cui appartiene questo backup. Deve corrispondere al nome che hai scelto quando hai creato il piano di backup.

  • DB_CLUSTER_NAME: il nome del cluster di database che hai assegnato al momento della creazione.

  • BACKUP_TYPE: specifica il tipo di backup manuale da creare. Scegli uno dei seguenti valori:

    • full: crea un backup completo contenente tutti i dati.

    • diff: crea un backup differenziale che dipende dall'ultimo backup completo. I backup successivi sono differenziali, in base alle modifiche intermedie ai dati.

    • incr: crea un backup incrementale che dipende dal backup completo o differenziale precedente per includere i dati modificati dall'ultimo backup completo o differenziale.

Monitorare ed elencare i backup

I piani di backup e i backup sono tutte risorse del cluster Kubernetes. Per visualizzare le relative informazioni, usa il comando kubectl get.

Visualizzare un riepilogo del piano di backup

Per visualizzare informazioni sui piani di backup del cluster di database, esegui questo comando:

kubectl get backupplan.alloydbomni.dbadmin.goog -n NAMESPACE

Sostituisci NAMESPACE con lo spazio dei nomi del cluster di database.

L'output è simile al seguente:

NAME               PHASE   LASTBACKUPTIME         NEXTBACKUPTIME
backup-plan-prod   Ready   2023-10-26T17:26:43Z   2023-10-27T00:00:00Z

Visualizzare un elenco di backup

Per visualizzare un elenco dei backup disponibili per il cluster di database, esegui il seguente comando:

kubectl get backup.alloydbomni.dbadmin.goog -n NAMESPACE

Sostituisci NAMESPACE con lo spazio dei nomi del cluster di database.

L'output è simile al seguente:

NAME                              PHASE       COMPLETETIME
backup-plan-prod-20231026172643   Succeeded   2023-10-26T17:26:53Z
manual-backup-1                   Succeeded   2023-10-26T18:15:27Z
manual-backup-2                   InProgress

Ogni riga della tabella di output rappresenta una risorsa di backup con i seguenti attributi:

  • Il nome del backup.
  • Lo stato del backup, con Succeeded che indica un backup pronto per il ripristino.
  • Il timestamp della creazione del backup.

Ripristina da un backup

AlloyDB ti consente di eseguire il ripristino da singoli backup o di clonare un cluster utilizzando un backup di un momento specifico.

Ripristino da un backup denominato

Per ripristinare da un backup, sostituendo i dati nel cluster del database con quelli nel backup:

  1. Elenca tutti i backup la cui fase è Succeeded.

    kubectl get backup.alloydbomni.dbadmin.goog -n NAMESPACE | grep Succeeded

    Sostituisci NAMESPACE con lo spazio dei nomi del cluster di database.

    Se esiste almeno un candidato per il backup valido, l'output è simile al seguente:

    backup-plan-prod-20231026172643   Succeeded   2023-10-26T17:26:53Z
    manual-backup-1                   Succeeded   2023-10-26T18:15:27Z
    
  2. Scegli uno dei backup elencati nel passaggio precedente come backup da cui eseguire il ripristino. Prendi nota del nome, che utilizzerai nel passaggio successivo.

  3. Applica il seguente manifest:

      apiVersion: alloydbomni.dbadmin.goog/v1
      kind: Restore
      metadata:
        name: RESTORE_NAME
        namespace: NAMESPACE
      spec:
        sourceDBCluster: DB_CLUSTER_NAME
        backup: BACKUP_NAME
    

    Sostituisci quanto segue:

    • RESTORE_NAME: un nome da utilizzare con la risorsa di ripristino dei dati creata da questo manifest, ad esempio restore-1.

    • DB_CLUSTER_NAME: il nome del cluster di database, che hai assegnato quando lo hai creato.

    • BACKUP_NAME: il nome del backup scelto nel passaggio precedente.

Clonare un cluster da un momento specifico

AlloyDB Omni Operator ti consente di clonare i dati del cluster da qualsiasi punto temporale all'interno di una finestra di recupero. La durata della finestra di recupero è determinata direttamente dal periodo di conservazione.

Ad esempio, se il periodo di conservazione è impostato su 14 giorni, non puoi recuperare i dati più vecchi di 14 giorni. Puoi eseguire il ripristino in qualsiasi momento all'interno della finestra di recupero. AlloyDB Omni Operator conserva i backup e i log per un giorno in più rispetto al valore specificato.

  1. Monitora il periodo di recupero per identificare il punto di ripristino:

    kubectl get backupplan.alloydbomni.dbadmin.goog BACKUP_NAME -n NAMESPACE -o json | jq .status.recoveryWindow
    

    Di seguito è riportato un esempio di risposta:

    recoveryWindow:
    begin: "2024-01-31T02:54:35Z"
    

    Il valore del timestamp nel formato timestamp RFC 3339 viene utilizzato nella risorsa di ripristino.

  2. Crea e applica il seguente manifest della risorsa di ripristino:

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: Restore
    metadata:
      name: RESTORE_NAME
      namespace: NAMESPACE
    spec:
      sourceDBCluster: DB_CLUSTER_NAME
      pointInTime: "DATE_AND_TIME_STAMP"
      clonedDBClusterConfig:
        dbclusterName: NEW_DB_CLUSTER_NAME
    

    Sostituisci quanto segue:

    • RESTORE_NAME: un nome da utilizzare con la risorsa di ripristino dei dati creata da questo manifest, ad esempio restore-1.

    • DB_CLUSTER_NAME: il nome del cluster di database, che hai assegnato quando lo hai creato.

    • DATE_AND_TIME_STAMP: il timestamp RFC 3339 con granularità in minuti del backup continuo da cui vuoi eseguire il ripristino, ad esempio 2024-03-05T15:32:10Z.

    • NEW_DB_CLUSTER_NAME: il nome del nuovo cluster di database.

Visualizza lo stato del ripristino

  1. Visualizza l'avanzamento dell'operazione di ripristino:

    kubectl get restore.alloydbomni.dbadmin.goog -n NAMESPACE

    Sostituisci NAMESPACE con lo spazio dei nomi del cluster di database.

    Per eseguire il comando continuamente, aggiungi il flag -Aw.

    L'output è simile al seguente:

    NAME        PHASE               COMPLETETIME   RESTOREDPOINTINTIME
    restore-1   RestoreInProgress
    

    Quando il valore della colonna PHASE nella tabella di output è ProvisionSucceeded, il ripristino è completo.

  2. Visualizza l'avanzamento del cluster di database ripristinato o clonato che viene messo online:

    kubectl get dbclusters -A -n NAMESPACE

    Sostituisci NAMESPACE con lo spazio dei nomi del cluster di database.

    Per eseguire il comando continuamente, aggiungi il flag -Aw.

    L'output è simile al seguente:

    NAMESPACE   NAME               PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
    default     db-cluster-1       10.128.0.55       Ready          DBClusterReady
    

    Quando il valore della colonna DBCLUSTERPHASE nella tabella di output è DBClusterReady, il cluster di database ripristinato o clonato è pronto per l'uso.

Eliminare un backup

In genere, non è necessario eliminare manualmente i backup. L'operatore Omni di AlloyDB elimina automaticamente i backup precedenti al periodo di conservazione specificato durante la creazione di un piano di backup.

Se vuoi eliminare manualmente un backup, questo deve soddisfare i seguenti requisiti:

  • Il backup non è l'unico backup archiviato per il piano di backup. L'operatore Omni di AlloyDB richiede che esista almeno un backup per piano di backup.

  • Il backup non ha altri backup dipendenti. Ad esempio, un backup completo con backup differenziali o incrementali che dipendono da esso oppure un backup incrementale con backup differenziali che dipendono da esso.

Per eliminare un backup, esegui il seguente comando:

kubectl delete backup.alloydbomni.dbadmin.goog/BACKUP_NAME -n NAMESPACE

Sostituisci quanto segue:

  • BACKUP_NAME: il nome del backup da eliminare.

  • NAMESPACE: lo spazio dei nomi del cluster di database.

Aggiornare un piano di backup

Ogni piano di backup è una risorsa Kubernetes. Per aggiornarne la configurazione, svolgi una delle seguenti operazioni:

  • Modifica e riapplica il file manifest del piano di backup.

  • Utilizza il comando kubectl patch.

Ad esempio, per mettere in pausa un piano di backup in esecuzione, modifica l'attributo paused del suo manifest in true e poi applica di nuovo il manifest.

Eliminare un piano di backup

Per eliminare un piano di backup e rimuovere tutte le relative risorse di backup, esegui il seguente comando:

kubectl delete backupplan.alloydbomni.dbadmin.goog/BACKUP_PLAN_NAME -n NAMESPACE

Sostituisci quanto segue:

  • BACKUP_PLAN_NAME: il nome del piano di backup da eliminare.

  • NAMESPACE: lo spazio dei nomi del cluster di database.

Per mettere in pausa un piano di backup senza eliminarlo, imposta l'attributo paused della risorsa del piano di backup su true. Un piano di backup in pausa continua a memorizzare i backup e consente la creazione di backup manuali.