Panduan Load Balancing HAProxy untuk Cloud VM NVMe di CloudAja

Load balancing adalah teknik mendistribusikan beban trafik secara merata ke beberapa server untuk meningkatkan kinerja, ketersediaan, dan skalabilitas aplikasi. Dalam artikel ini, kita akan membahas langkah demi langkah implementasi Load Balancing dengan HAProxy di Cloud VM NVMe CloudAja dengan memanfaatkan fitur VPC (Virtual Private Cloud).

Mengapa Memilih Cloud VM NVMe di CloudAja?

Cloud VM NVMe di CloudAja menawarkan performa tinggi berkat penyimpanan berbasis NVMe SSD, latensi rendah, dan kecepatan I/O yang sangat baik. Ditambah dengan fitur VPC, Anda dapat membangun arsitektur jaringan privat yang aman dan efisien.

Jika Anda ingin mencoba implementasi ini, silakan order Cloud VM NVMe minimal 2 unit melalui gambar berikut:

Arsitektur yang Digunakan

Untuk implementasi ini, dibutuhkan minimal 3 VM:

  • VM1 – Load Balancer dengan HAProxy
    • IP Publik: (sesuai alokasi IP yang tertera)
    • IP Privat: 10.10.10.1
  • VM2 – Web Server 1 (Apache/Nginx)
    • IP Privat: 10.10.10.2
  • VM3 – Web Server 2 (Apache/Nginx)
    • IP Privat: 10.10.10.3

Seluruh VM berada di VPC yang sama sehingga komunikasi antar server dapat berjalan lancar dan aman.

Persiapan VM di CloudAja

Sebelum memulai instalasi, pastikan Anda sudah memiliki Cloud VM NVMe dan telah membuat VPC.
Untuk pembuatan VPC, ikuti panduan resmi berikut:

Pastikan seluruh VM berada di subnet yang sama, misalnya 10.10.10.1/25, dengan pengaturan IP seperti yang disebutkan pada bagian arsitektur.

Instalasi Web Server di VM2 dan VM3

Login ke masing-masing web server:

# Update sistem
sudo apt update && sudo apt upgrade -y

# Install Apache (contoh)
sudo apt install apache2 -y

# Edit halaman index untuk VM2
echo "<h1>Halo dari Web Server 1 (VM2)</h1>" | sudo tee /var/www/html/index.html

Lakukan hal yang sama di VM3, namun ubah isi HTML menjadi Halo dari Web Server 2 (VM3) agar mudah dibedakan.

Karna di kedua VM ini bekerja sebagai webserver dalam backend dan menggunakan IP private untuk menghubungkan ke Load Balancer, direkomendasikan untuk menonaktifkan eth0dimana berisi IP Public yang diberikan oleh CloudAja. Untuk menonaktifkan bisa ikuti langkah berikut.

nano /etc/netplan/50-cloud-init.yaml

