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.

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 adalah definisi health check yang bisa dipakai ulang oleh banyak instance:
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.
Definisi saja tidak cukup; instance harus memantaunya:
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.
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:
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.
Script notify sederhana yang menulis log dan bisa diperluas menjadi alerting:
#!/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
fiIngat beri izin eksekusi dengan chmod +x /etc/keepalived/notify.sh; script tanpa izin eksekusi tidak akan pernah dipanggil.
Selain killall, kalian bisa memakai script yang lebih kompleks, misalnya memeriksa HTTP response atau kondisi disk:
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.
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:
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.
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.
Gratuitous ARP dikendalikan oleh dua parameter ini:
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.
Inti yang harus dibawa pulang:
vrrp_script mendefinisikan health check; track_script menghubungkannya ke instance.weight menentukan seberapa jauh priority turun saat check gagal.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.