Load Balancing Menggunakan Nginx


Load Balance merupakan metode pembagian beban yang ditangani oleh beberapa server dengan konten yang sama. Dengan metode tersebut, sebuah aplikasi atau website dimungkinkan tetap tersedia walau banyak pengguna yang mengaksesnya. Hal ini dilakukan untuk menjaga agar pengguna tidak mengalami gangguan ketika menggunakan aplikasi atau website tersebut. Bagaimana jadinya jika aplikasi atau website yang digunakan merupakan layanan bank atau layanan yang memuat urusan penting. Tentunya seorang pengguna tidak ingin mengalami gangguan ketika menggunakannnya.

Selain digunakan agar server tetap tersedia, load balance juga bisa berguna untuk meningkatkan kualitas layanan website atau aplikasi. Load balance mampu menyimpan cache, sehingga dapat mempercepat akses pengguna pada akses selanjutnya. Dengan load balance juga, aplikasi atau website menjadi lebih aman. Hal tersebut karena server layanannya berada di belakang server load balance. Sehingga, pengguna tidak mengakses secara langsung server layanan tersebut, namun mengakses aplikasi atau website melalui server load balance.

Nginx

Selain menjadi web server terpopuler, Nginx juga memiliki fungsi lain yaitu sebagai Load Balancer. Nginx dapat diletakan di depan banyak server layanan dan dikonfigurasi menjadi server load balance. Pada artikel ini, kita akan belajar menggunakan Nginx sebagai load balancer. Topologi yang akan digunakan adalah sebagai berikut:

  • Server Load Balance: 10.23.2.106
  • Server Web-1: 10.23.2.27
  • Server Web-2: 10.23.1.209

Web server yang digunakan pada server web dapat menggunakan Apache2 atau Nginx dan diisi dengan konten sederhana yang menampilkan identitas server.

Langkah 1. Instalasi

 apt update
apt install nginx

Langkah 2. Konfigurasi

Untuk menggunakan load balance pada nginx terdapat 2 opsi file konfigurasi. Pilihan yang pertama yaitu menggunakan file konfigurasi default nginx yang berada di dalam direktori:

vim /etc/nginx/sites-enabled/default

Atau, pilihan yang kedua yaitu membuat file konfigurasi baru pada direktori:

vim /etc/nginx/conf.d/nama_file.conf

#contoh:
vim /etc/nginx/conf.d/lb-amar.conf

Terdapat beberapa konfigurasi yang diperlukan, diantaranya:

  • upstream: digunakan untuk mendefiniskan atau membuat daftar, server mana saja yang hendak di daftarkan load balance
  • proxy_redirect: digunakan agar ketika pengguna melakukan akses ke IP server nginx yang menjadi load balance, tidak diubah ke IP server yang ada di belakangnya.
  • listen dan server_name: digunakan untuk mendefinisikan port dan IP atau domain yang digunakan oleh server load balance. Ini digunakan oleh pengguna untuk melakukan akses.
  • proxy_set_header: digunakan untuk penambahan header IP pengguna yang melakukan akses. Ini berguna untuk pencatatan log pada server backend yang berada di belakang server load balance, sehingga bisa mengetahui IP pengguna asli dan bukan IP server load balance.
  • proxy_pass: digunakan untuk meneruskan permintaan ke server yang telah di daftarkan pada upstream

Seperti pada HAProxy yang digunakan untuk load balancing, Nginx juga memiliki algortima atau mekanisme yang digunakan untuk membagi trafik permintaan. Ketika tidak di definisikan seperti di atas, secara default Nginx menggunakan algoritma roundrobin. Setidaknya, terdapat tiga mekanisme yang dapat digunakan pada Nginx open source, diantaranya:

  • RoundrobinMekanisme ini merupakan mekanisme default yang digunakan oleh Nginx ketika bekerja sebagai load balancer. Pengguna yang melakukan permintaan akan diteruskan ke server backend secara bergantian. Permintaan pertama akan diteruskan ke server pertama, kemudian permintaan pertama akan diteruskan ke server kedua, permintaan ketiga akan diteruskan ke server pertama dan seterusnya secara bergilir. Jika terdapat lebih dari dua server (tiga atau lebih) maka akan diteruskan bergilir secara berurutan.
  • Least ConnectionMekanisme ini bekerja dengan membagi trafik permintaan berdasarkan jumlah koneksi aktif yang ditangani oleh server backend. Berbeda dengan roundrobin yang mengabaikan jumlah koneksi aktif dan hanya meneruskan secara berurutan, least connection akan meneruskan permintaan yang datang ke server dengan koneksi aktif terendah. Sehingga beban permintaan yang ditangani oleh server backend terdistribusikan secara merata.
  • IP HashMekanisme ini bekerja dengan membagi trafik berdasarkan IP address dari client atau pengguna yang melakukan permintaan. Ketika pertama kali pengguna melakukan permintaan, server Nginx mencatat IP pengguna tersebut. Kemudian, ketika pengguna tersebut melakukan permintaan untuk yang kedua dan seterusnya, maka akan diarahkan oleh server Nginx ke server backend yang sama. Mekanisme ini dapat digunakan untuk menjaga konsistensi, seperti sesi dan cache pengguna yang melibatkan IP address.

