Load balancing adalah teknik untuk mendistribusikan traffic ke beberapa server backend agar beban merata, performa optimal, dan ketersediaan tinggi. Nginx mendukung load balancing dengan beberapa metode dan dapat dikombinasikan dengan health check dan failover server.
Contents
1. Round-Robin
Round-robin adalah metode default Nginx. Setiap request diarahkan ke backend secara berurutan.
Contoh:
upstream backend {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
}
}
- Request pertama ke
127.0.0.1:3000, request kedua ke127.0.0.1:3001, dan seterusnya. - Cocok untuk backend dengan kapasitas serupa.
2. Least Connections
Metode ini memilih backend dengan jumlah koneksi aktif paling sedikit. Cocok untuk backend dengan beban request berbeda-beda.
Contoh:
upstream backend {
least_conn;
server 127.0.0.1:3000;
server 127.0.0.1:3001;
}
- Nginx memantau koneksi aktif tiap backend dan memilih yang paling ringan.
3. IP Hash
Metode ini memastikan request dari IP tertentu selalu diarahkan ke backend yang sama. Cocok untuk aplikasi yang membutuhkan session persistence.
Contoh:
upstream backend {
ip_hash;
server 127.0.0.1:3000;
server 127.0.0.1:3001;
}
- Request dari client dengan IP sama akan selalu ke backend yang sama.
4. Health Check Dasar
Health check memastikan Nginx hanya meneruskan request ke backend yang sehat.
Metode paling sederhana menggunakan parameter max_fails dan fail_timeout:
upstream backend {
server 127.0.0.1:3000 max_fails=3 fail_timeout=10s;
server 127.0.0.1:3001 max_fails=3 fail_timeout=10s;
}
- Jika backend gagal merespons 3 kali dalam 10 detik, Nginx menandainya sebagai unavailable sementara.
5. Failover Server
Failover server digunakan jika backend utama gagal. Contoh:
upstream backend {
server 127.0.0.1:3000;
server 127.0.0.1:3001 backup;
}
- Backend dengan
backuphanya digunakan jika semua server utama tidak tersedia. - Berguna untuk meningkatkan ketersediaan aplikasi.
6. Contoh Konfigurasi Load Balancing Lengkap
upstream backend {
least_conn;
server 127.0.0.1:3000 max_fails=3 fail_timeout=10s;
server 127.0.0.1:3001 max_fails=3 fail_timeout=10s;
server 127.0.0.1:3002 backup;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 5s;
proxy_read_timeout 30s;
proxy_send_timeout 10s;
}
error_page 502 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
- Load balancing menggunakan least_conn
- Health check dasar dengan
max_failsdanfail_timeout - Failover ke server
127.0.0.1:3002jika backend utama gagal - Timeout dan error page diatur untuk kestabilan
Kesimpulan
Load balancing di Nginx memungkinkan:
- Distribusi request ke beberapa backend menggunakan round-robin, least connections, atau IP hash
- Memastikan backend hanya menerima request saat sehat (health check)
- Menyediakan failover server untuk ketersediaan tinggi
- Mengatur timeout, proxy headers, dan error page untuk stabilitas dan pengalaman pengguna
Dengan pengaturan ini, aplikasi akan tetap stabil dan cepat meskipun traffic tinggi atau beberapa backend mengalami gangguan.