الملفات

15 KiB
خام الرابط الدائم اللوم التاريخ

استراتيجية النسخ الاحتياطي والاستعادة - Ghaymah Backup & Recovery

مع RPO/RTO وقاعدة 3-2-1


1. فهم RPO و RTO

تعريفات أساسية

┌─────────────────────────────────────────────────────────────────────┐
│                                                                     │
│    آخر نسخة          الحادثة           استعادة الخدمة               │
│    احتياطية            ↓                    ↓                       │
│        ↓               ↓                    ↓                       │
│   ─────●───────────────●────────────────────●─────────────→ الوقت   │
│        │               │                    │                       │
│        │←──── RPO ────→│←────── RTO ───────→│                       │
│        │               │                    │                       │
│   البيانات التي      وقت               وقت العودة                   │
│   قد تُفقد          الحادثة            للعمل                         │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘
المصطلح التعريف مثال
RPO (Recovery Point Objective) أقصى كمية بيانات يمكن خسارتها RPO = 1 ساعة → نسخ احتياطي كل ساعة
RTO (Recovery Time Objective) أقصى وقت للعودة للعمل RTO = 4 ساعات → يجب استعادة الخدمة خلال 4 ساعات

2. قاعدة 3-2-1 للنسخ الاحتياطي

┌─────────────────────────────────────────────────────────────────────┐
│                        قاعدة 3-2-1                                  │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│   3⃣  ثلاث نسخ من البيانات                                           │
│       ├── النسخة الأصلية (Production)                               │
│       ├── النسخة الاحتياطية الأولى (Local Backup)                    │
│       └── النسخة الاحتياطية الثانية (Remote Backup)                  │
│                                                                     │
│   2⃣  نوعان مختلفان من وسائط التخزين                                │
│       ├── Block Storage (SSD)                                       │
│       └── Object Storage (S3-compatible)                            │
│                                                                     │
│   1⃣  نسخة واحدة على الأقل خارج الموقع (Offsite)                    │
│       └── منطقة جغرافية مختلفة أو مزود سحابي آخر                    │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

3. تطبيق الاستراتيجية على غيمة

البنية المقترحة

┌─────────────────────────────────────────────────────────────────────┐
│                         غيمة Cloud                                  │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  ┌─────────────────┐                                                │
│  │  Production     │ ← النسخة الأصلية (1)                           │
│  │  Block Storage  │                                                │
│  │  (me-riyadh-1)  │                                                │
│  └────────┬────────┘                                                │
│           │                                                         │
│           │ نسخ كل ساعة                                             │
│           ▼                                                         │
│  ┌─────────────────┐                                                │
│  │  Local Backup   │ ← النسخة الاحتياطية (2) - وسيط مختلف            │
│  │  Object Storage │                                                │
│  │  (me-riyadh-1)  │                                                │
│  └────────┬────────┘                                                │
│           │                                                         │
│           │ نسخ يومي                                                │
│           ▼                                                         │
│  ┌─────────────────┐                                                │
│  │  Offsite Backup │ ← النسخة الخارجية (3) - موقع مختلف             │
│  │  Object Storage │                                                │
│  │  (me-jeddah-1)  │                                                │
│  └─────────────────┘                                                │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

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

# backup-config.yaml
backup_strategy:
  name: "3-2-1 Backup Strategy"
  
  # النسخة الأصلية
  production:
    type: block-storage
    location: me-riyadh-1
    volume: prod-data
  
  # النسخة الاحتياطية المحلية
  local_backup:
    type: object-storage
    location: me-riyadh-1
    bucket: backups-local
    schedule:
      frequency: hourly
      retention: 72  # 72 ساعة = 3 أيام
    encryption: AES-256
  
  # النسخة الخارجية
  offsite_backup:
    type: object-storage
    location: me-jeddah-1  # منطقة مختلفة
    bucket: backups-offsite
    schedule:
      frequency: daily
      time: "02:00"
      retention: 30  # 30 يوم
    encryption: AES-256
  
  # أهداف الاستعادة
  objectives:
    rpo: 1h   # أقصى خسارة = ساعة واحدة
    rto: 4h   # أقصى وقت استعادة = 4 ساعات

4. تنفيذ النسخ الاحتياطي على غيمة

أ. إنشاء Buckets للنسخ الاحتياطي

# إنشاء bucket محلي
ghaymah storage bucket create backups-local \
  --region me-riyadh-1 \
  --encryption AES-256 \
  --versioning enabled

# إنشاء bucket خارجي
ghaymah storage bucket create backups-offsite \
  --region me-jeddah-1 \
  --encryption AES-256 \
  --versioning enabled

ب. إعداد جدول النسخ الاحتياطي

# نسخ احتياطي كل ساعة (محلي)
ghaymah backup schedule create \
  --name hourly-local \
  --source prod-data \
  --destination backups-local \
  --frequency hourly \
  --retention 72h

# نسخ احتياطي يومي (خارجي)
ghaymah backup schedule create \
  --name daily-offsite \
  --source prod-data \
  --destination backups-offsite \
  --frequency daily \
  --time "02:00" \
  --retention 30d

ج. سكربت النسخ الاحتياطي

#!/bin/bash
# backup-script.sh - سكربت النسخ الاحتياطي التلقائي

set -e

TIMESTAMP=$(date +%Y%m%d_%H%M%S)
SOURCE_VOLUME="prod-data"
LOCAL_BUCKET="backups-local"
OFFSITE_BUCKET="backups-offsite"

