Tutorial Konfigurasi Load Balancing dengan Nginx

Thursday, July 6, 2017

Hallo.. sesuai janji saya, pada tutorial kali ini saya akan membahas mengenai load balancing. Apa sih load balancing ? Terus fungsinya apa? Seberapa pentingkah ?
Load Balancing merupakan suatu mekanisme yang digunakan untuk distribusi lalu lintas data yang masuk ke dalam sebuah server. Untuk nginx open source, algoritma Round Robin merupakan yang paling populer digunakan untuk mengirimkan pengguna ke salah satu IP yang sulit ditentukan. Jadi jika terjadi banyak request dari user, maka server tidak begitu terbebani.

Buat yang masih bingung, coba kalian lihat gambar diatas. Jadi gampang nya, load balancer yang dalam tutorial ini menggunakan nginx adalah front end, sementara back end nya sendiri terdiri dari beberapa server. Nah, saat pengguna mengakses situs yang menggunakan load balancing, dia akan dikirim ke salahsatu backend yang tersedia, jika ada user lain yang mengakses situs tersebut, akan dialihkan lagi ke backend yang berbeda. begitu seterusnya sehingga untuk situs dengan pengunjung yang banyak kerja dari webserver tidak akan berat karena yang menangani trafik sudah terbagi bagi ke beberapa backend webserver.

Ya tentu saja dari gambaran diatas semuanya adalah webserver yang kita kelola, tidak bisa loh ya kalo front end pake blogger terus backend nya di deep web. ntar ngaco lagi kayak moencode.

Oke biar gak bingung langsung saja ke tutorial ya.
Biar mudah langsung saya kasih nama saja satu satu ya untuk inisialisasi servernya.

front.linuxsec.org - 192.168.1.6 (front end, menggunakan webserver nginx, sebagai load balancer)
srv1.linuxsec.org - 192.168.48.8 (back end server pertama, menggunakan nginx webserver)
srv2.linuxsec.org - 192.168.48.2 (back end server kedua, menggunakan nginx webserver)

Oke jadi kita menggunakan backend nya nginx juga. Bisa saja sih pakai apache atau lainnya, silahkan gunakan webserver favorit kalian. Namun untuk load balancer, kita gunakan nginx.

Untuk setup backend webserver, saya skip saja karena ini cuma setup webserver nginx biasa Tinggal setup nginx, serverblock, php dll. Bisa kalian baca disini :

Nah untuk yang front end, berikut settingan server block nya.
upstream loadbalance {
       srv1.linuxsec.org;
       srv2.linuxsec.org;
}
server {
       listen 80;
       server_name front.linuxsec.org ;
       error_log /var/log/nginx/error.log crit;
       access_log off;
       location / {
              proxy_pass http://loadbalance;
       }
}
Nah, jika menggunakan trafik HTTPS, berikut konfigurasinya :
upstream loadbalance {
       srv1.linuxsec.org;
       srv2.linuxsec.org;
}
server {
        listen          80;
        server_name     front.linuxsec.org;
        return          301  https://$server_name$request_uri;
}
server {
        listen 443 ssl;
        server_name front.linuxsec.org;
        ssl on;
        ssl_certificate /lokasi_sertifikat/ssl/fullchain.pem;
        ssl_certificate_key /lokasi_sertifikat/ssl/privkey.pem;
        ssl_prefer_server_ciphers on;
        error_log /var/log/nginx/error.log crit;
        access_log off;
        location / {
               proxy_pass http://loadbalance;
        }
 }
Jika masih bingung dengan pemasangan sertifikat SSL di Nginx bisa baca tutorial berikut :

masih belum paham? Oke, kita kasih contoh langsung nya.
Di direktori webserver srv1.linuxsec.org kita buat file index dengan isi sebagai berikut
<h1> srv1.linuxsec.org</h1>
Nah di srv2.linuxsec.org pun kita buat index dengan isi
<h1> srv2.linuxsec.org</h1>

