KATEGORI: WEB SERVER NGINX

Mengonfigurasi Load Balancing Pada Server Nginx

Mendistribusikan beban web server untuk 2 server lainnya agar dapat meringankan web server nginx yang paling utama.

Do Exploit
6 min readJun 26, 2020
Thumbnail!

Sebelumnya kita juga pernah membahas pembagian beban berdasarkan path situs. Sekarang kita akan membahas pembagian beban juga, namun kali ini lebih seimbang karena dapat disesuaikan juga dengan kekuatan server.

Load balancing adalah metode membagi beban suatu server kepada dua atau lebih secara seimbang, biasanya metode ini digunakan untuk mengoptimalkan sebuah server agar tidak mengalami overload/kelebihan beban yang memungkinkan server untuk down/mati beberapa saat. Amati topologi dibawah ini bila anda sudah menginstall nginx;

Desain gambar oleh https://app.diagrams.net/

Keterangan:

  • Host PC, Karena kita menggunakan aplikasi virtualisasi seperti VMware, VirtualBox dan lain-lain, maka HOST PC itu adalah sistem operasi utama yang digunakan oleh kita dan menjadi klien dari linux server kita.
  • Load Balancer, server utama yang menerima permintaan lalu meneruskannya ke server backend pertama dan kedua, dan kita juga harus membagi beban yang sesuai pada kedua server tersebut berdasarkan kekuatannya.
  • Backend Pertama, kita simulasikan server backend pertama memiliki tenaga yang lebih kuat dibanding backend kedua.
  • Backend Kedua, kalau backend kedua memiliki tenaga yang lebih kecil daripada backend pertama.
  • vmnet2, adapter jaringan vmware yang menghubungkan antara ketiga server tersebut.

1. Konfigurasi Alamat IP

Kita harus sepakat dulu membagi alamat IP nya agar dapat meminimalisir error yang mungkin saja terjadi nanti, sebagai berikut;

  • Mesin 1 — Load Balancer ens33 = 192.168.169.1
  • Mesin 2 — Backend Pertama ens33 = 192.168.169.2
  • Mesin 3 — Backend Kedua ens33 = 192.168.169.3

Mesin 1

Ketik perintah dibawah ini untuk masuk ke file konfigurasi IP address;

mesin1$ nano /etc/network/interfaces

CTRL+X+Y+ENTER Untuk keluar.

Selanjutnya jangan lupa untuk restart layanan networking untuk mengaktifkan konfigurasi yang baru saja kita buat tadi.

mesin1$ service networking restart

Pastikan IP addressnya telah sesuai dan interfacenya telah aktif dengan mengetik perintah dibawah ini;

mesin1$ ip add

Setelah itu lakukan hal yang sama pada kedua server lainnya, namun sesuaikan IP address yang kita telah sepakati tadi.

Mesin 2

mesin2$ ip add

Mesin 3

mesin3$ ip add

2. Persiapan Sumber Kode Halaman Website

Kali ini kita nggk perlu repot-repot download halaman website dari github, kita akan menggunakan halaman website default atau yang sudah ada dari nginx, tapi kita tetap mengubah sedikit kode yang ada didalamnya. Pada mesin 1 tidak perlu melakukan apapun, karena tugasnya hanya membagi beban dari klien untuk kedua server lainnya.

Biasanya halaman index.html nya itu terdapat pada direktori /usr/share/nginx/html, sekarang beralih ke mesin 2 dan ketik perintah dibawah ini untuk mengubah kode html nya;

Mesin 2

mesin2$ nano /usr/share/nginx/html/index.html

Source Code HTML untuk Backend Pertama

CTRL+X+Y+ENTER Untuk keluar.

Mesin 3

Lakukan hal yang sama pula pada mesin 3 tapi value/nilai yang berbeda, maksudnya adalah bila mesin 2 adalah Backend Pertama maka mesin 3 adalah Backend Kedua.

mesin2$ nano /usr/share/nginx/html/index.html

Source Code HTML untuk Backend Kedua

CTRL+X+Y+ENTER Untuk keluar.

FAQ

Muncul lagi pertanyaan baru, mengapa perlu diubah? Karena load balancer mendistribusikan bebannya pada kedua server lain, tentu saja setiap paket yang datang akan ditangani secara beda-beda. Maka dari perbedaan itu untuk mengetahui siapa yang menangani paketnya adalah dengan mengubah respon html yang ditampilkan.

Kalo udah tau terus buat apa lagi? Nanti kita bisa melihat apakah penanganannya sudah dilakukan sesuai konfigurasi yang kita buat atau tidak, bila tidak sesuai itu akan berdampak buruk pada salah satu server karena kita juga tahu dari antara kedua server tersebut ada yang kuat dan sedikit kuat.

Pada server asli itu biasanya diubah gak sih? Tidak, karena saat ini hanya kebutuhan untuk belajar, jadi kita perlu ber eksperimen sedikit.

3. Konfigurasi Mesin Backend

Sebelum masuk ke server utama, kita harus menyiapkan kedua backend terlebih dahulu, agar nanti server utama tinggal mendistribusikan beban saja. Masuk ke mesin 2 lalu ketik perintah dibawah ini untuk menambah konfigurasi terbaru;

