Anda di halaman 1dari 9

KONFIGURASI DOCKER SEBAGAI LOAD BALANCER

Kali ini membahas mengenai Docker sebagai Load Balancer. Seperti yang kita tahu
bahwa load balancing adalah sebuah teknik untuk mendistribusikan beban trafik pada 2 buah
jalur atau lebih jalur koneksi agar seimbang, agar trafik berjalan optimal, memaksimalkan
throughput, dan menguhindari overload pada salah satu jalur koneksi. Load Balancing juga
mendistribusikan beban kerja secara merata di dua atau lebih komputer, link jaringan, CPU,
hardisk, ataupun sumber daya lainnya untuk mendapatkan performa yang maksimal.
Setelah memahami pengertian dari Docker, juga bagaimana cara menginstall dan
menjalankannya maka akan melakukan penerapan Load Balancing pada Docker. Konsep
yang digunakan pada kali ini adalah konsep dari High Availability. Sebenarya Docker sudah
menggunakan konsep ini pada swarm cluster. Tetapi saya tidak akan menggunakan swarm
cluster, karena saya menggunakan Nginx pada sebuah container sebagai load balancer
container yang lainnya.
Sebelum membahas mengenai apa itu Nginx, akan lebih baik jika memahami terlebih
dahulu fungsi dari web server. Salah satu komponen penting di dalam website adalah web
server. Web server berfungsi sebagai penerima request dari browser yang kemudian
memberikan tanggap dengan mengirimkan halaman situs web dalam bentuk dokumen
HTML.
Pada awal munculnya, web server ini hanya dipakai untuk server HTTP saja. Seiring
perkembangan teknologinya, sekarang Nginx juga dipakai sebagai HTTP cache, load
balancer (HTTP, TCP, dan UDP), dan server proxy (IMAP, POP3, dan SMTP). Selain
kemampuan di atas, Nginx juga dapat berjalan di berbagai macam sistem operasi, seperti
Linux, Mac OS X, HP-UX, BSD Varian, dan Solaris.
Nginx menawarkan penggunaan memori yang kecil dengan konkurensi yang tinggi.
Jadi Nginx tidak membuat proses baru ketika ada permintaan (web request), tapi ditangani di
dalam satu thread (asynchronous dan pendekatan event-driven). Jika menggunakan Nginx,
satu proses utama (master process) dapat mengontrol berbagai proses lainnya (worker
process). Jadi proses utama tetap menjalankan tugasnya sambil mengontrol proses lain yang
ada di bawahnya. Karena Nginx menggunakan asynchronous, setiap web request dapat
dieksekusi oleh proses lain tanpa mengganggu web request lainnya.
Dalam menjalankan tugasnya, Nginx juga mempunyai beberapa fitur yang dapat
dimanfaatkan untuk mendukung performa web server yang andal seperti:
 Reverse proxy dengan proses cache
 Dukungan IPv6
 Load balancing
 Dukungan FastCGI dengan proses cache
 WebSockets
 Menangani file statis, file index, dan auto-indexing
 TLS/ Sertifikat SSL dengan SNI (Server Name Indication)
Topologi yang akan digunakan seperti dibawah ini :

Dari gambar diatas dapat di lihat segala traffic HTTP yang mengarah ke node akan di
handle oleh container NGINX Load Balancer. Kemudian dari container NGINX Load
Balancer tersebut akan me-redirect traffic HTTP ke salah satu container Hello World di
node1 maupun node2. Pemilihan container Hello World mana yang akan dipakai sebagai
tujuan redirect dilakukan dengan algoritma Round-Robin. Round Robin berarti server akan
dipilih secara berurutan. Penyeimbang beban akan memilih server pertama dalam daftar
untuk permintaan pertama, lalu turunkan daftar secara berurutan, mulai dari atas saat
mencapai akhir.
Container Hello World disini adalah sebuah container yang menjalankan service
NGINX di dalamnya dengan halaman web yang berisi hanya tulisan Hello World sebagai uji
coba. Disini akan menggunakan image tutum/hello-world sebagai container Hello World.
Langkah-langkah untuk Node1
1. Download image tutum/hello-world
Dengan menggunakan command $docker pull tutum/hello-world dan tunggu sampai
proses download selesai.

2. Download image Nginx


Dengan menggunakan command $docker pull nginx dan tunggu sampai proses download
selesai.

3. Pastikan images yang di download sudah terinstall


Jalankan command $docker images untuk mengetahui list dari semua images yang
dimiliki. Dapat dilihat jika images nginx dan tutum/hello-world telah tersedia.

