Sinkronisasi Host dan Manajemen Klaster
Cockpit mengoordinasikan beberapa server host Vapor fisik secara terpusat. Cockpit memelihara registri status mesin virtual, jaringan virtual, dan storage pool yang tersinkronisasi di dalam database pusat, memungkinkan manajemen terpadu dari satu panel kontrol.
1. Klaim Host dan Ketersediaan Tinggi
Dalam lingkungan ketersediaan tinggi (High Availability - HA) yang menjalankan beberapa instance Cockpit, koordinasi diperlukan untuk memastikan bahwa hanya satu server Cockpit yang berkomunikasi dengan host Vapor fisik tertentu pada satu waktu. Hal ini mencegah terjadinya race condition dan konflik instruksi (seperti operasi daya ganda).
Advisory Lock PostgreSQL
Cockpit mencegah konflik manajemen host bersamaan menggunakan mekanisme advisory lock PostgreSQL secara transaksional:
- Penemuan (Sweeping): Layanan latar belakang (Collector Service) pada Cockpit secara berkala memeriksa database untuk menemukan host hypervisor yang terdaftar dan aktif.
- Akuisisi Kunci (Lock Acquisition): Untuk setiap host yang ditemukan, instance Cockpit mencoba memperoleh advisory lock yang terkait dengan catatan host tersebut di database PostgreSQL.
- Penyambungan Koneksi: Setelah berhasil memperoleh advisory lock, instance Cockpit membuat koneksi WebSocket yang aman ke agen host Vapor dan memperbarui status host menjadi
connected(terhubung) dalam sistem. - Eksekusi Failover: Jika instance Cockpit yang aktif mengalami degradasi jaringan atau crash, advisory lock akan dilepaskan secara otomatis. Instance Cockpit siaga (standby) akan segera mengambil alih kunci tersebut, membangun kembali koneksi WebSocket, dan melanjutkan manajemen host tanpa interupsi layanan.
2. Pipa Sinkronisasi Status
Setelah terhubung ke host Vapor, Cockpit menyinkronkan status database pusatnya dengan konfigurasi real-time dari hypervisor fisik. Sinkronisasi ini menggunakan pipa dua fase:
Fase 1: Snapshot Status Lengkap (Get Sync Snapshot)
Mengunduh seluruh inventaris mesin virtual,
jaringan virtual, dan storage pool saat ini.
│
▼
Fase 2: Streaming Event Real-time (Get Sync Events + Sync Cursor)
Menerima pembaruan status bertahap dan memantau event melalui WebSocket.Fase A: Snapshot Status Lengkap
Selama koneksi awal atau setelah pulih dari partisi jaringan yang berkepanjangan, Cockpit melakukan rekonsiliasi penuh. Cockpit meminta katalog konfigurasi lengkap dari agen host Vapor. Snapshot ini mengisi database pusat dengan status aktif dari semua mesin virtual, jaringan virtual, dan storage pool.
Fase B: Streaming Event Bertahap dan Pelacakan Kursor
Untuk meminimalkan beban jaringan, Cockpit beralih ke mode sinkronisasi bertahap setelah memproses snapshot awal. Cockpit memantau streaming event real-time (misalnya, vm_started, network_created, storage_pool_updated) yang dipancarkan oleh host melalui WebSocket.
- Pelacakan ID Urutan (
sync_cursor): Setiap event memiliki nomor urutan yang terus meningkat. Cockpit menyimpan nomor urutan terakhir yang berhasil diproses sebagaisync_cursordi database. - Pemulihan Partisi Jaringan: Jika koneksi terputus sesaat, Cockpit tidak meminta snapshot lengkap saat tersambung kembali. Sebaliknya, Cockpit mengirimkan
sync_cursoryang tersimpan ke agen host, meminta semua event yang terjadi setelah nomor urutan tersebut. Hal ini menjamin pengiriman event yang berurutan serta mencegah pemrosesan ganda atau hilangnya metrik. - Fallback Penuh: Jika instance Cockpit terputus dalam durasi yang melebihi jendela penyimpanan log event pada host, pipa sinkronisasi akan secara otomatis kembali ke Fase A untuk melakukan rekonsiliasi status penuh yang baru.