Backups planen

Konfiguriere und verwalte automatisierte PostgreSQL-Backup-Zeitpläne für IBM Bob, einschließlich Cron-Ausdrücken, Aufbewahrungsrichtlinien, Pausieren und Fortsetzen sowie Monitoring.

Geplante Backups automatisieren den Datenbankschutz und reduzieren das Risiko von Datenverlust. IBM Bob verwendet Kubernetes-CronJobs, um Backups gemäß dem in der Backup-Konfiguration definierten Zeitplan auszuführen.

Hinweis:

Standardmäßig werden Backups in der koordinierten Weltzeit (UTC) ausgeführt.

Backup-Zeitpläne konfigurieren

Konfiguriere einen Backup-Zeitplan, indem du das Feld schedule in der Backup-Konfigurations-ConfigMap aktualisierst. Der Wert verwendet Standard-Cron-Syntax und bestimmt, wie oft Backup-Jobs ausgeführt werden.

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 ...

Cron-Syntax verstehen

Cron-Zeitpläne bestehen aus fünf Feldern, die die Ausführungsfrequenz definieren.

FeldWerteSonderzeichen
Minute0–59*, ,, -, /
Stunde0–23*, ,, -, /
Tag1–31*, ,, -, /
Monat1–12*, ,, -, /
Wochentag0–7 (0 und 7 stehen für Sonntag)*, ,, -, /

Wähle einen Zeitplan, der deinen Recovery Point Objectives (RPOs) und Geschäftsanforderungen entspricht.

Planungsüberlegungen

Zeitzone (UTC)

Alle Zeitpläne werden in der UTC-Zeitzone ausgeführt. Plane Zeitpläne gemäß UTC-Zeit, nicht deiner Ortszeit. Zum Beispiel:

  • 0 2 * * * = 2:00 Uhr UTC = 4:00 Uhr MESZ (Sommer) oder 3:00 Uhr MEZ (Winter)

Gleichzeitige Backups

Alle konfigurierten Cluster werden gleichzeitig nach demselben Zeitplan gesichert. Dadurch wird die Storage-I/O-Last multipliziert und die Netzwerkbandbreite über alle Backups verteilt. Um Backups in ressourcenbeschränkten Umgebungen zeitlich zu verschieben, erstelle mehrere ConfigMaps mit unterschiedlichen Zeitplänen:

# 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

Backup-Dauer

Berücksichtige die Datenbankgröße bei der Zeitplanung, um Überschneidungen zwischen Backup-Läufen zu vermeiden.

DatenbankgrößeErwartete Dauer
Weniger als 1 GB1–5 Minuten
1–5 GB5–15 Minuten
5–20 GB15–45 Minuten
20–50 GB45–120 Minuten
Mehr als 50 GB2+ Stunden

Außerhalb der Spitzenlastzeiten

Plane Backups für Zeiten mit geringer Nutzung. Vermeide Hauptgeschäftszeiten und überwache die Datenbankleistung während der Backups.

Zeitplan ändern

Um den Backup-Zeitplan zu aktualisieren, bearbeite die Backup-ConfigMap:

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

Aktualisiere das Feld schedule und speichere. Der Controller erkennt die Änderung automatisch und aktualisiert die CronJobs.

Aktualisierten Zeitplan überprüfen:

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

Backups pausieren und fortsetzen

Wenn du Backups während einer Wartung pausieren möchtest, ohne die Backup-Konfiguration zu entfernen, pausiere Backups in der benutzerdefinierten Bob-Ressource:

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

Das Pausieren von Backups erhält alle vorhandenen Backup-Ressourcen, während verhindert wird, dass neue Jobs ausgeführt werden.

Überprüfe, ob CronJobs pausiert sind:

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

Backups nach Abschluss der Wartung fortsetzen:

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

Backup-Aktivität überwachen

Regelmäßiges Monitoring stellt sicher, dass Backup-Jobs weiterhin erfolgreich ausgeführt werden und Recovery-Ziele erreicht werden können.

# 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

Untersuche Fehler umgehend, um Lücken in der Backup-Abdeckung zu vermeiden.

Backup-Aufbewahrung verwalten

Aufbewahrungsrichtlinien bestimmen, wie viele Backup-Kopien gespeichert werden, bevor ältere Backups automatisch entfernt werden.

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

Höhere Aufbewahrungswerte verbessern die Recovery-Flexibilität, erfordern jedoch zusätzlichen Speicher.

Aufbewahrungsverhalten:

  • Älteste Backups werden nach jedem erfolgreichen Backup automatisch gelöscht.
  • Aufbewahrung gilt pro Cluster — jeder Cluster führt seine eigene Zählung.
  • Bereinigung erfolgt unmittelbar nach der Backup-Erstellung.

Zum Beispiel mit retention: 7:

  • Tage 1–7: 7 Backups ansammeln.
  • Tag 8: Neues Backup erstellen, Backup von Tag 1 löschen.
  • Tag 9: Neues Backup erstellen, Backup von Tag 2 löschen.

Manuelles Backup auslösen

So löst du ein Backup außerhalb des Zeitplans manuell aus:

# 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 Practices

  • Plane Backups für Zeiten außerhalb der Spitzenlastzeiten (typischerweise 2–4 Uhr Ortszeit).
  • Verwende einen konsistenten Zeitplan für Vorhersagbarkeit.
  • Bedenke die UTC-Zeitzone beim Festlegen von Zeitplänen.
  • Verschiebe Backups zeitlich, wenn Ressourcen knapp sind.
  • Überwache den Backup-Erfolg regelmäßig.
  • Teste Wiederherstellungsverfahren monatlich.
  • Dokumentiere den Zeitplan und die Begründung.
  • Richte Benachrichtigungen für Backup-Fehler ein.
Wie ist dieses Thema?