4. Kemudian membuat 3 container yaitu 2 container Hello World dan sebuah container
Nginx yang nantinya akan dipakai sebagai load balancer. Saat menjalankan ketiga
container nanti juga akan melakukan porting dari container ke docker host.

docker run --name con1 -p 8080:80 -di tutum/hello-world


docker run --name con2 -p 8081:80 -di tutum/hello-world
docker run --name nginx -p 80:80 -di nginx
--name con1 : Untuk memberi nama container dengan nama con1 (biasanya digunakan
untuk keperluan delete container dan lainnya)
--p 8080:80 : Untuk port forwarding, 8080 port tujuan, 80 adalah port asal aplikasi
(forward port 80 ke port 8080)

5. Pastikan container yang di buat sudah berhasil


Jalankan command $docker ps untuk mengetahui list dari semua container yang dimiliki.
Dapat dilihat jika ketiga container dengan nama nginx, con1, dan con2 telah tersedia.

6. Pastikan container yang telah kita buat dapat berjalan melalui web browser. Dengan
mengisikan alamat menggunakan alamat IP.

http://192.168.126.128
http://192.168.126.128:8080
http://192.168.126.128:8081
Jika tampilan halaman web browser sudah seperti gambar diatas yang merupakan
tampilan Nginx dan tutum/hello-world, maka container yang telah dibuat tadi berhasil
berjalan.

Langkah-langkah untuk Node2


1. Download image tutum/hello-world
Dengan menggunakan command $docker pull tutum/hello-world dan tunggu sampai
proses download selesai.

2. Kemudian membuat 2 container yaitu 2 container Hello World, saat menjalankan


container nanti juga akan melakukan porting dari container ke docker host. Jalankan
kedua command dibawah ini untuk container 1 dan container 2.
docker run --name con1 -p 8080:80 -di tutum/hello-world
docker run --name con2 -p 8081:80 -di tutum/hello-world

3. Pastikan container yang di buat sudah berhasil


Jalankan command $docker ps atau $docker container ls -a untuk mengetahui list dari
semua container yang dimiliki. Dapat dilihat jika kedua container dengan nama con1 dan
con2 telah tersedia.

4. Pastikan container yang telah kita buat dapat berjalan melalui web browser. Dengan
mengisikan alamat menggunakan alamat IP.
http://192.168.126.129:8080
http://192.168.126.129:8081
Jika tampilan halaman web browser sudah seperti gambar diatas yang merupakan
tampilan tutum/hello-world, maka container yang telah dibuat tadi berhasil berjalan.

Kembali pada Node1 untuk konfigurasi Nginx


1. Masuk ke container Nginx
Untuk bisa mengkonfigurasi container, terlebih dahulu masuk ke container yang
diinginkan. Pada nginx dengan meggunakan command $docker exec -ti nginx /bin/bash,
maka akan terlihat sepeti dibawah ini :

2. Edit teks pada file /etc/nginx/conf.d/default.conf


Edit teks dapat dilakukan menggunakan editor teks yang sudah dimiliki, disini
menggunakan nano.

Kemudian tuliskan teks dibawah ini pada file tersebut.


upstream servers {
server 192.168.126.128:8080;
server 192.168.126.129:8080;
server 192.168.126.128:8081;
server 192.168.126.129:8081;
}
server {
listen 80;
location / {
proxy_pass http://servers;
}
}
Selanjutnya simpan file tersebut dan keluar dari editor nano, maka akan kembali ke
container nginx. Tuliskan “exit” untuk keluar dari container yang sedang aktif.

3. Restart container Nginx


Setelah melakukan konfigurasi disarankan untuk me-restart Nginx.

Untuk mengecek apakah load balancing yang sudah dibuat berhasil atau belum buka
alamat http://192.168.126.128 pada web browser. Kemudian lakukan beberapa kali refresh
pada browser, maka otomatis halaman website IP address tersebut akan berganti hostname.
Tampilan pada saat menjalankan alamat IP 192.168.126.128 pada browser, mendapatkan
hostname 9fc0a79911d5.
Tampilan halaman saat setelah di refresh pertama kali, mendapatkan hostname 31af4c1a4c8d.

Tampilan halaman saat setelah di refresh kedua kali, mendapatkan hostname cb85c9fdadf7.

Tampilan halaman saat setelah di refresh ketiga kali, mendapatkan hostname c53ef92479e8.

Anda mungkin juga menyukai