15 KiB
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 ساعات (أقصى وقت توقف) │
│ │
└─────────────────────────────────────────────────────────────────────┘