Load Balance dalam jaringan komputer adalah teknik untuk membagi beban (load) ke dalam beberapa jalur atau link. Tujuan dari load balance ini agar tidak ada link yang mendapat beban yang lebih besar dari pada link lainnya. Diharapkan dengan membagi beban ke dalam beberapa link tersebut, maka akan tercapai keseimbangan (balance) pada link-link tersebut.
Ada beberapa macam implmentasi load balance yang sering dijumpai di lampangan. Pada artikel ini, saya akan menjelaskan load balance pada web server yang dimana haproxy sebagai load balancer nya (yang membagi jalur). Ada 2 macam load balance pada web server, yaitu Layer 4 (transport layer) dan Layer 7 (application layer). Disini kita hanya akan membahas load balancer pada layer 4 saja.
Bisa dilihat bahwa user mengakses load balancer nya yang dalam hal ini kita menggunakan haproxy kemudian load balancer akan melanjutkannya ke web server berdasarkan ip address dan port menggunakan algoritma tertentu. Pada artikel ini saya menggunakan ALGORITMA ROUND ROBIN. Algoritma round robin termasuk algoritma pre-emptive, round robin memilih server secara bergilir. Yang kita butuhkan pada artikel ini adalah sebagai berikut (saya menggunakan ubuntu server) 12.04 32 bit :
Ada beberapa macam implmentasi load balance yang sering dijumpai di lampangan. Pada artikel ini, saya akan menjelaskan load balance pada web server yang dimana haproxy sebagai load balancer nya (yang membagi jalur). Ada 2 macam load balance pada web server, yaitu Layer 4 (transport layer) dan Layer 7 (application layer). Disini kita hanya akan membahas load balancer pada layer 4 saja.
Disebut load balancing layer 4 (transport layer) dikarenakan pembagian traffic nya berdasarkan ip address dan port. Berikut adalah topologinya :
- 1 Load Balancer = ubuntu server 12.04 dengan haproxy (192.168.56.1)
- 2 web server = apache/nginx
- web sever1 = 192.168.56.2
- web server2 =192.168.56.3
- 1 database server = percona server/mysql/mariaDB (192.168.56.4)
- client = saya menggunakan linux ubuntu 14.04 (192.168.56.11)
Konfigurasi ubuntu server sebagai load balancer :
Install haproxy :
apt-get install haproxy
Enable haproxy :
rubah option ENABLE menjadi 1 di /etc/default/haproxy
Konfigurai haproxy :
letak file konfigurasi haproxy /etc/haproxy/haproxy.cfg. Isikan konfigurasi berikut
global
log /dev/log local0 #lelak log akan ditulis
log 127.0.0.1 local1 notice
maxconn 4096 #jumlah koneksi yang diijinkan pada front-end (load balancer)
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3 #menetapkan jumlah retries
option redispatch #memungkinkan redistribusi jika terjadi kegagalan koneksi
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webfarm 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin #algoritma yang digunakan
option httpclose #jika layer option ini akan menjadi mode http
option forwardfor
server webserver01 192.168.56.2:80 check #webServer1
server webserver02 192.168.56.3:80 check #webServer2
Install haproxy :
apt-get install haproxy
Enable haproxy :
rubah option ENABLE menjadi 1 di /etc/default/haproxy
Konfigurai haproxy :
letak file konfigurasi haproxy /etc/haproxy/haproxy.cfg. Isikan konfigurasi berikut
global
log /dev/log local0 #lelak log akan ditulis
log 127.0.0.1 local1 notice
maxconn 4096 #jumlah koneksi yang diijinkan pada front-end (load balancer)
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3 #menetapkan jumlah retries
option redispatch #memungkinkan redistribusi jika terjadi kegagalan koneksi
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webfarm 0.0.0.0:80
mode http
stats enable
stats uri /haproxy?stats
balance roundrobin #algoritma yang digunakan
option httpclose #jika layer option ini akan menjadi mode http
option forwardfor
server webserver01 192.168.56.2:80 check #webServer1
server webserver02 192.168.56.3:80 check #webServer2
Konfigurasi ubuntu server untuk web server dengan NGINX
Install nginx :
apt-get install nginx
Install php5
apt-get install php5-fpm php5-mysql
Install mysql/percona client
untuk mysql client :
apt-get install mysql-client
untuk percona client (secara default tidak tersedia pada repository ubuntu) :
apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
repository percona server (replace VERSION dengan versi ubuntu) :
deb http://repo.percona.com/apt VERSION main
deb-src http://repo.percona.com/apt VERSION main
install percona client :
apt-get update
apt-get install percona-server-client-5.5
Pada tahap ini kita sudah bisa mengetest apakah haproxy sudah dapat bekerja atau belum dengan cara mengakses haproxy dari client. Berikut adalah screen shoot nya :
Perhatikan ip yang di akses adalah ip load balancer (192.168.56.1), bukan ip web server.
Konfigurasi nginx
konfigurasi ini dilakukan agar nginx mengeksekusi file .php, jika tidak dilakukan maka nginx akan mendownload file .php ketika dibuka.
Edit file /etc/nginx/sites-enable/default
uncoment bagian ini
server {
listen 80; ## listen for ipv4; this line is default and implied
listen [::]:80 default ipv6only=on; ## listen for ipv6
konfigurasi ini dilakukan agar nginx mengeksekusi file .php, jika tidak dilakukan maka nginx akan mendownload file .php ketika dibuka.
Edit file /etc/nginx/sites-enable/default
uncoment bagian ini
server {
listen 80; ## listen for ipv4; this line is default and implied
listen [::]:80 default ipv6only=on; ## listen for ipv6
}
tambahkan index.php pada bagian ini
root /usr/share/nginx/www;
index index.html index.htm index.php;
selanjutnya nya pass the PHP scripts to FastCGI server
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
Edit file /etc/php5/fpm/php.ini
cari tulisan cgi.fix_pathinfo, rubah menjadi cgi.fix_pathinfo=0
Edit file /etc/php5/fpm/pool.d/www.conf
kata listen=, harus berisi listen = 127.0.0.1:9000
Restart nginx dan php5-fpm
/etc/init.d/nginx restart
/etc/init.d/php5-fpm restart
UNTUK UBUNTU 12.10 KE ATAS :
REPLACE 127.0.0.1:9000 MENJADI unix:/var/run/php5-fpm.sock
Upload script php ke folder /usr/share/nginx/www/
saya sudah buat contoh script php nya, bisa download di sini
Konfigurasi ubuntu server menjadi database server dengan PERCONA SERVER
Install percona server
add key
apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
add repository di /etc/apt/sources.list (replace VERSION dengan versi ubuntu)
deb http://repo.percona.com/apt VERSION main
deb-src http://repo.percona.com/apt VERSION main
apt-get update
apt-get install percona-server-server-5.5 percona-server-client-5.5
Konfigurasi percona database agar bisa diakses dari luar
Buat user untuk webServer1 dan webServer2
create user 'webServer1'@'192.168.56.2' identified by 'root';
grant all privileges on *.* to 'webServer1'@'192.168.56.2';
create user 'webServer2'@'192.168.56.3' identified by 'root';
grant all privileges on *.* to 'webServer2'@'192.168.56.3';
Jika kalian menggunakan contoh script yang saya kasih, lakukan perintah sql ini
Buat database
create database webserver;
Buat table
use webserver;
create table mahasiswa(
NPM int(10) not null primary key,
Nama varchar(20) not null,
Alamat varchar(30) not null);
NOTE : LIHAT SCRIPT, JIKA ADA SESUAIKAN HOSTNAME, DBNAME, USERNAME, PASSWORD YANG DIGUNAKAN
Tes Load Balancing, berikut adalah screen shoot nya. Konten dari web server akan sama karna keduanya mengakses database server yang sama.
Selesai, terima kasih sudah membaca artikel saya. Mohon maaf apabila ada kesalahan, mohon dikoreksi jika berkenan.
referensi :
referensi :
- mikrotik kungfu kitab 2
- https://www.howtoforge.com/tutorial/ubuntu-load-balancer-haproxy/
- https://www.digitalocean.com/community/tutorials/an-introduction-to-haproxy-and-load-balancing-concepts
- http://stackoverflow.com/questions/25591040/nginx-serves-php-files-as-downloads-instead-of-executing-them
- https://www.percona.com/doc/percona-server/5.5/installation/apt_repo.html