Selama ini
orang selalu menganggap bahwa membuat cluster load
balancing adalah hal yang rumit dan memusingkan. Dan.. memang benar
pendapat ini. Tapi sebenarnya ada satu cara mudah untuk mencapainya
dengan menggunakan yang namanya balance.
Sebelumnya kita bahas dahulu sedikit
mengenai konsep Clustering. Secara prinsip clustering
mempunyai 2 buah pendekatan:
1. High Availability (Failover), adalah bila satu
server gagal melayani service tertentu, maka tugas server tersebut
otomatis akan dilempar ke server lainnya.
2. High throughput (Performance), disini yang
diinginkan adalah performance yang tinggi yang dicapai dengan "membagi2"
tugas yang ada ke sekumpulan server. Contohnya adalah:
2a. High-performance Computing (HPC), adalah sekumpulan server yang
bekerja bersama-sama pada saat yang bersamaan untuk mengerjakan sesuatu
tugas tertentu, biasanya dalam bentuk tugas perhitungan yang berat2,
seperti simulasi bumi, me-render film animasi, dll.
2b. Load Balancing, adalah membagi2 beban kerja ke sekumpulan server
diluar konteks computing, misalnya membagi beban kerja web server, mail
server, dll.
Bagaimana mencapai hal ini?
Ada beberapa software opensource yang dapat kita gunakan:
1. Linux High-Availability (http://www.linux-ha.org)
2. RedHat Cluster Suite dan Piranha (http://www.redhat.com)
3. Linux Virtual Server (http://www.linuxvirtualserver.org)
4. BeoWulf Cluster (http://www.beowulf.org)
5. Openmosix (http://openmosix.sourceforge.net)
Namun solusi2 di atas kadang kala terlalu "canggih" atau "overkill"
untuk mencapai tujuan clustering kita. Disinilah 'balance' masuk. Apa
yang dapat ia sediakan?
1. Merupakan user-space program. Tidak perlu compile
kernel dll. Langsung jalan secara command line.
2. Load balancing secara tcp. Cukup menyebutkan
protocol atau port tcp berapa yang ingin kita load balancing.
Cara setup:
1. Download paketnya dari http://www.inlab.de/balance.html
wget http://www.inlab.de/balance-3.40.tar.gz
2. Extract, compile dan install:
2a. tar zxvf balance-3.40.tar.gz
2b. cd balance-3.40
2c. vi Makefile
Ubah baris ini: MANDIR=${BINDIR}/../man/man1
Menjadi: Untuk Ubuntu: MANDIR=/usr/share/man/man1
Untuk RedHat: MANDIR=/usr/local/share/man/man1
2d. make
2e. make install
Done! :)
Cara pakai:
Sebelumnya kita misalkan skenario seperti ini:
Kita mempunyai sebuah website yang ingin kita bagi beban kerjanya ke 3
buah server web. Maka kita perlu mensetupnya seperti terlihat di gambar
(Oya, gambarnya adalah foto PC zaman dulu, tapi itu hanya ilustrasi yah,
nanti servernya jangan pakai PC zaman dulu juga. Hehe...). Tiga buah
server web yaitu www1 (192.168.0.1), www2 (192.168.0.2), dan www3
(192.168.0.3). Di depan mereka kita install sebuah server
(192.168.0.254) yang bertugas membagi2 bebas kerja para server www
tersebut. Jadi IP yang akan diakses oleh user adalah IP 192.168.0.254,
jangan ke masing2 server www.

Commandnya: (Jalankan command ini di 192.168.0.254) balance
Bila diketik tanpa option dia akan muncul seperti ini:
_ _
| |__ __ _| | __ _ _ __ ___ ___
| '_ \ / _` | |/ _` | '_ \ / __/ _ \
| |_) | (_| | | (_| | | | | (_| __/
|_.__/ \__,_|_|\__,_|_| |_|\___\___|
this is balance 3.40
Copyright (c) 2000-2006,2007
by Inlab Software GmbH, Gruenwald, Germany.
All rights reserved.
usage:
balance [-b addr] [-B addr] [-t sec] [-T sec] [-adfpHM] \
port [h1[:p1[:maxc1]] [!%] [ ... hN[:pN[:maxcN]]]]
balance [-b addr] -i [-d] port
balance [-b addr] -c cmd [-d] port
-a enable channel autodisable option
-b host bind to specific address on listen
-B host bind to specific address for outgoing connections
-c cmd execute specified interactive command
-d debugging on
-f stay in foregound
-i interactive control
-H failover even if Hash Type is used
-M use MMAP instead of SHM for IPC
-p packetdump
-t sec specify connect timeout in seconds (default=5)
-T sec timeout (seconds) for select (0 => never) (default=0)
! separates channelgroups (declaring previous to be Round
Robin)
% as !, but declaring previous group to be a Hash Type
examples:
balance smtp mailhost1:smtp mailhost2:25 mailhost3
balance -i smtp
balance -b 2001:DB8::1 80 10.1.1.1 10.1.1.2
balance -b 2001:DB8::1 80
Jadi cara pakainya adalah misalnya:
balance -f http 192.168.0.1 192.168.0.2 192.168.0.3
Option -f itu artinya balance jalan di foreground, berguna untuk kita
debug dan cancel. Kalau misalnya sudah ok, bisa kita jalankan tanpa
option -f, maka balance akan jalan di background.
Untuk melihat cara bekerja balance adalah dengan membuka sebuah terminal
dan meload website 192.168.0.254 secara berulang2. Untuk mudahnya dapat
kita gunakan text browser seperti elinks:
watch elinks --dump http://192.168.0.254
Untuk kebutuhan testing, dapat kita atur agar isi website di
192.168.0.1, 192.168.0.2, dan 192.168.0.3 berbeda, jadi command di atas
akan menampilkan isi website yang berbeda, tanda bahwa balance sudah
meload balancing traffik web ke tiga buah server tersebut.
Contoh lain adalah:
balance -f http 192.168.0.1::100 ! 192.168.0.2::100 !
192.168.0.3
Arti option di atas adalah: koneksi http akan diprioritaskan ke server
192.168.0.1 sampai sebanyak 100 koneksi, bila sudah penuh maka akan
dilempar ke 192.168.0.2 sampai sebanyak 100 koneksi juga, sisanya akan
ke 192.168.0.3
Bagaimana jika kita ingin menghandle koneksi yang memerlukan session
seperti website dynamic pakai php? Hal ini bisa dicapai dengan option
'%' yaitu mengaktifkan session seperti ini:
balance -f http 192.168.0.1 192.168.0.2 192.168.0.3 %
Untuk option2 selengkapnya dapat kita lihat di 'man balance'.
Apakah hanya dapat digunakan untuk akses http? Tentu tidak, dengan
sedikit eksplorasi kita dapat pula menggunakannya untuk keperluan lain
seperti load balancing akses internet, email, proxy, dll.
Penutup
Program balance ini menyediakan sebuah solusi praktis dan mudah untuk
membuat sebuah cluster load balancer. Performance yang dihasilkan cukup
bagus. Namun bila kita ingin menggunakan solusi yang lebih handal, kita
dapat menggunakan LVS (linux virtual server) dengan kombinasi linux-ha.
Namun tentu saja settingannya akan jauh lebih rumit. Kita akan
membahasnya di lain kesempatan. Selamat mencoba :)
|