Sekarang coba akses front.linuxsec.org .
Sekarang reload lagi. Maka tampilannya akan berubah.
Sekarang sudah paham kan? Ya begitulah kerja dari load balancing. Jadi jika situs kamu memiliki banyak pengunjung maka trafik akan dibagi ke server backend yang kalian sediakan. Ya tentu saja server backend harus memiliki isi yang sama , tampilan yang sama. Contoh diatas saya buat beda cuma biar kalian tau kalau sebenarnya kita mengakses server berbeda dari front end (load balancer) nya.

Lalu bagaimana untuk siitus ber database ? Untuk situs berdatabase kita gunakan remote database. jadi hanya ada satu database yang digunakan bersama oleh beberapa backend server. Tutorialnya bisa kamu baca disini :

Oke sekarang load balancing kalian sudah siap. Kalian bisa test dengan mematikan salahsatu backend. Maka server akan tetap hidup karena masih ada backend satunya.
Metode Load Balancing
Nah sekarang kita akan membahas lebih dalam mengenai metode metode load balancing di Nginx.
Load balancing dengan nginx menggunakan algoritma round-robin secara default, jika tidak ada metode lain yang didefinisikan, seperti pada contoh pertama di atas. Dengan skema round-robin setiap server dipilih secara bergantian.

Yang kedua adalah metode Least connections. Seperti namanya, metode ini mengarahkan permintaan ke server dengan koneksi paling tidak aktif pada saat itu. Ini bekerja lebih adil daripada round-robin dimana permintaan ke server terkadang memerlukan waktu lebih lama untuk menyelesaikannya.

Untuk mengaktifkan metode penyatuan koneksi paling sedikit tambahkan parameter least_conn ke upstream.
upstream loadbalance {
       least_conn;
       srv1.linuxsec.org;
       srv2.linuxsec.org;
}

Selanjutnya adalah ip hashing.  Jika aplikasi webmu mengharuskan pengguna diarahkan ke server back-end yang sama seperti pada koneksi sebelumnya, kita harus menggunakan metode hashing IP. IP hashing menggunakan alamat IP pengunjung sebagai kunci untuk menentukan host mana yang harus dipilih ke server permintaan. Hal ini memungkinkan para pengunjung untuk setiap kali diarahkan ke server yang sama, asal server tersebut tersedia dan alamat IP pengunjung tidak berubah.
upstream loadbalance {
       ip_hash;
       srv1.linuxsec.org;
       srv2.linuxsec.org;
}
Nah yang terakhir berlaku jika spesifikasi server backend tidak sama. Nah jika trafik dibagi samarata tidak adil dong, server dengan spek kecil bakal kerja lebih berat sementara server dengan spesifikasi diatasnya bakal berasa nganggur. Dalam kasus ini misal srv1.linuxsec.org memiliki spesifikasi lebih tinggi dan saya akan mengatur agar load balancing mengarahkan beban trafik lebih banyak ke srv1.linuxsec.org .
upstream loadbalance {
       srv1.linuxsec.org weight=4;
       srv2.linuxsec.org weight=2;
}
Oke sekian tutorial kali ini, jika ada kesalahan mohon dikoreksi. Jika ada yang ingin ditanyakan silahkan komentar.

Another Cool Stuff

Artikel Terkait Nginx ,Server

3 comments:

  1. Saya mau tnya nii,, kebtulan bbrpa hari yg lalu sya buat load balance menggunakan nginx dn sdh cba dri bbrpa artikel.. tpi saya mndptkan bbrp kendla. Mungkin di linuxsec bisa membantu saya.

    Kasusnya : saya mau menambahkan uri path pada domain url contoh:(domain.com/path)
    Nah ketika saya tambahkan /path maka akan diarahkan ke server backend sesuai yg sdh diset untuk menanganinya,, kendalanya adalah ketika saya terapkan malah menjadi direct link (link url berubah ke domain yang ada di server backend jdinya domain11.com/abc/def)

    Nah kira" bagaimana ya caranya agar tidk direct link,, dn yg saya mau sprti yg saya sebutkan tdi bisa berjalan. ??

    Terima kasih

    ReplyDelete
    Replies
    1. hmm.. saya malah belum coba. bagaimana jika dibuat rule rewrite / redirect dari backend ke url load balancer nya ?

      nanti saya coba deh cari solusinya.

      Delete
    2. ok ,, ditunggu kerja samanya mas,, saya juga lagi berusaha ngakalinnya ini.

      Delete