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

Parameter Raft

ItemNilai
Interval heartbeat500ms (cluster_heartbeat_ms)
Waktu deteksi tidak-merespons2000ms (cluster_election_timeout_ms) — jika heartbeat terputus selama ini, leader dianggap mati
Jendela pemilihan sebenarnya1750-2000ms — diacak per node agar tidak ada kandidat bersamaan (split vote). Nilai terburuknya persis sama dengan waktu deteksi yang dikonfigurasi
Henti klien saat leader gagalterukur waktu deteksi + 0,3-0,5 detik (sekitar 2,3-2,5 detik pada nilai default) — deteksi ditambah satu kali pengalihan
Jumlah node3 atau 5 (dipaksakan saat load konfigurasi — selain itu menolak untuk boot)
Node IDposisi (cluster_self)-nya di daftar cluster_peers — itulah kenapa urutan daftar harus identik di setiap node
Bootstrap500ms setelah startup, setiap node menginisialisasi dengan membership yang sama — diabaikan jika bergabung ke cluster yang sudah diinisialisasi
Penyimpanan login-memory (volatile) — node yang di-restart pulih lewat replikasi/snapshot
Deteksi expiry leaseleader memeriksa setiap 100ms dan meng-commit Expire lewat konsensus
Granularitas timeout waittimeout menunggu (T) juga diputuskan pada tick 100ms yang sama — bisa tiba hingga 100ms terlambat
Notifikasi pergantian leadersaat leader berganti, L langsung dikirim ke semua klien yang terhubung

Memilih heartbeat dan waktu deteksi

Kedua nilai diatur lewat cluster_heartbeat_ms dan cluster_election_timeout_ms di konfigurasi. Waktu deteksi (T) adalah juga lama layanan berhenti saat leader gagal; sebaliknya, jika terlalu pendek, leader yang masih hidup akan salah dianggap mati sehingga terjadi pemilihan yang tidak perlu.

Heartbeat / TJendela deteksiLatensi terburuk terukur saat leader di-killLingkungan yang disarankan
100ms / 600ms450-600mssekitar 0,9 detikrak/AZ yang sama, latensi sangat stabil
100ms / 1000ms750-1000mssekitar 1,2 detikAZ yang sama
250ms / 2500ms1875-2500mssekitar 2,8 detikmulti-AZ
500ms / 2000ms1750-2000mssekitar 2,4 detikdefault — seimbang untuk multi-AZ
500ms / 5000ms3750-5000mssekitar 5,3 detiklintas region, latensi sangat berfluktuasi
  • Latensi pemrosesan dalam kondisi normal tidak dipengaruhi nilai-nilai ini (terukur: p50 tidak berubah) — yang ditentukan hanyalah waktu pemulihan saat terjadi kegagalan.
  • Jika yang mati adalah follower, tidak ada dampak ke klien pada nilai berapa pun. Hanya kematian leader yang menimbulkan latensi di atas.
  • Batasan: cluster_election_timeout_ms minimal 600ms dan harus minimal 4 kali heartbeat. (Terukur bahwa satu kali penundaan penjadwalan di bawah beban menelan habis dua heartbeat.)

Kenapa 3 atau 5 Node

Sebuah commit butuh mayoritas. Konfigurasi berjumlah genap hanya menambah biaya tanpa menambah toleransi kegagalan, jadi server menolaknya.

Jumlah nodeMayoritasKegagalan bersamaan yang ditoleransi
220 — satu kegagalan saja menghentikan cluster. Tidak lebih baik dari mode single
321
431 — sama seperti 3 node, hanya menambah biaya
532

Ringkasan Perilaku Kegagalan

SituasiPerilaku
Request klien ke node bukan-leaderM (alamat leader), atau E no_leader jika leader tidak diketahui
Kegagalan leaderleader baru terpilih dalam 500-1000ms. Request selama jendela itu mendapat E no_leader → klien mencoba lagi
Saat pergantian leaderrequest acquire yang tertunda dibersihkan dengan M/E no_leader, dan klien mencoba lagi ke leader baru
Restart nodeboot dengan status kosong → mengejar lewat replikasi log/snapshot peer
Mayoritas hilangcommit menjadi tidak mungkin → penulisan berhenti (keamanan diutamakan), otomatis dilanjutkan begitu mayoritas pulih

Terminologi

  • quorum — lebih dari setengah total node (2 dari 3, atau 3 dari 5). Karena keputusan apa pun butuh persetujuan quorum, dua kelompok yang terpartisi tidak akan pernah bisa sama-sama meng-commit keputusan yang bertentangan sekaligus.
  • election timeout — berapa lama follower menunggu tanpa heartbeat sebelum menyimpulkan leader telah mati dan memulai pemilihan. Diacak per node untuk mengurangi kandidasi bersamaan.