Langkah 3. Pengujian

Untuk melakukan pengujian, akses IP server load balance menggunakan web browser. Kemudian coba restart beberapa kali, maka akan muncul konten dari server web-1 dan web-2

Nginx SSL/TLS

Ikuti langkah-langkah di bawah ini, untuk mengamankan akses website menggunakan enkripsi atau HTTPS.

Langkah 1. Buat Sertifikat Authority

Pertama-tama, buat private key terlebih dahulu:

openssl genrsa -out CAkey.key 2048

Kemudian buat sertifikat authoritynya:

openssl req -new -x509 -days 365 -key CAkey.key -out CAcert.crt

Setelah itu, buat permintaan sertifikat pada server:

openssl req -new > issued-crt.req -nodes

Setelah itu, buat rsa key sebagai kunci sertifikatnya:

openssl rsa -in privkey.pem -out issued-key.key

Yang terakhir, buat sertifikat ssl pada server:

openssl x509 -req -in issued-crt.req -signkey issued-key.key -CA CAcert.crt -CAkey CAkey.key -days 200 -out wildcard.indo.crt -CAcreateserial

Setelah pembuatan kunci dan sertifikat SSL telah selesai, konfigurasi Nginx untuk berjalan menggunakan SSL:

Setelah itu, coba akses kembali website melalui web browser. Maka akan diarahkan ke HTTPS:

Monitoring

Nginx menyediakan fitur monitoring yang dapat digunakan untuk memantau server load balance ataupun website yang berada di belakangnnya. Terdapat dua pilihan, yaitu monitoring lokal dan sederhana atau monitoring menggunakan Nginx Amplify dengan visualisasi grafik.

Monitoring Sederhana

Untuk menggunakan monitoring secara sederhana, periksa modul status terlebih dahulu:

nginx -V 2>&1 | grep -o with-http_stub_status_module

Kemudian tambahkan konfigurasi di bawah ini:

location /nginx_status {
    stub_status;
}

Setelah itu coba akses melalui web browser:

https://10.23.2.106/nginx_status

Monitoring Dengan Nginx Amplify

Untuk melakukan monitoring dengan visual yang lebih baik, kita dapat menggunakan Nginx Amplify. Untuk menggunakannya buat akun terlebih dahulu pada halaman:

https://amplify.nginx.com/

Kemudian setelah berhasil masuk, ikuti langkah yang pertama, yaitu melakukan instalasi Amplify Agent pada server load balance:

Kemudian, ikuti langkah yang kedua, tambahkan konfigurasi seperti di bawah ini pada /etc/nginx/conf.d/stub_status.conf:

server {
	listen 127.0.0.1:80;
	server_name 127.0.0.1;
	location /nginx_status {
		stub_status on;
		allow 127.0.0.1;
		deny all;
	}
}

Kemudian klik finish dan tunggu beberapa saat:

Untuk menambahkan metrik tambahan, ikuti langkah ketiga:

log_format  main_ext  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" '
                      '"$host" sn="$server_name" '
                      'rt=$request_time '
                      'ua="$upstream_addr" us="$upstream_status" '
                      'ut="$upstream_response_time" ul="$upstream_response_length" '
                      'cs=$upstream_cache_status' ;

        access_log /var/log/nginx/access.log main_ext;
        error_log /var/log/nginx/error.log warn;

Setelah selesai, maka kita dapat melakukan monitoring melalui akun Nginx Amplify yang telah kita buat:

Kesimpulan

Nginx, selain berguna sebagai web server, juga dapat digunakan untuk menjadi load balance. Load balance ini berguna untuk membagi beban yang ditangani oleh server aplikasi atau website agar terdistribusikan secara seimbang. Sehingga server yang berada di belakang load balance tidak mengalami beban yang berlebih. Nginx juga memiliki fitur untuk melakukan monitoring yang dapat digunakan secara gratis, dengan maksimal penggunaan pada 5 server.

Tertarik mengikuti training di ID-Networkers? Kami menyediakan berbagai pilihan training yang bisa kamu ikuti, klik disini untuk info lengkapnya.

Penulis : Bazigan Tsamara Sukamto