النسخ الاحتياطي والتعافي من الكوارث
لتحقيق هدف زمن التعافي (RTO) وهدف نقطة التعافي (RPO) بشكل موثوق، تستخدم البنية استراتيجية تعافٍ من الكوارث ثنائية الطبقات: طبقة واحدة تحمي عنقود OpenShift النشط، والأخرى تحمي طبقة الأجهزة الافتراضية الخارجية.
مصفوفة الأهداف والتغطية
يتم ضبط الأهداف لكل عميل؛ والجدول أدناه هو خط الأساس المرجعي.
| المكوّن | الطريقة | التكرار | RPO (خط الأساس) |
|---|---|---|---|
| PostgreSQL | كامل + تزايدي + لقطة للجهاز الافتراضي | WAL مستمر + كامل يومي | ≤ 5 دقائق |
| OpenBao / محرك الأسرار | لقطة Raft | كل ساعة | ≤ ساعة واحدة |
| حالة التطبيق (PVs) | لقطة Velero CSI | يومي | ≤ 24 ساعة |
| بيانات K8s / التهيئة | نسخ احتياطي لبيانات Velero الوصفية | يومي | ≤ 24 ساعة |
| GitLab (المصدر) | نسخ احتياطي مدمج | يومي | ≤ 24 ساعة |
| مادة HSM | تبقى في HSM (منسوخة حسب المورّد) | غير متاح | غير متاح |
| السيناريو | RTO المستهدف (خط الأساس) |
|---|---|
| فشل حاوية / عقدة واحدة | تلقائي، خلال ثوانٍ (تعافٍ ذاتي) |
| استعادة مكوّن ذي حالة | < ساعة واحدة |
| تجاوز فشل كامل للموقع (عنقود ثانوي) | < 4 ساعات |
دورة حياة التعافي من الكوارث
الطبقة 1 — عمليات النسخ الاحتياطي (العنقود النشط)
- التنسيق — يقوم مشغّل Velero بتشغيل لقطات مجدولة ومؤتمتة داخل عنقود OpenShift.
- حالة البيانات — ينسّق Velero مع ODF أو مكوّن CSI الإضافي لالتقاط لقطات كتلية متسقة مع الأعطال للوحدات التخزينية الداعمة للأحمال ذات الحالة.
- البيانات والبيانات الوصفية — يلتقط Velero في الوقت نفسه كائنات Kubernetes API: مساحات الأسماء، وحسابات الخدمة (ServiceAccounts)، وتطبيقات ArgoCD.
- الوجهة — تُشفَّر جميع البيانات الوصفية للنسخ الاحتياطي وحمولات الوحدات التخزينية وتُكتب خارج العنقود إلى تخزين كائني متوافق مع S3.
# Example: a daily scheduled backup of the duokey namespace
velero schedule create duokey-daily \
--schedule="0 2 * * *" \
--include-namespaces duokey \
--snapshot-volumes
الطبقة 2 — النسخ الاحتياطي للبنية التحتية (الأجهزة الافتراضية الخارجية)
- OpenBao — يُنسخ احتياطياً بشكل مستقل عن طريق تشغيل لقطات تخزين Raft مؤتمتة. تُخزَّن ملفات اللقطات المشفّرة خارج العقدة في التخزين الكائني.
- GitLab — يستخدم مهام النسخ الاحتياطي المدمجة لديه لأرشفة المستودعات وقواعد البيانات والتهيئة إلى التخزين الكائني.
- PostgreSQL — بوصفه أكثر طبقات البيانات حساسية، يستخدم عدة طرق تكميلية: لقطات الجهاز الافتراضي بالإضافة إلى نسخ احتياطية مجدولة كاملة وتزايدية لقاعدة البيانات.
# OpenBao Raft snapshot (illustrative)
bao operator raft snapshot save openbao-$(date +%F).snap
إجراءات التعافي (الموقع الثانوي / السلبي)
في حال حدوث فشل كارثي يؤثر على العنقود النشط:
- تجهيز العنقود المستهدف — قم بتفعيل أو تهيئة عنقود OpenShift ثانوي مصغّر في موقع التعافي / منطقة التوفر.
- استعادة محرك الأسرار — يقوم مثيل OpenBao الثانوي بفك الختم وتحميل لقطة Raft المنسوخة، مستعيداً قدرات المفاتيح.
- تشغيل استعادة Velero — يتصل Velero بالتخزين الكائني المنسوخ في موقع التعافي وينفّذ استعادة شاملة.
- إعادة تضخيم الوحدات التخزينية — يستعيد مشغّل CSI اللقطات الكتلية ويربطها بحاويات StatefulSet جديدة لـ PostgreSQL وRedis.
- مواءمة GitOps — يعيد ArgoCD الاتصال بـ GitLab عبر HTTPS/SSH، ويفحص البيانات، ويعيد مواءمة أي انحراف نحو الامتثال.
- استعادة PostgreSQL — الاستعادة من أحدث نسخة احتياطية لقاعدة البيانات في التخزين الكائني، أو الرجوع إلى لقطة كاملة للجهاز الافتراضي إذا تعذّر إعادة تشغيل النسخ الاحتياطية.
# Restore from the most recent Velero backup
velero restore create --from-backup duokey-daily-<timestamp>
اختبار خطة التعافي من الكوارث لديك
لا تنتظر كارثة حقيقية
تدرّب على إجراء التعافي بوتيرة منتظمة (ربع سنوية على الأقل). تحقّق من أن أهداف RTO/RPO تُحقَّق فعلياً وأن كتيّبات التشغيل محدّثة.
| العنصر | التكرار |
|---|---|
| التحقق من اكتمال النسخ الاحتياطية | يومياً (تنبيه مؤتمت) |
| اختبار الاستعادة (مكوّن واحد) | شهرياً |
| تدريب كامل على تجاوز فشل التعافي من الكوارث | ربع سنوي |
| مراجعة أهداف RTO/RPO | سنوياً |