Tambahkan pagar (#) disetiap baris pada eth0 seperti berikut.

network:
    version: 2
    ethernets:
#        eth0:
#            addresses:
#            - xxx.xxx.xxx.xxx/25
#            match:
#                macaddress: bc:xx:11:06:7a:xx
#            nameservers:
#                addresses:
#                - 1.1.1.1
#                search:
#                - cloudaja.id
#            routes:
#            -   to: default
#                via: xxx.xxx.xxx.xxx
#            set-name: eth0
        ens19:
            addresses:
            - 10.10.10.2/25
            match:
                macaddress: bc:xx:11:8d:f3:xx
            set-name: ens19

Setelah itu bisa lakukan perintah berikut untuk mengaplikasi konfigurasi jaringan VM.

netplan apply

Setelah itu bisa lakukan reboot pada VM2 agar konfigurasi jaringan pada VM benar-benar diterapkan.

Lakukan hal yang sama pada VM3 untuk menonaktifkan IP Public VM.

Perlu diketahui setelah melakukan konfigurasi jaringan seperti ini, VM2 maupun VM3 tidak akan mendapatkan akses internet, sehingga VM tidak bisa untuk melakukan update/upgrade paket maupun untuk remote ssh melalui IP public. Jika ingin melakukan remote ssh pada VM2 maupun VM3 bisa lakukan via VM1 dengan menggunakan IP private VM2 maupun VM3.

Instalasi HAProxy di VM1 (Load Balancer)

Masuk ke VM1:

sudo apt update && sudo apt install haproxy -y

Edit konfigurasi HAProxy:

sudo nano /etc/haproxy/haproxy.cfg

Tambahkan konfigurasi berikut:

frontend https_front
    bind *:443 ssl crt /etc/ssl/private/haproxy.pem
    acl is_wrong_domain hdr(host) -i 160.187.143.150
    http-request deny if is_wrong_domain
    default_backend web_backends

frontend http_front
    bind *:80
    redirect scheme https code 301 if !{ ssl_fc }

backend web_backends
    balance roundrobin
    option forwardfor
    http-request set-header X-Forwarded-Port %[dst_port]
    http-request add-header X-Forwarded-Proto https if { ssl_fc }
    option httpchk GET /
    server web1 10.10.10.2:80 check
    server web2 10.10.10.3:80 check

listen stats
    bind *:8080 ssl crt /etc/ssl/private/haproxy.pem
    acl from_local src 118.99.xx.xx
    http-request deny if !from_local
    stats enable
    stats uri /stats
    stats refresh 10s
    stats show-node
    stats hide-version
    stats auth global:HelloWorld#1

Lalu restart HAProxy:

sudo systemctl enable haproxy
sudo systemctl restart haproxy

Penjelasan Konfigurasi:

  • frontend https_front: Menerima trafik HTTPS di port 443 menggunakan sertifikat SSL. Jika domain salah (misalnya langsung akses IP publik), permintaan akan ditolak.
  • frontend http_front: Menerima trafik HTTP di port 80 dan otomatis mengarahkan (redirect) ke HTTPS.
  • backend web_backends: Berisi dua web server (10.10.10.2 dan 10.10.10.3) dengan metode load balancing roundrobin. option httpchk GET / digunakan untuk health check.
    • option forwardfor → mengirimkan IP asli client ke backend (via header X-Forwarded-For).
    • http-request set-header X-Forwarded-Port → memberi tahu backend port asal request.
    • http-request add-header X-Forwarded-Proto → memberi tahu backend apakah request asli menggunakan HTTPS.
  • listen stats: Menyediakan dashboard monitoring di port 8080 dengan akses HTTPS, hanya bisa diakses dari IP tertentu (118.99.123.35), dilindungi dengan autentikasi.

Pengujian Load Balancing

Setelah konfigurasi selesai, saatnya melakukan pengujian. Karna IP Public VM1 sudah saya hubungkan ke domain, bisa kunjungi saja domainnya, contoh seperti berikut.

https://haproxy.natanet.my.id/

Jika konfigurasi berhasil, halaman akan menampilkan konten secara bergantian ketika melakukan refresh pada halaman browser:

  • Halo dari Web Server 1 (VM2)
  • Halo dari Web Server 2 (VM3)

Itu artinya load balancing sudah berjalan dengan baik menggunakan metode roundrobin.

Selain itu, Anda juga bisa mengakses dashboard monitoring HAProxy dengan port 8080 di:

https://domain_kalian.com:8080/stats

Namun, halaman ini hanya bisa diakses dari IP yang sudah diizinkan pada konfigurasi (118.99.xx.xx) dan memerlukan login dengan username & password yang telah ditentukan di file konfigurasi haproxy.cfg.

Kesimpulan

Dengan memanfaatkan Cloud VM NVMe CloudAja dan fitur VPC, Anda dapat membangun arsitektur Load Balancing dengan HAProxy yang handal, aman, dan scalable. Implementasi ini cocok untuk website dengan trafik tinggi yang membutuhkan kinerja optimal.

Leave a Reply

Your email address will not be published. Required fields are marked *