Yedeklemeleri zamanlama

Cron ifadeleri, saklama ilkeleri, askıya alma ve devam ettirme ile izleme dahil olmak üzere IBM Bob için otomatik PostgreSQL yedekleme zamanlamalarını yapılandırın ve yönetin.

Zamanlanmış yedeklemeler veritabanı korumasını otomatikleştirir ve veri kaybı riskini azaltır. IBM Bob, yedekleme yapılandırmasında tanımlanan zamanlamaya göre yedeklemeleri yürütmek için Kubernetes CronJob'larını kullanır.

Not:

Varsayılan olarak, yedeklemeler Eşgüdümlü Evrensel Zaman (UTC) kullanılarak çalışır.

Yedekleme zamanlamalarını yapılandırma

Yedekleme yapılandırma ConfigMap'indeki schedule alanını güncelleyerek bir yedekleme zamanlaması yapılandırın. Değer, standart cron sözdizimini kullanır ve yedekleme işlerinin ne sıklıkla çalışacağını belirler.

apiVersion: v1
kind: ConfigMap
metadata:
  name: bob-postgres-backup-config
  namespace: <bob-instance-namespace>
  labels:
    bob.ibm.com/backup-config: "true"
data:
  config.yaml: |
    # Cron formatında yedekleme zamanlaması (UTC saat dilimi)
    schedule: "0 2 * * *"  # Her gün 02:00 UTC

    # ... diğer yapılandırmalar ...

Cron sözdizimini anlama

Cron zamanlamaları, yürütme sıklığını tanımlayan beş alandan oluşur.

AlanDeğerlerÖzel karakterler
Dakika0–59*, ,, -, /
Saat0–23*, ,, -, /
Gün1–31*, ,, -, /
Ay1–12*, ,, -, /
Haftanın günü0–7 (0 ve 7 Pazar gününü temsil eder)*, ,, -, /

Kurtarma noktası hedefleriniz (RPO) ve iş gereksinimlerinizle uyumlu bir zamanlama seçin.

Zamanlama hususları

Saat dilimi (UTC)

Tüm zamanlamalar UTC saat diliminde çalışır. Zamanlamaları yerel saatinize göre değil, UTC saatine göre planlayın. Örneğin:

  • 0 2 * * * = 02:00 UTC = 04:00 CEST (yaz saati) veya 03:00 CET (kış saati)

Eşzamanlı yedeklemeler

Yapılandırılan tüm kümeler aynı zamanlamada eşzamanlı olarak yedeklenir. Bu, depolama G/Ç (I/O) yükünü çarpar ve ağ bant genişliğini tüm yedeklemeler arasında paylaştırır. Kaynak kısıtlı ortamlar için yedeklemeleri kademelendirmek amacıyla farklı zamanlamalara sahip birden fazla ConfigMap oluşturun:

# ConfigMap 1: Saat 02:00'de bob-db
---
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: Saat 03:00'te keycloak-db
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

Yedekleme süresi

Yedekleme çalıştırmaları arasında çakışmayı önlemek için zamanlama yaparken veritabanı boyutunu göz önünde bulundurun.

Veritabanı boyutuBeklenen süre
1 GB'den az1–5 dakika
1–5 GB5–15 dakika
5–20 GB15–45 dakika
20–50 GB45–120 dakika
50 GB'den fazla2+ saat

Yoğun olmayan saatler

Yedeklemeleri kullanımın düşük olduğu dönemlere zamanlayın. Yoğun iş saatlerinden kaçının ve yedeklemeler sırasında veritabanı performansını izleyin.

Zamanlamayı değiştirme

Yedekleme zamanlamasını güncellemek için yedekleme ConfigMap'ini düzenleyin:

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

schedule alanını güncelleyin ve kaydedin. Controller değişikliği otomatik olarak algılar ve CronJob'ları günceller.

Güncellenen zamanlamayı doğrulayın:

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

Yedeklemeleri askıya alma ve devam ettirme

Yedekleme yapılandırmasını kaldırmadan bakım sırasında yedeklemeleri duraklatmanız gerekiyorsa, Bob özel kaynağında yedeklemeleri askıya alın:

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

Yedeklemelerin askıya alınması, yeni işlerin çalışmasını engellerken mevcut tüm yedekleme kaynaklarını korur.

CronJob'ların askıya alındığını doğrulayın:

oc get cronjobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup
# SUSPEND sütununda "True" görünmelidir

Bakım tamamlandıktan sonra yedeklemeleri devam ettirin:

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

Yedekleme etkinliğini izleme

Düzenli izleme, yedekleme işlerinin başarıyla çalışmaya devam etmesini ve kurtarma hedeflerinin karşılanabilmesini sağlamaya yardımcı olur.

# Son yedekleme işlerini listeleyin
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup \
  --sort-by=.metadata.creationTimestamp

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

# Son zamanlanan zamanı görüntüleyin
oc get cronjob bob-db-backup-cronjob -n <bob-instance-namespace> \
  -o jsonpath='{.status.lastScheduleTime}'

# Yedekleme loglarını görüntüleyin
oc logs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup --tail=100

Yedekleme kapsamındaki boşlukları önlemek için hataları derhal inceleyin.

Yedekleme saklamayı (retention) yönetme

Saklama ilkeleri, daha eski yedekler otomatik olarak silinmeden önce kaç yedekleme kopyasının saklanacağını belirler.

data:
  config.yaml: |
    # Küme başına saklanacak yedekleme sayısı
    retention: 7  # Son 7 yedeklemeyi sakla

Daha yüksek saklama değerleri kurtarma esnekliğini artırır ancak ek depolama alanı gerektirir.

Saklama davranışı:

  • En eski yedekler her başarılı yedeklemenin ardından otomatik olarak silinir.
  • Saklama küme başınadır — her küme kendi sayımını tutar.
  • Temizleme işlemi yedek oluşturulduktan hemen sonra gerçekleşir.

Örneğin, retention: 7 ile:

  • 1–7. Günler: 7 yedekleme birikir.
    1. Gün: Yeni bir yedek oluşturulur, 1. günün yedeği silinir.
    1. Gün: Yeni bir yedek oluşturulur, 2. günün yedeği silinir.

Manuel bir yedekleme tetikleme

Zamanlama dışında manuel olarak bir yedekleme tetiklemek için:

# CronJob'tan bir job oluşturun
oc create job --from=cronjob/bob-db-backup-cronjob \
  manual-backup-$(date +%s) -n <bob-instance-namespace>

# Job'ı izleyin
oc get jobs -n <bob-instance-namespace> -l app.kubernetes.io/component=postgres-backup

# Job loglarını görüntüleyin
oc logs -n <bob-instance-namespace> job/manual-backup-<timestamp>

En iyi uygulamalar

  • Yedeklemeleri yoğun olmayan saatlere zamanlayın (genellikle yerel saatle 02:00–04:00 arası).
  • Öngörülebilirlik için tutarlı bir zamanlama kullanın.
  • Zamanlamaları ayarlarken UTC saat dilimini unutmayın.
  • Kaynaklar kısıtlıysa yedeklemeleri kademelendirin.
  • Yedekleme başarısını düzenli olarak izleyin.
  • Geri yükleme prosedürlerini aylık olarak test edin.
  • Zamanlamayı ve gerekçesini belgeleyin.
  • Yedekleme hataları için uyarılar (alerts) ayarlayın.
Bu konu nasıl?