Mdr{dani} Notes

Beyond Load Balancing: Arsitektur High Availability yang Sebenarnya (Part 3)

·

9 min read

Cover Image for Beyond Load Balancing: Arsitektur High Availability yang Sebenarnya (Part 3)

Setelah berhasil melakukan pengujian di artikel sebelumnya, kita sekarang memiliki sistem yang mampu menangani kegagalan di level aplikasi. Namun, mari kita jujur: jika satu-satunya server HAProxy kita (192.168.87.6) mengalami kendala hardware atau crash, maka seluruh redundansi di level backend tadi menjadi tidak berarti—sistem akan tetap mati total.

Inilah yang disebut sebagai Single Point of Failure. Untuk mengatasinya, kita akan melangkah ke tahap yang lebih tinggi: High Availability di level Load Balancer.

Apa yang Akan Kita Bangun?

Pada tahap ini, kita akan menyiapkan server HAProxy kedua (192.168.87.7) yang akan bertindak sebagai cadangan (Standby). Keduanya akan diikat menggunakan protokol VRRP (Virtual Router Redundancy Protocol) melalui layanan bernama Keepalived.

Hasil akhirnya adalah sebuah Virtual IP (VIP) atau Floating IP. User tidak lagi mengakses IP fisik server (192.168.87.6 atau 192.168.87.7), melainkan mengakses satu IP "keramat" yang akan selalu aktif selama salah satu dari kedua Load Balancer tersebut hidup. Jika Load Balancer utama mati, IP tersebut akan "berpindah" secara otomatis ke server cadangan dalam hitungan detik.

VM 2 Load Balancer Setup

Install HAProxy

Setelah berhasil menguji node pertama, langkah selanjutnya adalah menyiapkan VM kedua dengan alamat IP 192.168.87.7. VM ini akan berperan sebagai node cadangan yang siap mengambil alih trafik jika node utama bermasalah.

Agar performa dan fiturnya konsisten, kita akan menginstal versi HAProxy yang sama dengan node sebelumnya. Silakan SSH ke VM kedua dan jalankan rangkaian perintah berikut:

sudo apt update

sudo apt-get install --no-install-recommends software-properties-common

sudo add-apt-repository ppa:vbernat/haproxy-3.2

sudo apt-get install haproxy=3.2.\*

Pastikan versi yang terinstal sudah sesuai dengan menjalankan perintah:

haproxy -v

untuk memastikan HAProxy sudah berjalan dengan baik kita check dengan perintah

sudo systemctl status haproxy

Enable Dashboard

Modifikasi Konfigurasi HAProxy Buka file /etc/haproxy/haproxy.cfg dan tambahkan blok konfigurasi berikut untuk menentukan pada port dan alamat mana dashboard bisa diakses:

frontend stats
        mode http
        bind :8404
        stats enable
        stats refresh 10s
        stats uri /stats
        stats show-modules

Catatan: Di sini kita menggunakan port 8404. Pastikan port ini terbuka dan tidak terpakai oleh layanan lain.

Terapkan Perubahan Agar konfigurasi baru terbaca oleh sistem, lakukan restart pada layanan HAProxy dengan perintah berikut:

sudo systemctl restart haproxy.service

Akses Dashboard Sekarang, kita bisa melihat kondisi infrastruktur secara langsung melalui browser dengan mengakses alamat: http://192.168.87.7:8404/stats

Load Balancer Config

Setelah dashboard aktif, langkah selanjutnya adalah inti dari skenario kita: mengatur pembagian trafik. Di sini, HAProxy akan bertindak sebagai gerbang utama (port 80) yang akan meneruskan permintaan user ke dua server aplikasi (backend-1 dan backend-2) secara bergantian.

Silakan buka kembali file /etc/haproxy/haproxy.cfg dan tambahkan blok konfigurasi berikut di bagian bawah:

frontend docapi_front
        bind :80
        default_backend docapi_backend

backend docapi_backend
        balance roundrobin
        option httpchk GET /api/v1/health

        # Definisi server aplikasi dengan parameter health check yang presisi
        server backend-1 192.168.87.12:8080 check inter 5s fall 3 rise 2
        server backend-2 192.168.87.13:8080 check inter 5s fall 3 rise 2

Agar sistem benar-benar High Availability, kita tidak hanya sekadar mendaftarkan IP, tapi juga mengatur bagaimana HAProxy memantau "kesehatan" server tersebut:

  • balance roundrobin: Trafik akan dibagi rata secara bergantian ke setiap server.

  • option httpchk: HAProxy akan melakukan pengecekan ke endpoint /api/v1/health. Jika endpoint ini merespon dengan status 200 OK, maka server dianggap sehat.

  • inter 5s: Pengecekan dilakukan setiap 5 detik sekali.

  • fall 3: Jika server gagal merespon sebanyak 3 kali berturut-turut, HAProxy akan menandai server tersebut sebagai DOWN dan berhenti mengirim trafik ke sana.

  • rise 2: Jika server yang sebelumnya mati kembali sehat dan berhasil merespon sebanyak 2 kali berturut-turut, HAProxy akan memasukkannya kembali ke dalam antrean trafik (UP).

