تخطيط النسخ الاحتياطي والاستعادة

أريد التأكد من وجود استراتيجية نسخ احتياطي جيدة مع إطلاق موقعي. هذه هي الخطوات التالية التي وضعتها. ماذا ينقصني؟

النسخ الاحتياطي لقاعدة البيانات

  • يقوم Discourse بعمل نسخة احتياطية يومية لقاعدة البيانات.
  • يتم إجراء نسخة احتياطية إضافية لقاعدة البيانات باستخدام cron يوميًا. (+12 ساعة من النسخ الاحتياطي المستند إلى واجهة المستخدم)
  • يتم تخزين النسخ الاحتياطية في حاوية S3 (مركز بيانات مختلف)

الملفات الأساسية

يتم نسخ الملفات التالية احتياطيًا مرتين يوميًا إلى حاوية S3 (مركز بيانات مختلف)

  • discourse/containers/app.yml
  • discourse/shared/standalone/uploads/
  • discourse/shared/standalone/backups/
  • discourse/shared/standalone/ssl/
  • discourse/shared/standalone/letsencrypt/

تحدث النسخ الاحتياطية للملفات مرتين يوميًا، بعد 30 دقيقة من النسخ الاحتياطي لقاعدة البيانات.

S3: التحميلات

  • يتم تخزين النسخ الاحتياطي اليومي للتحميلات في حاوية S3 في مركز بيانات مختلف.

النسخ الاحتياطي للخادم

  • نسخ احتياطي أسبوعي للخادم بأكمله - يتم الاحتفاظ بـ 4 نسخ احتياطية أسبوعية
  • يتم سنويًا تخزين نسخة احتياطية أسبوعية واحدة كنسخة احتياطية رئيسية في موقع بعيد.

يجب أن يوفر هذا جميع البيانات والإعدادات اللازمة لاستعادة خادم في مكانه أو على خادم جديد.

هل ينقصني أي شيء؟

إعجاب واحد (1)

هذه هي الطريقة المقترحة. إذا قمت بعمل نسخة احتياطية من قاعدة بياناتك مرة واحدة في اليوم، فأنت تخاطر بما يصل إلى 24 ساعة من أي شيء حدث في هذا المنتدى.

قيل لي مرتين على الأقل أنه ليس هناك مشكلة، ولكن لم يشرح أحد أبدًا لماذا لا. لذلك، أقوم بعمل نسخة احتياطية من قاعدة بياناتي كل 6 ساعات - منتداي ليس مشغولًا جدًا، لذلك يمكنني تحمل هذه المخاطرة. للمقارنة - يقوم متجر التجارة الإلكترونية الخاص بي بعمل نسخة احتياطية كل 4 دقائق.

إعجاب واحد (1)

كيف قمت بإعداد قاعدة بياناتك للنسخ الاحتياطي بشكل متكرر؟ أفضل مرتين في اليوم، لكن وظائف واجهة المستخدم تسمح بالنسخ الاحتياطي يوميًا فقط.

يمكنك تشغيل مهمة cron (على الخادم الخاص بك، وليس في الحاوية)

docker exec app bash -c "discourse backup"

إذا كانت البيانات حرجة حقًا، فيمكنك إعداد خادم تكرار postgres وجعل كل عملية تثبيت على خادم ثانٍ.

إعجاب واحد (1)

لدي هذا في crontab:

docker exec app discourse backup --sql-only

هذا هو أمر واجهة سطر الأوامر الخاص بـ Discourse لعمل نسخة احتياطية، وقد تم إرشادي بأن docker exec app يقوم بتنفيذه خارج الحاوية (app هو اسم الحاوية بالطبع).

ولأنني قمت بتكوين S3 الذي يقفز إلى نفس الحاوية حيث توجد النسخ الاحتياطية “العادية” أيضًا.

هناك مشكلة صغيرة واحدة… قريبًا سيكون هناك عدد لا يحصى من النسخ الاحتياطية. لا أعرف ما إذا كان يجب عليّ القيام بعملية تفريغ SQL بشكل مختلف، ونقلها باستخدام aws-cli ثم حذف كل ما هو أقدم من إطار زمني معين. أو القيام بنفس الشيء في VPS.

لكن هذه هي أسهل طريقة للحصول على تفريغ SQL.

إعجاب واحد (1)

أفترض أن هذا يقوم بتنشيط روتين النسخ الاحتياطي الداخلي للمناقشة، لذلك تظل جميع الإشعارات في مكانها.

هل تقوم بإيقاف جدولة النسخ الاحتياطي داخل واجهة المستخدم وتدير كل شيء عبر cron؟ أم أنك تقوم بواحد داخل واجهة المستخدم وتقوم بالعمل الإضافي عبر cron؟

لا. أنا أفعل كليهما. لا أثق في النظام، ولا في نفسي، إلى هذا الحد. نادرًا ما تكون كمية النسخ الاحتياطي هي المشكلة الحقيقية، بل النقص هو.

إعجاب واحد (1)

شكرا @Jagster و @pfaffman للمساعدة في إعداد قاعدة بيانات إضافية عبر cron. هذا يقلل من خسارة البيانات في نظامي إلى أسوأ سيناريو وهو 12 ساعة.

إعجابَين (2)