Episode ini membawa konfigurasi Keepalived ke pipeline CI/CD: memvalidasi keepalived.conf di CI dengan keepalived -t, deploy otomatis dari konfigurasi yang diversioning, serta preflight checks yang menguji kesiapan failover sebelum perubahan rilis ke produksi.

Konfigurasi yang diubah langsung di server produksi adalah akar dari banyak insiden. Episode 19 menghentikan kebiasaan itu: setiap perubahan keepalived.conf harus melewati pipeline — divalidasi di CI, di-deploy secara otomatis, dan diuji dengan preflight checks sebelum dinyatakan layak.
Pendekatan ini bukan soal alat, tapi soal disiplin. Dengan CI yang memvalidasi sintaks dan template, perbedaan konfigurasi antar node yang tidak disengaja bisa ditolak sebelum menyentuh server. Di akhir episode, rilis konfigurasi Keepalived seketat rilis kode aplikasi.
Langkah pertama adalah memastikan setiap perubahan lolos keepalived -t. Ini bisa dijalankan dalam kontainer:
name: validate-keepalived-config
on:
pull_request:
paths:
- "roles/keepalived/**"
jobs:
syntax:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Render template
run: |
ansible localhost -m template \
-a "src=roles/keepalived/templates/keepalived.conf.j2 dest=/tmp/keepalived.conf"
- name: Validate syntax
run: |
docker run --rm -v /tmp/keepalived.conf:/etc/keepalived/keepalived.conf:ro \
osixia/keepalived:2.2.7 -t -f /etc/keepalived/keepalived.confWorkflow validate-keepalived-config berjalan saat ada perubahan di file konfigurasi. Template dirender dulu dengan Ansible, lalu osixia/keepalived:2.2.7 -t memvalidasi sintaks dalam kontainer. Pull request dengan sintaks rusak otomatis ditolak.
Validasi satu node saja tidak cukup — template harus valid untuk semua kombinasi variabel. Render template untuk setiap host dan validasi semuanya dalam satu job. Dengan begitu, kesalahan seperti variabel yang salah ketik untuk node tertentu tertangkap lebih awal.
Deploy ke staging dulu, baru produksi:
name: deploy-keepalived
on:
push:
branches: [main]
jobs:
staging:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy ke staging
run: ansible-playbook -i inventory/staging/hosts.yml roles/keepalived/playbook.yml
production:
needs: staging
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy ke produksi
run: ansible-playbook -i inventory/prod/hosts.yml roles/keepalived/playbook.ymlJob staging menjalankan playbook ke environment staging; job production baru berjalan setelah staging sukses. Rantai ini memastikan konfigurasi terbukti di staging sebelum menyentuh produksi.
Karena Keepalived 2.x mendukung reload via SIGHUP, deploy tidak perlu memutus VIP. Playbook memakai state: reloaded seperti di episode 11, sehingga perubahan diterapkan tanpa mengganggu traffic yang sedang berjalan.
Sebelum menandai rilis selesai, jalankan preflight checks yang mengukur kesiapan failover:
sudo keepalived -t -f /etc/keepalived/keepalived.conf
sudo systemctl is-active keepalived
ping -c 1 -W 1 192.168.1.100 > /dev/null && echo "VIP OK"
sudo ipvsadm -L -n > /dev/null && echo "IPVS OK"Urutan keepalived -t, systemctl is-active, cek VIP, dan ipvsadm -L -n memverifikasi lapisan demi lapisan: konfigurasi, daemon, VIP, dan tabel LVS. Semua harus hijau sebelum rilis dinyatakan sukses.
Untuk preflight yang lebih dalam, lakukan failover terukur di staging:
systemctl stop keepalived
sleep 3
ping -c 1 -W 1 192.168.1.100 > /dev/null && echo "FAILOVER OK"
systemctl start keepalivedUrutan systemctl stop keepalived lalu memeriksa VIP pindah ke node lain membuktikan failover bekerja. Tambahkan langkah ini ke pipeline staging agar setiap perubahan konfigurasi ikut menguji kesiapan failover secara nyata.
Konfigurasi adalah kode: minta review. Kolaborator lain bisa melihat apakah virtual_router_id konsisten, apakah priority masuk akal, dan apakah ada perubahan yang tidak disengaja. CI menangkap kesalahan mesin; review menangkap kesalahan keputusan.
Setelah rilis sukses, tandai versi konfigurasi agar rollback mudah:
git tag -a config-$(date +%Y%m%d-%H%M) -m "rls keepalived"
git push origin --tagsPerintah git tag -a config-$(date +%Y%m%d-%H%M) membuat penanda waktu rilis yang bisa di-rollback dengan satu git checkout.
Episode 19 menutup siklus pengelolaan konfigurasi modern: validasi di CI sebelum pull request digabung, deploy bertahap ke staging lalu produksi, dan preflight checks yang menguji kesiapan failover. Konfigurasi Keepalived kini diperlakukan sebagai artefak rilis, bukan file yang diedit asal.
Inti yang harus dibawa pulang:
keepalived -t.Di episode 20 selanjutnya kita membahas monitoring dan alerting — mengamati status Keepalived dengan exporter Prometheus dan log, alerting untuk perubahan state, VIP hilang, dan backend tidak sehat, serta dashboard operasional untuk status HA.