Terakhir, simpan file tersebut dan jalankan perintah berikut untuk menerapkan konfigurasi baru:

sudo systemctl restart haproxy.service

Keepalived

Setelah memiliki dua node HAProxy yang identik, kita membutuhkan mekanisme untuk mengatur siapa yang menjadi "pemimpin" (Active) dan siapa yang menjadi "cadangan" (Standby). Di sinilah Keepalived berperan.

Keepalived adalah layanan berbasis Linux yang dirancang untuk menyediakan fitur High Availability melalui protokol VRRP (Virtual Router Redundancy Protocol). Tugas utamanya adalah mengelola Virtual IP (VIP)—sebuah alamat IP "melayang" yang akan berpindah secara otomatis dari node utama ke node cadangan jika terdeteksi adanya kegagalan sistem. Dengan Keepalived, proses failover terjadi secara instan tanpa perlu campur tangan manual.

Install KeepAlived

Lakukan installasi keepalived dikedua VM Load Balancer (HAProxy-1 dan HAProxy-2) dengan perintah berikut.

sudo apt update

sudo apt install keepalived -y

Setelah proses instalasi selesai, kita perlu memastikan bahwa layanan Keepalived langsung berjalan dan otomatis aktif setiap kali server melakukan reboot (booting). Jalankan perintah berikut:

sudo systemctl enable keepalived --now

Untuk memastikan layanan sudah berjalan dengan benar di latar belakang, kamu bisa mengecek statusnya menggunakan perintah:

sudo systemctl status keepalived.service

Keepalived Configuration

Sekarang kita masuk ke tahap paling krusial, yaitu menentukan peran masing-masing node HAProxy. Kita akan membuat file konfigurasi /etc/keepalived/keepalived.conf pada kedua VM.

Meskipun isinya terlihat mirip, ada perbedaan parameter kunci antara HAProxy-1 (Master) dan HAProxy-2 (Backup) yang menentukan siapa yang berhak memegang Virtual IP pertama kali.

1. Konfigurasi pada HAProxy-1 (Node Master)

Node ini akan menjadi pemegang utama Virtual IP selama layanannya berjalan normal. Buat filenya dengan perintah sudo nano /etc/keepalived/keepalived.conf dan masukkan kode berikut:

vrrp_script chk_haproxy {
    # Mengecek apakah proses haproxy sedang berjalan
    script "pkill -0 haproxy"
    # Cek setiap 2 detik
    interval 2
    # Jika gagal 2x, anggap service mati
    fall 2
    # Jika sukses 1x, anggap service hidup kembali
    rise 1
    # Kurangi prioritas sebanyak 20 jika haproxy mati
    weight -20
}

vrrp_instance VI_1 {
    # Peran utama sebagai Master
    state MASTER
    # SESUAIKAN dengan nama interface jaringan VM kamu
    interface enp0s8
    # Harus sama di kedua node
    virtual_router_id 51
    # Prioritas lebih tinggi dari Backup
    priority 100
    # Interval pengiriman sinyal 'Heartbeat' (1 detik)
    advert_int 1

    authentication {
        auth_type PASS
        # Password sinkronisasi antar node
        auth_pass 1111
    }

    virtual_ipaddress {
        # Virtual IP (VIP) yang akan diakses user
        192.168.87.10
    }

    track_script {
        # Hubungkan dengan script monitoring di atas
        chk_haproxy
    }
}

2. Konfigurasi pada HAProxy-2 (Node Backup)

Node ini akan tetap dalam posisi standby dan hanya akan mengambil alih Virtual IP jika node Master mengalami gangguan. Gunakan konfigurasi yang sama, namun ubah bagian yang ditandai:

vrrp_script chk_haproxy {
    # Mengecek apakah proses haproxy sedang berjalan
    script "pkill -0 haproxy"
    # Cek setiap 2 detik
    interval 2
    # Jika gagal 2x, anggap service mati
    fall 2
    # Jika sukses 1x, anggap service hidup kembali
    rise 1
    # Kurangi prioritas sebanyak 20 jika haproxy mati
    weight -20
}

