Round Robin #
Round robin adalah algoritma load balancing default Nginx — jika kamu tidak menentukan algoritma lain, inilah yang digunakan. Cara kerjanya sederhana: setiap request diteruskan ke server berikutnya dalam daftar secara bergiliran.
Cara Kerja #
Server pool: A, B, C
Request 1 → Server A
Request 2 → Server B
Request 3 → Server C
Request 4 → Server A (kembali ke awal)
Request 5 → Server B
Request 6 → Server C
...
Setiap server mendapat jumlah request yang kurang lebih sama dari waktu ke waktu. Ini berasumsi bahwa setiap request memiliki beban pemrosesan yang serupa dan setiap server memiliki kapasitas yang sama.
Konfigurasi Dasar #
upstream app_servers {
server 10.0.0.1:3000;
server 10.0.0.2:3000;
server 10.0.0.3:3000;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://app_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Nama upstream (app_servers) bisa berupa apapun — ia hanya digunakan sebagai referensi di proxy_pass.
Parameter Server #
Setiap server dalam upstream block bisa dikonfigurasi dengan parameter tambahan:
upstream app_servers {
# Server normal
server 10.0.0.1:3000;
# Server yang sementara dianggap down (dikeluarkan dari rotasi)
server 10.0.0.2:3000 down;
# Server backup — hanya digunakan jika semua server utama down
server 10.0.0.3:3000 backup;
# Batas kegagalan sebelum server dianggap tidak tersedia
# max_fails: jumlah kegagalan dalam fail_timeout detik
# fail_timeout: durasi window kegagalan dan durasi server ditandai down
server 10.0.0.4:3000 max_fails=3 fail_timeout=30s;
# Batasi jumlah koneksi simultan ke server ini
server 10.0.0.5:3000 max_conns=100;
}
Bagaimana max_fails dan fail_timeout bekerja #
max_fails=3 fail_timeout=30s berarti:
Jika dalam 30 detik ada 3 kegagalan ke server ini,
→ Nginx tandai server sebagai unavailable
→ Server tidak menerima request selama 30 detik berikutnya
→ Setelah 30 detik, Nginx coba lagi dengan mengirim 1 request
→ Jika berhasil, server kembali ke rotasi
→ Jika gagal, countdown 30 detik dimulai lagi
“Kegagalan” di sini berarti: timeout koneksi, timeout baca, atau response dengan kode error yang masuk kategori proxy_next_upstream.
Failover: Apa yang Terjadi Saat Server Gagal #
Ketika Nginx gagal meneruskan request ke server yang dipilih, ia bisa mencoba server berikutnya. Perilaku ini dikontrol oleh proxy_next_upstream:
upstream app_servers {
server 10.0.0.1:3000 max_fails=2 fail_timeout=10s;
server 10.0.0.2:3000 max_fails=2 fail_timeout=10s;
server 10.0.0.3:3000 max_fails=2 fail_timeout=10s;
}
server {
location / {
proxy_pass http://app_servers;
# Coba server lain jika terjadi error/timeout ini
proxy_next_upstream error timeout http_502 http_503 http_504;
# Batas waktu total untuk semua percobaan
proxy_next_upstream_timeout 10s;
# Maksimum berapa kali coba server lain
proxy_next_upstream_tries 3;
}
}
Hati-hati menggunakan proxy_next_upstream untuk request POST atau request yang melakukan perubahan data. Jika backend sudah memproses request sebelum gagal, mengirim ulang ke server lain bisa menyebabkan operasi dieksekusi dua kali.Server Backup #
Server backup tidak menerima request selama ada satu server utama yang masih aktif:
upstream app_servers {
server 10.0.0.1:3000;
server 10.0.0.2:3000;
# Ini hanya aktif jika kedua server di atas down
server 10.0.0.3:3000 backup;
}
Pola umum: server backup menampilkan halaman maintenance atau pesan “layanan sedang gangguan” yang lebih ramah dari error 502 bawaan.
Kapan Round Robin Cocok #
Round robin bekerja paling baik ketika:
- Semua server memiliki spesifikasi hardware yang sama
- Request yang masuk memiliki beban pemrosesan yang relatif serupa
- Tidak ada kebutuhan session persistence (user tidak perlu selalu ke server yang sama)
- Aplikasi stateless (semua server bisa menangani request dari user manapun)
Jika server memiliki kapasitas berbeda, gunakan weighted round robin (dibahas di artikel Weighted). Jika beban per-request sangat bervariasi, pertimbangkan Least Connections.
Ringkasan #
- Round robin adalah algoritma default Nginx — setiap request ke server berikutnya secara bergiliran.
- Parameter
max_failsdanfail_timeoutmengontrol kapan server dianggap down dan berapa lama dikecualikan dari rotasi.- Server dengan parameter
backuphanya aktif ketika semua server utama tidak tersedia.proxy_next_upstreammengontrol kondisi di mana Nginx mencoba server lain — jangan gunakan sembarangan untuk request yang mengubah data.- Round robin optimal untuk server dengan kapasitas sama dan request dengan beban serupa.