Belajar Keepalived - Health Checks & Failover Policies
Episode 5 of 23

Belajar Keepalived - Health Checks & Failover Policies

Episode ini mengajarkan menulis vrrp_script dan track_script, memakai notify hooks untuk merespons perubahan state, menggabungkan health check dari berbagai sumber, dan mengatur failover policies seperti nopreempt, preempt_delay, dan garp_master_delay.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

High availability tidak berguna jika node MASTER tetap bertahan meski layanannya sudah mati. Episode 5 menjawab persis masalah ini: health checks dan failover policies. Kalian akan menulis vrrp_script yang memantau layanan, menghubungkannya ke instance lewat track_script, dan memberi respons otomatis saat layanan turun.

Selain itu kita membahas notify hooks untuk merespons perubahan state, dan failover policies seperti nopreempt, preempt_delay, serta garp_master_delay yang membuat perpindahan VIP terkontrol. Di akhir episode, node MASTER yang layanannya mati tidak akan bertahan — VIP akan pindah sendiri.

vrrp_script dan track_script

vrrp_script adalah definisi health check yang bisa dipakai ulang oleh banyak instance:

vrrp_script pemantau haproxy
vrrp_script chk_haproxy {
  script "/usr/bin/killall -0 haproxy"
  interval 2
  weight -20
  rise 2
  fall 3
}
  • script: perintah yang dieksekusi; exit code 0 berarti sehat.
  • interval: jeda antar pengecekan dalam detik.
  • weight: penurunan priority saat script gagal.
  • rise: jumlah sukses beruntun untuk menyatakan sehat kembali.
  • fall: jumlah gagal beruntun untuk menyatakan gagal.

weight -20 berarti setiap kegagalan menurunkan priority sebesar 20. Jika priority MASTER 100, turun ke 80, maka BACKUP dengan priority 90 akan menang election dan mengambil alih.

Menghubungkan ke Instance dengan track_script

Definisi saja tidak cukup; instance harus memantaunya:

Instance dengan track_script
vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 100
  track_script {
    chk_haproxy
  }
  virtual_ipaddress {
    192.168.1.100/24 dev eth0
  }
}

Blok track_script menghubungkan health check chk_haproxy ke instance VI_1. Begitu haproxy mati, priority turun, dan node lain mengambil alih VIP.

Notify Hooks

Jenis Notify

Keepalived bisa memanggil script saat terjadi transisi state. Ada empat hook:

  • notify_master: dipanggil saat node menjadi MASTER.
  • notify_backup: dipanggil saat node menjadi BACKUP.
  • notify_fault: dipanggil saat node dalam kondisi FAULT.
  • notify: dipanggil pada semua transisi, dengan argumen state.

Tambahkan hook pada instance:

Memasang notify hooks
vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 100
  notify_master "/etc/keepalived/notify.sh MASTER"
  notify_backup "/etc/keepalived/notify.sh BACKUP"
  notify_fault "/etc/keepalived/notify.sh FAULT"
  virtual_ipaddress {
    192.168.1.100/24 dev eth0
  }
}

Perintah notify_master "/etc/keepalived/notify.sh MASTER" mengeksekusi script dengan argumen MASTER setiap kali node naik status.

Contoh Skrip Notifikasi

Script notify sederhana yang menulis log dan bisa diperluas menjadi alerting:

Skrip notify.sh
#!/usr/bin/env bash
STATE="$1"
echo "$(date -Is) keepalived -> $STATE" >> /var/log/keepalived-notify.log
if [ "$STATE" = "MASTER" ]; then
  /usr/local/bin/advertise-vip.sh
fi

Ingat beri izin eksekusi dengan chmod +x /etc/keepalived/notify.sh; script tanpa izin eksekusi tidak akan pernah dipanggil.

Health Check dengan Berbagai Sumber

Script Custom

Selain killall, kalian bisa memakai script yang lebih kompleks, misalnya memeriksa HTTP response atau kondisi disk:

vrrp_script custom
vrrp_script chk_api {
  script "/etc/keepalived/checks/check-api.sh"
  interval 3
  weight -30
  rise 2
  fall 3
}

Script check-api.sh bebas melakukan apa pun: curl, cek file lock, atau mengukur beban CPU. Nilai exit code 0 dianggap sehat, selain itu dianggap gagal.

Untuk arsitektur LVS, verifikasi status backend langsung dari kernel dengan ipvsadm -L -n. Outputnya menunjukkan real server yang terdaftar beserta hasil health check dari subsistem LVS, membentuk lapisan deteksi berlapis bersama vrrp_script.

Failover Policies

nopreempt

Secara default preemption aktif: node yang kembali dengan priority lebih tinggi merebut VIP. Untuk skenario failback manual, pasang nopreempt pada semua node di instance tersebut:

Nonaktifkan preemption
vrrp_instance VI_1 {
  state BACKUP
  interface eth0
  virtual_router_id 51
  priority 90
  nopreempt
  virtual_ipaddress {
    192.168.1.100/24 dev eth0
  }
}

nopreempt membuat instance tetap menjadi BACKUP selama MASTER saat ini masih hidup, apa pun priority-nya. Penerapan pada semua node adalah syarat agar perilaku konsisten.

preempt_delay

Jika preemption tetap aktif tapi ingin ditunda, gunakan preempt_delay seperti pada episode 4. Nilai dalam detik ini memberi waktu layanan memanas sebelum VIP direbut kembali.

garp_master_delay dan garp_master_repeat

Gratuitous ARP dikendalikan oleh dua parameter ini:

Kontrol GARP
vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 100
  garp_master_delay 5
  garp_master_repeat 5
  virtual_ipaddress {
    192.168.1.100/24 dev eth0
  }
}

garp_master_delay 5 menunda pengiriman GARP 5 detik setelah naik menjadi MASTER, dan garp_master_repeat 5 mengulang GARP 5 kali. Kombinasi ini membuat tabel ARP seluruh switch dan klien ter-update dengan andal.

Penutup

Inti yang harus dibawa pulang:

  • vrrp_script mendefinisikan health check; track_script menghubungkannya ke instance.
  • weight menentukan seberapa jauh priority turun saat check gagal.
  • Notify hooks menjembatani Keepalived ke log, monitoring, dan alerting.
  • Script notify dan check wajib diberi izin eksekusi.
  • nopreempt untuk failback manual; preempt_delay untuk menunda preemption.
  • garp_master_delay dan garp_master_repeat mengendalikan GARP setelah takeover.

Di episode 6 selanjutnya kita masuk ke mode LVS integration dan load balancing — mengonfigurasi virtual_server, memilih scheduler dan mode NAT, DR, atau TUN, mengatur persistence, dan menghubungkan health check untuk setiap backend server.