جدولة النسخ الاحتياطية

هيّئ جداول النسخ الاحتياطي التلقائية لـ PostgreSQL لـ IBM Bob وأدرها، بما فيها تعبيرات cron وسياسات الاستبقاء والإيقاف المؤقت والاستئناف والمراقبة.

تُؤتمت النسخ الاحتياطية المجدوَلة حماية قاعدة البيانات وتُقلل من خطر فقدان البيانات. يستخدم IBM Bob Kubernetes CronJobs لتنفيذ النسخ الاحتياطية وفق الجدول المُعرَّف في تكوين النسخ الاحتياطي.

ملاحظة:

تعمل النسخ الاحتياطية افتراضيًا بالتوقيت العالمي المنسق (UTC).

تكوين جداول النسخ الاحتياطي

هيّئ جدول النسخ الاحتياطي بتحديث حقل schedule في ConfigMap لتكوين النسخ الاحتياطي. تستخدم القيمة بنية cron القياسية وتُحدد تكرار تشغيل مهام النسخ الاحتياطي.

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

تتكون جداول cron من خمسة حقول تُعرّف تكرار التنفيذ.

الحقلالقيمالرموز الخاصة
الدقيقة0–59*, ,, -, /
الساعة0–23*, ,, -, /
اليوم1–31*, ,, -, /
الشهر1–12*, ,, -, /
يوم الأسبوع0–7 (0 و7 يمثلان الأحد)*, ,, -, /

اختر جدولًا يتوافق مع أهداف نقطة الاسترداد (RPOs) ومتطلبات العمل.

اعتبارات الجدولة

المنطقة الزمنية (UTC)

تعمل جميع الجداول بمنطقة زمنية UTC. خطّط الجداول وفق توقيت UTC لا توقيتك المحلي. على سبيل المثال:

  • 0 2 * * * = 2:00 AM UTC = 4:00 AM CEST (صيفًا) أو 3:00 AM CET (شتاءً)

النسخ الاحتياطية المتزامنة

تُنسَّخ جميع المجموعات المُكوَّنة احتياطيًا في آنٍ واحد وفق نفس الجدول. يُضاعف هذا حِمل I/O للتخزين ويُقاسم عرض النطاق الترددي الشبكي بين جميع النسخ الاحتياطية. لتوزيع النسخ الاحتياطية زمنيًا في البيئات ذات الموارد المحدودة، أنشئ عدة ConfigMaps بجداول مختلفة:

# 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

مدة النسخ الاحتياطي

ضع في الاعتبار حجم قاعدة البيانات عند الجدولة لتجنب التداخل بين تشغيلات النسخ الاحتياطي.

حجم قاعدة البياناتالمدة المتوقعة
أقل من 1 GB1–5 دقائق
1–5 GB5–15 دقيقة
5–20 GB15–45 دقيقة
20–50 GB45–120 دقيقة
أكبر من 50 GBساعتان أو أكثر

ساعات الذروة المنخفضة

جدوِل النسخ الاحتياطية في فترات الاستخدام المنخفض. تجنب ساعات الذروة في العمل وراقب أداء قاعدة البيانات أثناء النسخ الاحتياطية.

تغيير الجدول

لتحديث جدول النسخ الاحتياطي، عدّل ConfigMap الخاص بالنسخ الاحتياطي:

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

حدّث حقل schedule واحفظ. يكتشف المتحكم التغيير تلقائيًا ويُحدّث CronJobs.

تحقق من الجدول المحدَّث:

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

إيقاف النسخ الاحتياطية مؤقتًا واستئنافها

إذا احتجت إلى إيقاف النسخ الاحتياطية مؤقتًا أثناء الصيانة دون إزالة تكوين النسخ الاحتياطي، أوقف النسخ الاحتياطية في المورد المخصص لـ Bob:

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

يحافظ إيقاف النسخ الاحتياطية مؤقتًا على جميع موارد النسخ الاحتياطية الموجودة مع منع تشغيل مهام جديدة.

تحقق من إيقاف CronJobs مؤقتًا:

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

استأنف النسخ الاحتياطية بعد اكتمال الصيانة:

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

مراقبة نشاط النسخ الاحتياطي

تساعد المراقبة الدورية في التأكد من استمرار تشغيل مهام النسخ الاحتياطي بنجاح وإمكانية تحقيق أهداف الاسترداد.

# 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

التحقق الفوري من الأعطال يمنع وجود ثغرات في تغطية النسخ الاحتياطي.

إدارة استبقاء النسخ الاحتياطية

تُحدد سياسات الاستبقاء عدد نسخ النسخ الاحتياطية المُخزَّنة قبل أن تُحذف النسخ الأقدم تلقائيًا.

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

قيم الاستبقاء الأعلى تُحسّن مرونة الاسترداد لكنها تتطلب تخزينًا إضافيًا.

سلوك الاستبقاء:

  • تُحذف النسخ الاحتياطية الأقدم تلقائيًا بعد كل نسخة احتياطية ناجحة.
  • الاستبقاء لكل مجموعة — تحتفظ كل مجموعة بعدادها الخاص.
  • يحدث التنظيف فورًا بعد إنشاء النسخة الاحتياطية.

على سبيل المثال، مع retention: 7:

  • الأيام 1–7: تراكم 7 نسخ احتياطية.
  • اليوم 8: إنشاء نسخة احتياطية جديدة وحذف نسخة اليوم الأول.
  • اليوم 9: إنشاء نسخة احتياطية جديدة وحذف نسخة اليوم الثاني.

تشغيل نسخة احتياطية يدوية

لتشغيل نسخة احتياطية يدويًا خارج الجدول:

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

أفضل الممارسات

  • جدوِل النسخ الاحتياطية في ساعات الذروة المنخفضة (عادةً 2–4 صباحًا بالتوقيت المحلي).
  • استخدم جدولًا ثابتًا لتحقيق القدرة على التنبؤ.
  • تذكّر منطقة UTC الزمنية عند تعيين الجداول.
  • وزّع النسخ الاحتياطية زمنيًا إذا كانت الموارد محدودة.
  • راقب نجاح النسخ الاحتياطية بانتظام.
  • اختبر إجراءات الاستعادة شهريًا.
  • وثّق الجدول والمبرر.
  • أعدّ تنبيهات لأعطال النسخ الاحتياطية.
ما رأيك في هذا الموضوع؟