Menjadwalkan backup

Konfigurasikan dan kelola jadwal backup PostgreSQL otomatis untuk IBM Bob, termasuk ekspresi cron, kebijakan retensi, suspend dan resume, serta pemantauan.

Backup terjadwal mengotomatiskan perlindungan database dan mengurangi risiko kehilangan data. IBM Bob menggunakan Kubernetes CronJob untuk mengeksekusi backup sesuai jadwal yang didefinisikan dalam konfigurasi backup.

Catatan:

Secara default, backup berjalan menggunakan Coordinated Universal Time (UTC).

Mengonfigurasi jadwal backup

Konfigurasikan jadwal backup dengan memperbarui field schedule dalam ConfigMap konfigurasi backup. Nilainya menggunakan sintaks cron standar dan menentukan seberapa sering pekerjaan backup berjalan.

apiVersion: v1
kind: ConfigMap
metadata:
  name: bob-postgres-backup-config
  namespace: <bob-instance-namespace>
  labels:
    bob.ibm.com/backup-config: "true"
data:
  config.yaml: |
    # Jadwal backup dalam format cron (timezone UTC)
    schedule: "0 2 * * *"  # Setiap hari pukul 02:00 UTC

    # ... konfigurasi lainnya ...

Memahami sintaks cron

Jadwal cron terdiri dari lima field yang mendefinisikan frekuensi eksekusi.

FieldNilaiKarakter khusus
Menit0–59*, ,, -, /
Jam0–23*, ,, -, /
Hari1–31*, ,, -, /
Bulan1–12*, ,, -, /
Hari minggu0–7 (0 dan 7 mewakili Minggu)*, ,, -, /

Pilih jadwal yang selaras dengan recovery point objective (RPO) dan kebutuhan bisnis.

Pertimbangan penjadwalan

Timezone (UTC)

Semua jadwal berjalan dalam timezone UTC. Rencanakan jadwal berdasarkan waktu UTC, bukan waktu lokal. Contohnya:

  • 0 2 * * * = 02:00 UTC = 04:00 CEST (musim panas) atau 03:00 CET (musim dingin)

Backup bersamaan

Semua cluster yang dikonfigurasi melakukan backup secara bersamaan pada jadwal yang sama. Ini melipatgandakan beban I/O penyimpanan dan berbagi bandwidth jaringan di seluruh backup. Untuk menjadwalkan backup secara bertahap pada lingkungan dengan sumber daya terbatas, buat beberapa ConfigMap dengan jadwal berbeda:

# ConfigMap 1: bob-db pukul 02:00
---
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 pukul 03:00
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

Durasi backup

Pertimbangkan ukuran database saat menjadwalkan untuk menghindari tumpang tindih antara proses backup.

Ukuran databasePerkiraan durasi
Kurang dari 1 GB1–5 menit
1–5 GB5–15 menit
5–20 GB15–45 menit
20–50 GB45–120 menit
Lebih dari 50 GB2+ jam

Jam sepi

Jadwalkan backup selama periode penggunaan rendah. Hindari jam sibuk bisnis dan pantau performa database selama backup.

Mengubah jadwal

Untuk memperbarui jadwal backup, edit ConfigMap backup:

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

Perbarui field schedule dan simpan. Controller secara otomatis mendeteksi perubahan dan memperbarui CronJob.

Verifikasi jadwal yang diperbarui:

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

Menangguhkan dan melanjutkan backup

Jika perlu menghentikan backup sementara selama pemeliharaan tanpa menghapus konfigurasi backup, tangguhkan backup dalam custom resource Bob:

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

Menangguhkan backup mempertahankan semua resource backup yang ada sambil mencegah pekerjaan baru berjalan.

Verifikasi bahwa CronJob ditangguhkan:

oc get cronjobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup
# Kolom SUSPEND harus menampilkan "True"

Lanjutkan backup setelah pemeliharaan selesai:

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

Memantau aktivitas backup

Pemantauan rutin membantu memastikan pekerjaan backup terus berjalan dengan sukses dan recovery objective dapat terpenuhi.

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

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

# Lihat waktu penjadwalan terakhir
oc get cronjob bob-db-backup-cronjob -n <bob-instance-namespace> \
  -o jsonpath='{.status.lastScheduleTime}'

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

Selidiki kegagalan dengan segera untuk mencegah kesenjangan dalam cakupan backup.

Mengelola retensi backup

Kebijakan retensi menentukan berapa banyak salinan backup yang disimpan sebelum backup lama secara otomatis dihapus.

data:
  config.yaml: |
    # Jumlah backup yang disimpan per cluster
    retention: 7  # Simpan 7 backup terakhir

Nilai retensi yang lebih tinggi meningkatkan fleksibilitas pemulihan tetapi memerlukan penyimpanan tambahan.

Perilaku retensi:

  • Backup tertua secara otomatis dihapus setelah setiap backup berhasil.
  • Retensi per cluster — setiap cluster mempertahankan hitungannya sendiri.
  • Pembersihan terjadi segera setelah backup dibuat.

Misalnya, dengan retention: 7:

  • Hari 1–7: Akumulasikan 7 backup.
  • Hari 8: Buat backup baru, hapus backup hari 1.
  • Hari 9: Buat backup baru, hapus backup hari 2.

Memicu backup manual

Untuk memicu backup secara manual di luar jadwal:

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

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

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

Praktik terbaik

  • Jadwalkan backup selama jam sepi (biasanya pukul 02:00–04:00 waktu lokal).
  • Gunakan jadwal yang konsisten untuk prediktabilitas.
  • Ingat timezone UTC saat menetapkan jadwal.
  • Jadwalkan backup secara bertahap jika sumber daya terbatas.
  • Pantau keberhasilan backup secara rutin.
  • Uji prosedur pemulihan setiap bulan.
  • Dokumentasikan jadwal dan alasannya.
  • Siapkan alert untuk kegagalan backup.
Bagaimana topik ini?