مزامنة المضيف وإدارة العنقود
ينسق Cockpit خوادم Vapor الفيزيائية المضيفة المتعددة. ويحتفظ بسجل متزامن لأجهزتها الافتراضية، وشبكاتها الافتراضية، ومجمعات التخزين الخاصة بها في قاعدة بيانات مركزية، مما يمكن من الإدارة الموحدة من لوحة تحكم واحدة.
1. الاستحواذ على المضيف والتوفر العالي (Host Claiming and High Availability)
في بيئات التوفر العالي (HA) التي تشغل مثيلات متعددة من Cockpit، يلزم التنسيق لضمان تواصل خادم Cockpit واحد فقط مع خادم Vapor الفيزيائي المضيف المحدد في أي وقت. هذا يمنع ظروف التنافس والأوامر المتضاربة (مثل عمليات الطاقة المكررة).
الأقفال الاستشارية لمعاملات PostgreSQL (PostgreSQL Transactional Advisory Locks)
يمنع Cockpit تعارضات إدارة المضيف المتزامنة باستخدام الأقفال الاستشارية لمعاملات PostgreSQL. تضمن آلية القفل تعيين المضيف ديناميكيًا:
- الاكتشاف (المسح): تقوم خدمة خلفية (Collector Service) في Cockpit بالاستعلام بانتظام عن قاعدة البيانات لحياد الخوادم المضيفة المسجلة والنشطة لـ hypervisor.
- الاستحواذ على القفل: لكل مضيف يتم اكتشافه، تحاول مثيلة Cockpit الحصول على قفل استشاري مرتبط بسجل المضيف في قاعدة بيانات PostgreSQL.
- إنشاء الاتصال: عند الحصول بنجاح على القفل الاستشاري، تنشئ مثيلة Cockpit اتصال WebSocket آمنًا بوكيل مضيف Vapor وتحدث حالة المضيف إلى
connectedفي حالة النظام. - تنفيذ التبديل عند الفشل (Failover): إذا تعرضت مثيلة Cockpit النشطة لتدهور في الشبكة أو تعطلت، يتم تحرير القفل الاستشاري تلقائيًا. وستحصل مثيلة Cockpit الاحتياطية (Standby) فورًا على القفل، وتتولى اتصال WebSocket، وتستلم إدارة المضيف دون انقطاع الخدمة.
2. مسار مزامنة الحالة
بمجرد الاتصال بمضيف Vapor، يزامن Cockpit حالة قاعدة البيانات المركزية لديه مع التكوين المباشر لـ hypervisor الفيزيائي. تستخدم هذه المزامنة مسارًا ثنائي المراحل:
Phase 1: Full State Snapshot (Get Sync Snapshot)
Downloads the complete inventory of virtual machines,
networks, and storage pools.
│
▼
Phase 2: Real-time Event Streaming (Get Sync Events + Sync Cursor)
Receives incremental state updates and monitors events via WebSocket.المرحلة أ: لقطة الحالة الكاملة (Full State Snapshot)
أثناء الاتصال الأولي أو بعد التعافي من انقطاع شبكي طويل، يجري Cockpit تسوية كاملة. ويطلب كتالوج التكوين الكامل من وكيل مضيف Vapor. تملأ هذه اللقطة قاعدة البيانات المركزية بالحالة النشطة لجميع الأجهزة الافتراضية والشبكات الافتراضية ومجمعات التخزين.
المرحلة ب: بث الأحداث التراكمية وتتبع المؤشر (Cursor Tracking)
لتقليل العبء على الشبكة، ينتقل Cockpit إلى وضع المزامنة التراكمية بعد معالجة اللقطة الأولية. ويستمع إلى بث مباشر عبر WebSocket للأحداث (مثل vm_started وnetwork_created وstorage_pool_updated) الصادرة من المضيف.
- تتبع معرف التسلسل (
sync_cursor): يحتوي كل حدث على رقم تسلسلي متزايد بطريقة مطردة. يخزن Cockpit آخر رقم تسلسلي تم معالجته بنجاح كـsync_cursorفي قاعدة البيانات. - التعافي من انقطاع الشبكة: إذا انقطع الاتصال لفترة وجيزة، لا يطلب Cockpit لقطة كاملة عند إعادة الاتصال. بدلاً من ذلك، يرسل
sync_cursorالمخزن إلى وكيل المضيف، طالبًا جميع الأحداث التي تبدأ بعد ذلك الرقم التسلسلي. يضمن هذا تسليم الأحداث بالتسلسل ويمنع المعالجة المكررة أو فقدان المقاييس. - التراجع الكامل (Full Fallback): إذا ظلت مثيلة Cockpit منفصلة لمدة تتجاوز نافذة الاحتفاظ بسجل الأحداث للمضيف، يتراجع مسار المزامنة تلقائيًا إلى المرحلة أ لإجراء تسوية جديدة كاملة للحالة.