Wednesday, July 22, 2015

Load Balancing Web Server dengan Haproxy Layer 4

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.
Disebut load balancing layer 4 (transport layer) dikarenakan pembagian traffic nya berdasarkan ip address dan port. Berikut adalah topologinya :
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 :
  • 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

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
}

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 :

  • 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
                                            






12 comments:

  1. Bagus sekali artikelnya, tapi saya masih newbie. Yang saya tanyakan apabila databasenya postgres bagaimana, apakah sama cara penggunaanya? untuk hardware load balancing apakah hanya digunakan sebagai load balancer atau bisa sekaligus digunakan sebagai server. Saya masih bingung hehehe. Boleh diskusi by email mas. terima kasih

    ReplyDelete
    Replies
    1. Untuk menggunakan postgresql, anda perlu merubah script php yang saya berikan di artikel, selain daripada itu sama.

      saya belum pernah menemukan load balancer sekaligus server, dan saya tidak pernah mengkonfigurasi seperti yang anda sebutkan

      sepengetahuan saya idealnya load balancer tidak berfungsi sebagai server

      jika anda ingin menambahkan funsionalitas terhadap hardware load balancer, anda bisa gunakan hardware load balancer tersebut sebagai reverse proxy untuk caching ...

      Delete
  2. Saya masih awam dalam hal ini . Yg ingin saya tanyakan apabila saya ingin membangun server dengan load balancing disini saya ada 2 buah server yg masing " server ter install virtual server yg berbeda dan pada tiap mesin terdapat dua virtual mesin untuk itu bagaimana saya bisa mengkofigurasi load balancing pada ke dua server tersebut

    ReplyDelete
    Replies
    1. Wah maaf gan, saya belum maenan virtual server atau cloud server, jadi saya ga paham ...

      Delete
  3. Main sabung ayam online di Situs Terpercaya Saja Dijamin Pasti Bayar !

    ReplyDelete
  4. gan, Saya Ngerti nih Untuk Peluang Memenangkan Game Online Dengan Cara Daftar Dan Mendapatkan Give Untuk Bermain DI bolavita.pw >> Pasti Binggung nih, Mari Merapat Bersama Bolavita Terpercaya DI Indonesia >> BBM: BOLAVITA >> Wa: 081377055002 >> Terima Kasih Gan Sudah Memberikan Waktu'a (^_^)

    ReplyDelete
  5. bisa dibuatkan versi tutorial video dari setup awal hingga akhir nggak gan ? biar lebih jelas lagi. terima kasih

    ReplyDelete

dilarang berkomentar menggunakan kata-kata yang tidak pantas... !!!