358 أسطر
15 KiB
Markdown
358 أسطر
15 KiB
Markdown
# استراتيجية النسخ الاحتياطي والاستعادة - 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 ساعات (أقصى وقت توقف) │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────┘
|
||
```
|