Mesin 2

mesin2$ cd /etc/nginx/sites-enabled

mesin2$ rm default

  • Sengaja dihapus karena kita memiliki gaya dan tujuan konfigurasi sendiri.

mesin2$ nano ../sites-available/backend1

server {
listen 8080;
root /usr/share/nginx/html;
access_log /var/log/nginx/access_backend1.log combined;
error_log /var/log/nginx/error_backend1.log notice;
location / {
}
}

Biasanya saya memberikan keterangan pada setiap konfigurasinya, tapi sekarang tidak karena baru saja kemarin saya membuat blog mengenai struktur file, direktori dan konfigurasi nginx. Jadi kalian bisa baca disitu aja oke!

Setelah itu mari kita buat konfigurasi tadi dapat diakui dan siap produksi, ketiklah perintah dibawah ini;

mesin2$ ln -s ../sites-available/backend1

Pastikan file backend1 sudah ada di sites-enabled.

mesin2$ ls

  • ln berwenang untuk membuat shortcut seperti di windows, jadi apapun yang kita lakukan pada file backend1 di sites-available dan sites-enabled, akan berdampak sama pada kedua file tersebut.

Jangan lupa restart layanan nginx agar dapat memproduksi konfigurasi yang baru saja dibuat.

mesin2$ service nginx restart

Mesin 3

Lakukan hal yang sama pada mesin 3 seperti mesin 2 tadi.

server {
listen 8080;
root /usr/share/nginx/html;
access_log /var/log/nginx/access_backend2.log combined;
error_log /var/log/nginx/error_backend2.log notice;
location / {
}
}

mesin2$ service nginx restart

Mengapa port listennya 8080 bukan 80? Karena setiap paket yang diteruskan dari Load Balancer hanya bersifat sementara atau numpang lewat saja, yang berarti server backend tidak bertindak sebagai web server utama.

4. Konfigurasi Load Balancer

Sekarang kita konfigurasi load balancernya untuk mendistribusikan permintaan/beban dari klien kepada dua server backendnya. Ketiklah perintah dibawah untuk menambahkan konfigurasi terbaru;

mesin1$ cd /etc/nginx/sites-enabled

mesin1$ rm default

mesin1$ nano ../sites-available/load_balancer

Ada yang terbaru tuh blok syntax upstream, dia adalah fitur yang mengelompokkan beberapa server menjadi satu group, nanti paket-paket permintaan dari klien akan di distribusikan pada server yang ada dalam group tersebut yaitu backend1 dan backend 2. Setelah itu kita buat konfigurasi tadi berjalan lalu restart layanan nginx;

mesin1$ ln -s ../sites-available/load_balancer

Pastikan file load_balancer sudah ada;

mesin1$ ls

mesin1$ service nginx restart

Mengapa tidak ada syntax root seperti backend? Server Load Balancer tidak menangani permintaan HTTP dari klien melainkan langung meneruskannya, maka tidak ada gunanya juga kita meletakkannya dalam konfigurasi.

5. Verifikasi Web Server

Uji Coba Pertama

Disinilah HOST-PC akan bertindak sebagai klien untuk test layanan nginx yang baru saja kita buat tadi, buka aplikasi browser tercinta kalian lalu ketik url berikut;

http://192.168.169.1

Reload/F5 terus dan lihat sendiri hasilnya, respon Backend1 dan Backend2 saling bergantian. Jika diilustrasikan pada gambbar maka hasil responnya seperti ini;

Load Balancing Nginx Default
Designed by Freepik

Itu kesalahan, kenapa? Harusnya server Load Balancer mendistribusikan bebannya secara adil, karena Server Backend Pertama memiliki sumber daya lebih kuat dibandingkan Server Backend Kedua.

Mesin 1

Maka kita harus menambahkan parameter weight (berat) pada konfigurasi server Load Balancer, agar mengetahui siapa yang lebih kuat diantara keduanya. Ketik perintah dibawah ini;

mesin1$ nano /etc/nginx/sites-enabled/load_balancer

upstream load_balancer {    
server 192.168.169.2:8080 weight=4;
server 192.168.169.3:8080 weight=2;
}
...

Jangan lupa restart layanan nginx nya.

mesin1$ service nginx restart

Uji Coba Kedua

Buka lagi aplikasi browser kalian habis itu ketik url berikut;

http://192.168.169.1

Jika di ilustrasikan maka menjadi seperti gambar dibawah ini;

Load Balancing Nginx with Weight Parameter
Designed by Freepik

BACA INI: Tugas akhir kalian adalah mengamati respon yang diberikan oleh web servernya, apa yang membuat kalian percaya dengan ilustrasi weight diatas itu?

Kalau kalian sudah membuat kesimpulan yang menurut kalian tepat, maka silahkan lanjutkan tutorial yang menjelaskan bagaimana bila salah satu server backend mati/down?

Learn then Share

--

--

Do Exploit
Do Exploit

Written by Do Exploit

I share stories about what I've learned in the past and now. Let's connect to Instagram! @do.exploit

Responses (1)