Pianificazione dei backup

Configura e gestisci le pianificazioni automatiche dei backup PostgreSQL per IBM Bob, incluse le espressioni cron, le policy di retention, la sospensione e la ripresa, e il monitoraggio.

I backup pianificati automatizzano la protezione del database e riducono il rischio di perdita di dati. IBM Bob utilizza Kubernetes CronJob per eseguire i backup in base alla pianificazione definita nella configurazione di backup.

Nota:

Per impostazione predefinita, i backup vengono eseguiti usando il Tempo Universale Coordinato (UTC).

Configurazione delle pianificazioni di backup

Configura una pianificazione di backup aggiornando il campo schedule nella ConfigMap di configurazione del backup. Il valore utilizza la sintassi cron standard e determina con quale frequenza vengono eseguiti i job di backup.

apiVersion: v1
kind: ConfigMap
metadata:
  name: bob-postgres-backup-config
  namespace: <bob-instance-namespace>
  labels:
    bob.ibm.com/backup-config: "true"
data:
  config.yaml: |
    # Backup schedule in cron format (UTC timezone)
    schedule: "0 2 * * *"  # Daily at 2:00 AM UTC

    # ... other configuration ...

Comprensione della sintassi cron

Le pianificazioni cron sono composte da cinque campi che definiscono la frequenza di esecuzione.

CampoValoriCaratteri speciali
Minuto0–59*, ,, -, /
Ora0–23*, ,, -, /
Giorno1–31*, ,, -, /
Mese1–12*, ,, -, /
Giorno della settimana0–7 (0 e 7 rappresentano domenica)*, ,, -, /

Scegli una pianificazione che sia in linea con i tuoi Recovery Point Objective (RPO) e i requisiti aziendali.

Considerazioni sulla pianificazione

Fuso orario (UTC)

Tutte le pianificazioni vengono eseguite nel fuso orario UTC. Pianifica gli orari in base all'ora UTC, non all'ora locale. Ad esempio:

  • 0 2 * * * = 02:00 UTC = 04:00 CEST (estate) o 03:00 CET (inverno)

Backup simultanei

Tutti i cluster configurati eseguono il backup simultaneamente con la stessa pianificazione. Questo moltiplica il carico di I/O sullo storage e condivide la larghezza di banda di rete tra tutti i backup. Per scaglionare i backup negli ambienti con risorse limitate, crea più ConfigMap con pianificazioni diverse:

# ConfigMap 1: bob-db at 2 AM
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: bob-db-backup-config
  labels:
    bob.ibm.com/backup-config: "true"
data:
  config.yaml: |
    schedule: "0 2 * * *"
    clusters:
      - name: bob-db
        database: bob
        secretName: bob-db-app
---
# ConfigMap 2: keycloak-db at 3 AM
apiVersion: v1
kind: ConfigMap
metadata:
  name: keycloak-db-backup-config
  labels:
    bob.ibm.com/backup-config: "true"
data:
  config.yaml: |
    schedule: "0 3 * * *"
    clusters:
      - name: bob-keycloak-db
        database: app
        secretName: bob-keycloak-db-app

Durata del backup

Considera la dimensione del database durante la pianificazione per evitare sovrapposizioni tra le esecuzioni di backup.

Dimensione databaseDurata prevista
Meno di 1 GB1–5 minuti
1–5 GB5–15 minuti
5–20 GB15–45 minuti
20–50 GB45–120 minuti
Più di 50 GBPiù di 2 ore

Ore di bassa attività

Pianifica i backup durante i periodi di basso utilizzo. Evita le ore di punta lavorative e monitora le prestazioni del database durante i backup.

Modifica della pianificazione

Per aggiornare la pianificazione di backup, modifica la ConfigMap di backup:

oc edit configmap bob-postgres-backup-config -n <bob-instance-namespace>

Aggiorna il campo schedule e salva. Il controller rileva automaticamente la modifica e aggiorna i CronJob.

Verifica la pianificazione aggiornata:

oc get cronjob bob-db-backup-cronjob -n <bob-instance-namespace> -o jsonpath='{.spec.schedule}'

Sospensione e ripresa dei backup

Se devi mettere in pausa i backup durante la manutenzione senza rimuovere la configurazione di backup, sospendi i backup nella custom resource Bob:

oc patch bob bob-instance -n <bob-instance-namespace> --type=merge \
  -p '{"spec":{"postgresBackup":{"suspend":true}}}'

La sospensione dei backup preserva tutte le risorse di backup esistenti impedendo l'esecuzione di nuovi job.

Verifica che i CronJob siano sospesi:

oc get cronjobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup
# The SUSPEND column should show "True"

Riprendi i backup al termine della manutenzione:

oc patch bob bob-instance -n <bob-instance-namespace> --type=merge \
  -p '{"spec":{"postgresBackup":{"suspend":false}}}'

Monitoraggio dell'attività di backup

Il monitoraggio regolare aiuta a garantire che i job di backup continuino a essere eseguiti correttamente e che gli obiettivi di recovery possano essere raggiunti.

# List recent backup jobs
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup \
  --sort-by=.metadata.creationTimestamp

# Check CronJob status
oc get cronjobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup

# View last scheduled time
oc get cronjob bob-db-backup-cronjob -n <bob-instance-namespace> \
  -o jsonpath='{.status.lastScheduleTime}'

# View backup logs
oc logs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup --tail=100

Analizza tempestivamente i guasti per prevenire lacune nella copertura dei backup.

Gestione della retention dei backup

Le policy di retention determinano quante copie di backup vengono conservate prima che i backup più vecchi vengano rimossi automaticamente.

data:
  config.yaml: |
    # Number of backups to retain per cluster
    retention: 7  # Keep last 7 backups

Valori di retention più elevati migliorano la flessibilità di recovery ma richiedono storage aggiuntivo.

Comportamento della retention:

  • I backup più vecchi vengono eliminati automaticamente dopo ogni backup riuscito.
  • La retention è per cluster — ogni cluster mantiene il proprio conteggio.
  • La pulizia avviene immediatamente dopo la creazione del backup.

Ad esempio, con retention: 7:

  • Giorni 1–7: accumula 7 backup.
  • Giorno 8: crea un nuovo backup, elimina il backup del giorno 1.
  • Giorno 9: crea un nuovo backup, elimina il backup del giorno 2.

Attivazione di un backup manuale

Per attivare manualmente un backup al di fuori della pianificazione:

# Create a job from the CronJob
oc create job --from=cronjob/bob-db-backup-cronjob \
  manual-backup-$(date +%s) -n <bob-instance-namespace>

# Monitor the job
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup

# View job logs
oc logs -n <bob-instance-namespace> job/manual-backup-<timestamp>

Best practice

  • Pianifica i backup durante le ore di bassa attività (tipicamente dalle 02:00 alle 04:00 ora locale).
  • Usa una pianificazione coerente per la prevedibilità.
  • Ricorda il fuso orario UTC quando imposti le pianificazioni.
  • Scagliona i backup se le risorse sono limitate.
  • Monitora regolarmente il successo dei backup.
  • Testa le procedure di ripristino mensilmente.
  • Documenta la pianificazione e la motivazione.
  • Configura gli avvisi per i guasti dei backup.
Come valuti questo argomento?