echo "[$TIMESTAMP] بدء النسخ الاحتياطي..."

# 1. إنشاء snapshot من Block Storage
echo "إنشاء snapshot..."
SNAPSHOT_ID=$(ghaymah storage snapshot create \
  --volume $SOURCE_VOLUME \
  --name "backup-$TIMESTAMP" \
  --output json | jq -r '.id')

echo "تم إنشاء snapshot: $SNAPSHOT_ID"

# 2. نسخ إلى Object Storage المحلي
echo "نسخ إلى التخزين المحلي..."
ghaymah storage copy \
  --source "snapshot:$SNAPSHOT_ID" \
  --destination "s3://$LOCAL_BUCKET/backup-$TIMESTAMP.tar.gz" \
  --compress \
  --encrypt

# 3. نسخ إلى Object Storage الخارجي (يومياً فقط)
HOUR=$(date +%H)
if [ "$HOUR" == "02" ]; then
  echo "نسخ إلى التخزين الخارجي..."
  ghaymah storage copy \
    --source "s3://$LOCAL_BUCKET/backup-$TIMESTAMP.tar.gz" \
    --destination "s3://$OFFSITE_BUCKET/backup-$TIMESTAMP.tar.gz"
fi

# 4. تنظيف النسخ القديمة
echo "تنظيف النسخ القديمة..."
ghaymah backup cleanup \
  --bucket $LOCAL_BUCKET \
  --older-than 72h

ghaymah backup cleanup \
  --bucket $OFFSITE_BUCKET \
  --older-than 30d

# 5. التحقق من النسخة
echo "التحقق من سلامة النسخة..."
ghaymah backup verify \
  --backup "s3://$LOCAL_BUCKET/backup-$TIMESTAMP.tar.gz"

echo "[$TIMESTAMP] اكتمل النسخ الاحتياطي بنجاح ✓"

5. إجراءات الاستعادة

سيناريو: استعادة بعد Ransomware

#!/bin/bash
# restore-script.sh - سكربت الاستعادة

echo "🔄 بدء عملية الاستعادة..."

# 1. تحديد آخر نسخة سليمة
echo "البحث عن آخر نسخة سليمة..."
LATEST_BACKUP=$(ghaymah backup list \
  --bucket backups-local \
  --status verified \
  --limit 1 \
  --output json | jq -r '.[0].name')

echo "آخر نسخة سليمة: $LATEST_BACKUP"

# 2. إنشاء volume جديد للاستعادة
echo "إنشاء volume جديد..."
ghaymah storage volume create \
  --name restored-data \
  --size 100GB \
  --type ssd

# 3. استعادة البيانات
echo "استعادة البيانات..."
ghaymah backup restore \
  --source "s3://backups-local/$LATEST_BACKUP" \
  --destination restored-data \
  --verify

# 4. التحقق من البيانات
echo "التحقق من البيانات المستعادة..."
ghaymah storage verify --volume restored-data

# 5. تبديل الـ volumes
echo "تبديل إلى البيانات المستعادة..."
ghaymah storage swap \
  --old prod-data \
  --new restored-data

echo "✅ اكتملت الاستعادة بنجاح!"

6. جدول RPO/RTO حسب نوع البيانات

نوع البيانات RPO RTO تكرار النسخ الاحتفاظ
قواعد البيانات 15 دقيقة 1 ساعة كل 15 دقيقة 7 أيام
ملفات التطبيق 1 ساعة 2 ساعة كل ساعة 30 يوم
سجلات النظام 4 ساعات 8 ساعات كل 4 ساعات 90 يوم
الأرشيف 24 ساعة 24 ساعة يومي سنة

7. اختبار الاستعادة الدوري

جدول الاختبار

الاختبار التكرار المسؤول
استعادة ملف واحد أسبوعي DevOps
استعادة قاعدة بيانات شهري DBA
استعادة كاملة (DR) ربع سنوي فريق الأمن

سكربت اختبار الاستعادة

#!/bin/bash
# test-restore.sh - اختبار الاستعادة

echo "🧪 بدء اختبار الاستعادة..."

# إنشاء بيئة اختبار
ghaymah project create restore-test --temporary

# استعادة من آخر نسخة
ghaymah backup restore \
  --source backups-local/latest \
  --destination restore-test \
  --verify

# اختبار البيانات
ghaymah test run \
  --project restore-test \
  --suite data-integrity

# تنظيف
ghaymah project delete restore-test --force

echo "✅ اختبار الاستعادة ناجح!"

8. ملخص الاستراتيجية

┌─────────────────────────────────────────────────────────────────────┐
│                    ملخص استراتيجية 3-2-1                            │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  📦 3 نسخ:                                                          │
│     • Production (Block Storage - Riyadh)                           │
│     • Local Backup (Object Storage - Riyadh)                        │
│     • Offsite Backup (Object Storage - Jeddah)                      │
│                                                                     │
│  💾 2 وسيط:                                                         │
│     • Block Storage (SSD)                                           │
│     • Object Storage (S3)                                           │
│                                                                     │
│  🌍 1 خارج الموقع:                                                  │
│     • منطقة جدة (me-jeddah-1)                                       │
│                                                                     │
│  ⏱️ الأهداف:                                                        │
│     • RPO: 1 ساعة (أقصى خسارة بيانات)                               │
│     • RTO: 4 ساعات (أقصى وقت توقف)                                  │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