انتقل إلى المحتوى الرئيسي انتقل إلى الملاحة انتقل إلى التذييل
لوقت محدود: برنامج Design Partner — خطة BUSINESS مدى الحياة

التشغيل التلقائي والاسترداد

كيف يعمل التشغيل التلقائي، والمُوفِّق الدوري الذي يستعيد المستودعات التي تتوقف بعد الإقلاع، وكيفية فحص حالة الاسترداد.

التشغيل التلقائي والاسترداد

تشرح هذه الصفحة كيفية تحميل المستودعات وتشغيلها تلقائياً عند الإقلاع، وكيف يُعيد المُوفِّق الدوري تشغيل مستودع يتوقف بعد أن يكون الخادم قيد التشغيل بالفعل.

لمعرفة كيفية تفعيل أو تعطيل التشغيل التلقائي لمستودع، راجع الخدمات: التشغيل التلقائي عند الإقلاع.

كيف يعمل التشغيل التلقائي

عند تفعيل التشغيل التلقائي لمستودع، يُنشئ Rediacc ملف مفتاح LUKS عشوائي بحجم 256 بايت ويضيفه إلى الفتحة رقم 1 في LUKS على الوحدة المشفرة. يُخزّن ملف المفتاح في:

{datastore}/.credentials/keys/{guid}.key

يتيح هذا للجهاز تحميل المستودع دون طلب عبارة المرور. لا يتغير LUKS slot 0 (عبارة مرورك).

عند الإقلاع، تقرأ خدمة systemd أحادية التشغيل المسماة rediacc-autostart.service قائمة المستودعات التي تم تفعيل التشغيل التلقائي لها، وتُحمِّل كل واحد منها باستخدام ملف مفتاحه، وتُشغِّل عملية Docker daemon الخاصة بكل مستودع، وتُنفِّذ خطاف up() في Rediaccfile. عند الإغلاق، تُنفِّذ الخدمة down() وتوقف Docker وتُغلق وحدات LUKS.

ملاحظة أمنية: يمنح ملف المفتاح وصولاً على مستوى الجذر للمستودع دون عبارة المرور. يمكن لأي شخص لديه صلاحيات الجذر على الخادم تحميل المستودعات التي تم تفعيل التشغيل التلقائي لها. قيّم هذا وفق نموذج التهديد الخاص بك قبل تفعيل التشغيل التلقائي على المستودعات الحساسة.

فجوة الاسترداد

يعمل التشغيل التلقائي عند الإقلاع مرة واحدة بالضبط لكل عملية إقلاع. يقوم watchdog الموجّه، الذي يعمل باستمرار بعد ذلك، بإعادة تشغيل الحاويات فقط داخل مستودع يعمل بالفعل مع عملية Docker daemon نشطة. لا يستطيع إعادة تحميل وحدة LUKS أو إعادة تشغيل عملية Docker daemon الخاصة بشبكة توقفت.

هذا يعني أنه إذا أُلغي تحميل وحدة LUKS الخاصة بمستودع أو توقفت عملية Docker daemon الخاصة به بعد إقلاع الخادم، فلن تتمكن خدمة الإقلاع ولا watchdog من استعادته. قبل وجود المُوفِّق، كان المستودع في هذه الحالة يظل متوقفاً حتى يتدخل المشغّل.

المُوفِّق الدوري

يُطلق مؤقت systemd المسمى rediacc-autostart-reconcile.timer تقريباً كل 3 دقائق وينفّذ renet repository reconcile. لكل مستودع تم تفعيل التشغيل التلقائي له، يتحقق المُوفِّق من ثلاثة أشياء:

  1. هل وحدة LUKS محمّلة؟
  2. هل عملية Docker daemon الخاصة بالشبكة تعمل؟
  3. هل خدمات المستودع تعمل؟

إذا فشل أي فحص، يستعيد المُوفِّق المستودع باستخدام ملف مفتاحه: يُحمِّل الوحدة، ويُشغِّل عملية Docker daemon، وينفّذ up(). لا تلزم عبارة المرور.

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

التراجع ومعلّمات الفشل الدائم

المستودع الذي يفشل في الاسترداد لا يُعيد المحاولة فوراً في كل دورة. يستخدم المُوفِّق التراجع الأسي:

عدد مرات الفشلالانتظار قبل المحاولة التالية
1دقيقة واحدة
2دقيقتان
35 دقائق
415 دقيقة
5+30 دقيقة، ثم 60 دقيقة

بعد 5 إخفاقات متتالية، يكتب المُوفِّق ملف معلّم دائماً في:

/var/lib/rediacc/reconcile/failed/{guid}

يبقى هذا الملف بعد تدوير السجلات. وجوده يعني أن المستودع يحتاج إلى تدخل المشغّل. يُسجِّل المُوفِّق الفشل على مستوى الخطأ ويتوقف عن محاولة الاسترداد التلقائي لذلك المستودع حتى يُمسح المعلّم.

الأسباب الشائعة لفشل الاسترداد الدائم:

  • ترخيص مستودع غير موثوق به أو منتهي الصلاحية: يعمل فحص الترخيص قبل up().
  • ملف مفتاح مفقود: إذا حُذف ملف المفتاح في {datastore}/.credentials/keys/{guid}.key، لا يستطيع المُوفِّق تحميل الوحدة بدون عبارة مرور.
  • Rediaccfile تالف: خطأ في بناء الجملة أو خطاف up() ينتهي دائماً بكود غير صفري.

العلاقة مع watchdog الموجّه

يتعامل المُوفِّق وwatchdog الموجّه مع مستويات مختلفة من الأعطال وهما مصمّمان ليكمّلا بعضهما البعض:

الطبقةما تتعامل معه
watchdog الموجّهإعادة تشغيل على مستوى الحاويات داخل مستودع يعمل ومحمّل مع عملية Docker daemon نشطة
المُوفِّق (rediacc-autostart-reconcile.timer)الاسترداد على مستوى المستودع: إعادة تحميل LUKS، وإعادة تشغيل عملية Docker daemon، وإعادة تشغيل up()

إذا توقفت حاوية واحدة داخل مستودع سليم، يتولى watchdog الأمر. إذا توقف daemon المستودع كله، يتولى المُوفِّق الأمر.

فحص حالة الاسترداد

حالة المؤقت والخدمة

systemctl status rediacc-autostart-reconcile.timer
systemctl list-timers rediacc-autostart-reconcile.timer

سجلات المُوفِّق

journalctl -u rediacc-autostart-reconcile.service
journalctl -u rediacc-autostart-reconcile.service --since "1 hour ago"

معلّمات الفشل الدائم

إدراج المستودعات التي تحمل معلّمات فشل دائمة:

ls /var/lib/rediacc/reconcile/failed/

كل اسم ملف هو GUID مستودع. استخدم rdc config repository list لربط المعرفات بأسماء المستودعات.

لمسح معلّم بعد حل المشكلة الأساسية، احذف الملف:

rm /var/lib/rediacc/reconcile/failed/{guid}

سيُحاول المُوفِّق الاسترداد مرة أخرى عند الدورة التالية للمؤقت.

الصفحات ذات الصلة