vrrp_instance VI_1 {
    # Peran sebagai cadangan (Backup)
    state BACKUP
    # SESUAIKAN dengan nama interface jaringan VM kamu
    interface enp0s8
    # Harus sama di kedua node
    virtual_router_id 51
    # Prioritas lebih rendah (90) dibanding Master (100)
    priority 90
    # Interval pengiriman sinyal 'Heartbeat' (1 detik)
    advert_int 1

    authentication {
        auth_type PASS
        # Password sinkronisasi antar node
        auth_pass 1111
    }

    virtual_ipaddress {
        # Virtual IP (VIP) yang akan diakses user
        192.168.87.10
    }

    track_script {
        # Hubungkan dengan script monitoring di atas
        chk_haproxy
    }
}

3. Terapkan Konfigurasi

Setelah file tersimpan di kedua VM, segera lakukan restart pada layanan Keepalived agar pengaturan baru tersebut aktif:

sudo systemctl restart keepalived.service

Pengujian Akhir: Uji Ketangguhan Infrastruktur (High Availability Test)

Setelah seluruh komponen terpasang, saatnya kita melakukan pengujian menyeluruh. Pada tahap ini, kita tidak lagi mengakses IP fisik server, melainkan menggunakan Virtual IP (VIP) yang telah kita konfigurasi. Silakan buka browser dan akses:

http://192.168.87.10/swagger/index.html

Skenario 1: Kegagalan di Level Aplikasi (Backend Failure)

Matikan salah satu server aplikasi (Backend 1 atau Backend 2).

  • Cara Cek: Pantau melalui dashboard stats di http://192.168.87.10:8404/stats.

  • Hasil: Kamu akan melihat salah satu baris berubah menjadi merah. Namun, saat kamu me-refresh halaman Swagger, aplikasi tetap berjalan normal karena HAProxy mengalihkan trafik ke node yang masih sehat.

    Skenario 2: Kegagalan di Level Load Balancer (Failover Test)

    Ini adalah pengujian paling krusial. Kita akan melihat bagaimana Virtual IP berpindah antar server Load Balancer.

    1. Buka terminal di VM 2 (Backup) dan jalankan perintah untuk memantau log secara real-time:

      sudo journalctl -u keepalived -f
      
    2. Saat ini, status VM 2 seharusnya masih berada pada BACKUP STATE.

    3. Sekarang, matikan VM 1 (Master) atau hentikan layanan HAProxy-nya.

    4. Perhatikan Log di VM 2: Kamu akan melihat log yang menyatakan bahwa VM 2 mendeteksi kegagalan Master dan segera berubah status menjadi MASTER STATE.

    5. Uji Akses: Akses kembali http://192.168.87.10/swagger/index.html.

Hasil Akhir: Meskipun Load Balancer utama mati total, aplikasi tetap dapat diakses seolah-olah tidak terjadi apa-apa. Virtual IP telah berpindah ke VM 2 dalam hitungan detik. Inilah arsitektur High Availability yang Sebenarnya!

Kesimpulan

  • Membangun infrastruktur yang High Availability (HA) bukan berarti kita menciptakan sistem yang mustahil untuk rusak. Sebaliknya, HA adalah pengakuan bahwa kegagalan—baik itu hardware failure, network issue, maupun human error—adalah hal yang pasti akan terjadi suatu saat nanti.

    Melalui seri artikel ini, kita telah belajar bahwa arsitektur yang tangguh dibangun di atas tiga pilar utama:

    • Redundansi di Setiap Layer: Memastikan tidak ada satu pun komponen yang berdiri sendiri tanpa cadangan, mulai dari Load Balancer hingga server aplikasi.

    • Mekanisme Failover Otomatis: Menggunakan protokol seperti VRRP melalui Keepalived untuk memastikan perpindahan trafik terjadi dalam hitungan detik tanpa perlu campur tangan manual.

    • Pemisahan Data & State: Menjaga agar server aplikasi tetap stateless dengan memisahkan penyimpanan data ke PostgreSQL dan Rustfs, sehingga konsistensi data tetap terjaga meskipun node aplikasi berpindah-pindah.

Dengan mengimplementasikan Beyond Load Balancing, kita telah berhasil mengeliminasi Single Point of Failure (SPOF). Kini, kamu bisa tidur lebih nyenyak karena tahu bahwa jika salah satu server atau load balancer kamu "pingsan" di jam 3 pagi, sistem kamu cukup cerdas untuk menyembuhkan dirinya sendiri dan tetap melayani pengguna dengan normal.

Infrastruktur yang baik adalah infrastruktur yang tidak terlihat oleh pengguna karena ia selalu ada dan selalu bisa diandalkan.

https://www.nihbuatjajan.com/mdrdani

Mdr{dani} Notes

A digital garden where I plant ideas, share thoughts on DevOps, cloud infrastructure, open-source, and my journey in tech. Keep exploring and happy automating!

Explore Topics

Web DevelopmentReactNext.jsGolangOpen SourceTutorials

Supported By

Codeathome
LampungDev

Made with© 2026 Muhamad Dani Ramanda

Powered by HashnodeHosted on Vercel