Setting Load Balancing dengan Nginx

Kali ini saya ingin membahas tentang load balancing, apa sih itu load balancing ? Load balancing adalah mekanisme untuk membagi atau mendistribusikan trafik ke beberapa server. Nah pada artikel ini saya menggunakan nginx sebagai load balancer.

Metede load balancing dibagi menjadi tiga tipe, yaitu Roun robin, Least connections dan IP Hash. Masing-masing tipe tersebut tentunya mempunyai fungsi yang berbeda-beda. Berikut penjelasan tentang tipe-tipe yang saya sebutkan diatas.

  1. Roun Robin : Fungsinya adalah mendistribusikan trafik ke setiap server secara bergantian.
  2. Leas Connection : Fungsinya mendistribusikan trafik ke server yang paling sedikit koneksi aktifnya.
  3. IP Hash : Yaitu mendistribusikan trafik ke server yang sama ketika visitor/pengunjung pertama kali melakukan permintaan,
Topologi :
Web browser --> Load Balancing --> Backend1, Backend2

Pada artikel ini saya menggunakan tiga server, satu server untuk load balancer dan dua server untuk backend. Berikut saya infokan perangkat yang saya gunakan untuk setting load balancer.

  1. OS Ubuntu 18.04 LTS
  2. Nginx web server
  3. PHP-FPM 7.2
  4. Load balancer : 192.168.100.51
  5. Node1/Backend1 : 192.168.100.52
  6. Node2/Backend2 : 192.168.100.53
  7. Domain : vm.dapurit.com

Oke mari kita lanjut, langkah berikutnya setelah perangkat yang diperlukan sudah disiapkan yaitu melakukan installasi Nginx dan PHP-FPM di node1 dan node2.

sudo apt install nginx php php-fpm -y
sudo systemctl status nginx 
sudo systemctl status php7.2-fpm 

Setelah itu buat file index.php di node1 dan node2

Node 1

sudo mkdir /var/www/vm.dapurit.com
sudo echo "<h1>node1</h1>" > /var/www/vm.dapurit.com/index.php

Node 2

sudo mkdir /var/www/vm.dapurit.com
sudo echo "<h1>node2</h1>" > /var/www/vm.dapurit.com/index.php

Langkah selanjutnya membuat server block di Node1 dan Node2

sudo nano /etc/nginx/conf.d/vm.dapurit.com.conf	

Isi file konfig server block seperti dibawah ini

server {
    listen 80;

    server_name vm.dapurit.com www.vm.dapurit.com;
    root /var/www/vm.dapurit.com/;

    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $fastcgi_script_name =404;
        include fastcgi_params;
        fastcgi_pass                    unix:/var/run/php/php7.2-fpm.sock;
        fastcgi_index                   index.php;
        fastcgi_param DOCUMENT_ROOT     $realpath_root;
        fastcgi_param SCRIPT_FILENAME   $realpath_root$fastcgi_script_name;
    }

    access_log /var/log/nginx/vm.dapurit.com.access.log;
    error_log /var/log/nginx/vm.dapurit.com.error.log warn;
}

Kemudian test dan restart nginx.

sudo nginx -t
sudo systemctl restart nginx	
sudo systemctl status nginx

Nah sampai langkah ini konfigurasi pada Node1 dan Node2 sudah selesai.

Selanjutnya install dan konfigurasi nginx di load balancer

sudo apt install nginx -y
sudo systemctl status nginx

Lalu buat server block untuk load balancing domain vm.dapurit.com

sudo nano /etc/nginx/conf.d/lb-vm.dapurit.com.conf 

Isi file konfignya dengan data dibawah ini.

upstream backend {
    server 192.168.100.52; #node1
    server 192.168.100.53;  #node2
}

server {
    listen 80;
    server_name vm.dapurit.com www.vm.dapurit.com;

    location / {
        proxy_redirect      off;
        proxy_set_header    X-Real-IP $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    Host $http_host;
        proxy_pass http://backend;
    }
}

Konfigurasi diatas dituliskan IP adress dari node/backend server, secara default metode yang digunakan pada konfigurasi diatas adalah metode Round Robin.

Berikut jika konfigurasi menggunakan Least Connections.

upstream backend {
 least_conn;
    server 192.168.100.52; #node1
    server 192.168.100.53;  #node2
}

Dan berikut jika konfigurasi menggunakan IP Hash.

upstream backend {
 ip_hash;
    server 192.168.100.52; #node1
    server 192.168.100.53;  #node2
}

Selanjutnya test dan restart nginx.

sudo nginx -t
sudo systemctl restart nginx	
sudo systemctl status nginx

Sampai disini proses seting load balancing sudah selesai, selanjutnya mari kita test apakah berfungsi atau tidak. Jika setingan berhasil maka ketika kita akses domain yang sudah diseting di atas secara bergantian akan mengarah ke node1 dan node2.

Halaman index Node1
Halaman index Node2

Hasil test diatas ketika akses domain otomatis bergantian ke node1 dan node2, artinya konfigurasi yang dilakukan sudah berhasil. Selamat mencoba 🙂

Leave a Reply