Saat ini dalam pengujian: kode GitHub akan dibuka setelah selesai.

Prosedur Rolling Restart

Ada satu prinsip inti: mayoritas harus selalu tetap hidup. Dengan 3 node, kamu hanya bisa mematikan 1 sekaligus; dengan 5 node, hingga 2.

  1. Restart follower (node bukan-leader) dulu, satu per satu — leader terus melayani selama itu. Pastikan setiap node yang di-restart sudah mengejar lewat replikasi log peer/ snapshot sebelum lanjut ke node berikutnya.
  2. Terakhir, matikan leader. Node yang tersisa mendeteksi heartbeat yang hilang dan memilih leader baru dalam 0,5-1 detik. Request klien selama jendela itu mendapat E no_leader, tapi klien resmi mencoba lagi secara transparan, sehingga aplikasi hanya melihat jeda singkat.
  3. Nyalakan kembali leader lama — ia bergabung sebagai follower dan mengejar (tidak otomatis merebut kembali posisi leader).

Status lock tetap terjaga sepanjang proses selama mayoritas tetap hidup — lock yang diberikan atau di-release selama restart juga melalui commit, jadi tidak ada yang hilang.

Alur (3 Node)

Leader
Follower 1
Follower 2
① restart follower 1 — leader tetap melayani
mengejar lewat replikasi log/snapshot
② setelah mengejar, restart follower 2
mengejar lewat replikasi log
③ restart leader terakhir
Vote → leader baru terpilih dalam 0,5-1 detik
leader lama bergabung kembali sebagai follower dan mengejar
RPC konsensus (Raft)

Selama jendela singkat ketika leader sedang mati, klien mungkin menerima E no_leader, tapi klien resmi mencoba lagi secara transparan, sehingga hanya tampak sebagai jeda singkat bagi aplikasi.