Server Load Balancer with RYU
Pada skenario dunia nyata, sebuah layanan web server biasanya memiliki pool of servers untuk menangani masalah seperti network bandwidth, limitasi hardware & software, utilisasi, dsb. Pool of servers ini kemudian akan dihubungkan kepada suatu load balancer untuk menentukan server mana yang akan menangani request yang datang pada suatu waktu. Pada proyek ini kami membuat aplikasi load balancer berbasis SDN. OpenFlow switch yang terhubung dengan RYU SDN Controller akan bertindak sebagai load balancer untuk web server. Ide dari aplikasi load balancer yang kami buat adalah menggunakan virtual ip untuk mengakses layanan server, OVS akan melakukan DNAT dan SNAT untuk setiap HTTP request (TCP traffic) antara client dan server, selain itu OVS juga akan melakukan load balancing dengan policy round robin dimana server akan bergantian untuk melayani request dari client. Topologi yang kami buat menggunakan 7 buah hosts, 1 OVS, dan 1 controller dimana 3 host bertindak sebagai server dan 4 host bertindak sebagai client. Dari hasil percobaan, aplikasi load balancer yang kami buat berhasil melakukan DNAT dan SNAT untuk setiap TCP traffic dan juga berhasil melakukan load balancing dengan merutekan tiap permintaan kepada server yang berbeda.
Trafik website modern harus dapat melayani ratusan ribu hingga jutaan concurrent requests dari pengguna atau clients dan harus dapat mengembalikan tipe data (video, gambar, text) sesuai dengan yang diminta secara cepat dan reliable. Untuk menangani ini, website modern biasanya menggunakan beberapa server untuk menyediakan suatu layanan. Sebuah load balancer bertindak sebagai gateway untuk sebuah server yang berfungsi untuk merutekan permintaan client ke seluruh server yang mampu melayani permintaan tersebut, selain itu load balancer juga berfungsi untuk memaksimalkan kecepatan dan utilisasi kapasitas dan memastikan tidak ada server yang overwork atau hal lainnya yang dapat menurunkan performa dari layanan yang disediakan. Jika ada server yang down pada pool of servers, load balancer akan mengalihkan trafik ke server lain yang tersedia.
Ide dari aplikasi yang kami buat adalah : Arsitektur load balancing terdiri dari 3 buah server yang terhubung ke sebuah load balancer yang merupakan sebuah OpenFlow switch untuk merutekan trafik dari client ke server dan sebaliknya. Request yang diterima oleh load balancer akan dirutekan ke salah satu server yang tersedia menggunakan policy round robin. Load balancer memiliki Virtual IP sehingga client yang ingin meminta layanan dari server akan mengirimkan request ke virtual IP ini, bukan ke alamat IP server yang sebenarnya. Load balancer merutekan kembali trafik dengan melakukan DNAT dan SNAT.
Program dibuat dengan menggunakan program SimpleSwitch13 sebagai dasar. SimpleSwitch13 berfungsi untuk menambahkan tabel miss-flow entry dan memetakan port dengan MAC address. Semua IP address dari ketiga server yang tersedia dimasukkan ke dalam source code, IP address virtual dan MAC address virtual juga didefinisikan dalam source code. 2 hal utama yang dikerjakan pada aplikasi adalah : Menangani ARP request yang ditujukan kepada virtual IP address. Melakukan DNAT pada trafik datang (request) dari client dan SNAT pada trafik keluar (response) dari server khusus untuk HTTP request (TCP).
Saat client hendak mengirimkan request yang ditujukan ke alamat IP virtual, client akan mengirimkan ARP request terlebih dahulu untuk memetakan alamat MAC dan port dari IP virtual tersebut. Load balancer akan men-generate ARP response secara manual untuk menangani ARP request yang ditujukan ke alamat IP virtual ini. Setelah client menerima ARP response, maka client baru dapat mengirimkan HTTP request kepada alamat virtual tersebut. Saat load balancer (OVS) menerima paket ini maka akan dibuat tabel dengan aksi set field yang berfungsi untuk mengganti alamat tujuan (DNAT) dari alamat virtual ke alamat asli server sehingga paket dapat diteruskan ke server. Saat melakukan DNAT, load balancer akan memilih salah satu server dari pool dengan policy round-robin. Server kemudian akan mengirimkan response sesuai dengan request yang diterima. Saat load balancer menerima paket response ini maka akan dibuat tabel baru dengan aksi set field untuk mengganti alamat asal (SNAT) dari alamat asli server ke alamat virtual. Hal ini perlu dilakukan agar paket dapat diterima oleh client yang meminta layanan server.
Project Author(s)
Afif Tri Farhan (18117028), Galih Fajar Fitra Ady (18117013)