# استراتيجية النسخ الاحتياطي والاستعادة - 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) │ │ │ └─────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────┘ ``` ### تكوين النسخ الاحتياطي ```yaml # 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 للنسخ الاحتياطي ```bash # إنشاء 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 ``` ### ب. إعداد جدول النسخ الاحتياطي ```bash # نسخ احتياطي كل ساعة (محلي) 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 ``` ### ج. سكربت النسخ الاحتياطي ```bash #!/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 ```bash #!/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) | ربع سنوي | فريق الأمن | ### سكربت اختبار الاستعادة ```bash #!/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 ساعات (أقصى وقت توقف) │ │ │ └─────────────────────────────────────────────────────────────────────┘ ```