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
- IP Privat:
-
VM3 – Web Server 2 (Apache/Nginx)
- IP Privat:
10.10.10.3
- IP Privat:
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
443menggunakan sertifikat SSL. Jika domain salah (misalnya langsung akses IP publik), permintaan akan ditolak. -
frontend http_front: Menerima trafik HTTP di port
80dan otomatis mengarahkan (redirect) ke HTTPS. -
backend web_backends: Berisi dua web server (
10.10.10.2dan10.10.10.3) dengan metode load balancing roundrobin.option httpchk GET /digunakan untuk health check.-
option forwardfor→ mengirimkan IP asli client ke backend (via headerX-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
8080dengan 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.

