Parameter Raft
| Item | Nilai |
|---|---|
| Interval heartbeat | 500ms (cluster_heartbeat_ms) |
| Waktu deteksi tidak-merespons | 2000ms (cluster_election_timeout_ms) — jika heartbeat terputus selama ini, leader dianggap mati |
| Jendela pemilihan sebenarnya | 1750-2000ms — diacak per node agar tidak ada kandidat bersamaan (split vote). Nilai terburuknya persis sama dengan waktu deteksi yang dikonfigurasi |
| Henti klien saat leader gagal | terukur waktu deteksi + 0,3-0,5 detik (sekitar 2,3-2,5 detik pada nilai default) — deteksi ditambah satu kali pengalihan |
| Jumlah node | 3 atau 5 (dipaksakan saat load konfigurasi — selain itu menolak untuk boot) |
| Node ID | posisi (cluster_self)-nya di daftar cluster_peers — itulah kenapa urutan daftar harus identik di setiap node |
| Bootstrap | 500ms setelah startup, setiap node menginisialisasi dengan membership yang sama — diabaikan jika bergabung ke cluster yang sudah diinisialisasi |
| Penyimpanan log | in-memory (volatile) — node yang di-restart pulih lewat replikasi/snapshot |
| Deteksi expiry lease | leader memeriksa setiap 100ms dan meng-commit Expire lewat konsensus |
Granularitas timeout wait | timeout menunggu (T) juga diputuskan pada tick 100ms yang sama — bisa tiba hingga 100ms terlambat |
| Notifikasi pergantian leader | saat 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 / T | Jendela deteksi | Latensi terburuk terukur saat leader di-kill | Lingkungan yang disarankan |
|---|---|---|---|
| 100ms / 600ms | 450-600ms | sekitar 0,9 detik | rak/AZ yang sama, latensi sangat stabil |
| 100ms / 1000ms | 750-1000ms | sekitar 1,2 detik | AZ yang sama |
| 250ms / 2500ms | 1875-2500ms | sekitar 2,8 detik | multi-AZ |
| 500ms / 2000ms | 1750-2000ms | sekitar 2,4 detik | default — seimbang untuk multi-AZ |
| 500ms / 5000ms | 3750-5000ms | sekitar 5,3 detik | lintas 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_msminimal 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 node | Mayoritas | Kegagalan bersamaan yang ditoleransi |
|---|---|---|
| 2 | 2 | 0 — satu kegagalan saja menghentikan cluster. Tidak lebih baik dari mode single |
| 3 | 2 | 1 |
| 4 | 3 | 1 — sama seperti 3 node, hanya menambah biaya |
| 5 | 3 | 2 |
Ringkasan Perilaku Kegagalan
| Situasi | Perilaku |
|---|---|
| Request klien ke node bukan-leader | M (alamat leader), atau E no_leader jika leader tidak diketahui |
| Kegagalan leader | leader baru terpilih dalam 500-1000ms. Request selama jendela itu mendapat E no_leader → klien mencoba lagi |
| Saat pergantian leader | request acquire yang tertunda dibersihkan dengan M/E no_leader, dan klien mencoba lagi ke leader baru |
| Restart node | boot dengan status kosong → mengejar lewat replikasi log/snapshot peer |
| Mayoritas hilang | commit 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.