Skip to content

Sinkronisasi Host & Manajemen Klaster

Cockpit mengelola beberapa server fisik Vapor sekaligus. Cockpit melakukannya dengan menyimpan salinan status mesin virtual, jaringan virtual, dan ruang penyimpanan server-server tersebut di dalam database pusatnya, memastikan Anda dapat mengelola semuanya dari satu halaman dashboard.


1. Bagaimana Cockpit Mengklaim Server (Kunci Pengaman)

Jika Anda menjalankan beberapa server Cockpit untuk ketersediaan tinggi (untuk mencegah downtime), kita harus memastikan bahwa hanya ada satu server Cockpit yang berbicara dengan satu server Vapor fisik pada satu waktu. Jika tidak, dua server Cockpit bisa mengirim instruksi yang bentrok (seperti keduanya mencoba menyalakan VM yang sama di saat bersamaan).

  • 💡 Analogi: Kartu Peminjaman Perpustakaan Bayangkan server Vapor fisik seperti sebuah buku di perpustakaan. Untuk menghindari banyak orang menulis catatan di dalam buku pada saat yang sama, kita menggunakan kartu checkout (kunci pengaman transaksional PostgreSQL atau advisory lock). Hanya server Cockpit yang namanya tercatat di kartu tersebut yang diizinkan untuk mengelola server Vapor tersebut.

Proses Klaim Server:

  1. Pemeriksaan Berkala: Layanan pengumpul latar belakang (Collector Service) di Cockpit secara rutin memeriksa database untuk mencari server yang aktif.
  2. Mengunci: Untuk setiap server, instance Cockpit mencoba menuliskan namanya pada kartu checkout di database menggunakan advisory lock.
  3. Menghubungkan: Jika berhasil, ia "mengklaim" server tersebut, membuka jalur komunikasi langsung (WebSocket), dan menandai status server sebagai connected (terhubung) di dashboard Anda.
  4. Pengalihan Otomatis: Jika server Cockpit yang aktif mendadak kehilangan koneksi internet atau crash, ia akan melepas kunci tersebut secara otomatis. Server Cockpit cadangan lainnya akan langsung mendaftarkan namanya di kartu checkout, mengambil alih koneksi, dan menjaga agar server Vapor tetap terpantau.

2. Bagaimana Cockpit Mensinkronkan Data (Sinkronisasi Status)

Setelah terhubung ke server, Cockpit perlu menjaga agar data dashboard Anda tetap up-to-date dengan apa yang sebenarnya terjadi di server fisik. Cockpit menggunakan proses sinkronisasi dua tahap:

Tahap 1: Mengunduh Snapshot Lengkap (Get Sync Snapshot)
      "Unduh seluruh katalog mesin virtual & jaringan saat ini"


Tahap 2: Streaming Pembaruan Langsung (Get Sync Events + Sync Cursor)
      "Hanya kirimkan perubahan yang terjadi (seperti VM mati/menyala)"

Bagian A: Snapshot Lengkap (Mengunduh Film secara Utuh)

Ketika sebuah server pertama kali terhubung atau menyala kembali setelah mati lama, Cockpit meminta ringkasan konfigurasi lengkap.

  • 💡 Analogi: Bayangkan seperti mengunduh katalog direktori lengkap. Katalog ini mencantumkan setiap mesin virtual, switch jaringan virtual, dan drive penyimpanan yang saat ini aktif di server fisik tersebut.

Bagian B: Aliran Perubahan Bertahap (Streaming Video Langsung)

Setelah snapshot awal disimpan, Cockpit berhenti meminta katalog lengkap untuk menghemat bandwidth jaringan. Sebagai gantinya, ia hanya mendengarkan aliran perubahan (event) secara real-time.

  • 💡 Analogi: Penanda Halaman Video (sync_cursor) Setiap kejadian (seperti vm_started atau network_created) memiliki nomor urut. Cockpit menyimpan nomor urut terakhir yang berhasil diproses sebagai penanda halaman (sync_cursor) di database.
    • Jika jaringan terputus selama 10 detik, Cockpit tidak perlu mengunduh seluruh katalog dari awal lagi.
    • Saat koneksi kembali, Cockpit melihat penanda halamannya dan berkata: "Saya berhenti di kejadian nomor 105. Tolong kirimkan kejadian mulai dari nomor 106." Ini mencegah data metrik hilang atau kejadian diproses dua kali.
    • Jika Cockpit mati dalam waktu yang sangat lama dan riwayat kejadian di server Vapor sudah terhapus, Cockpit akan otomatis mengunduh snapshot lengkap yang baru.