Showing posts with label haproxy. Show all posts
Showing posts with label haproxy. Show all posts

Tuesday, February 28, 2017

Load Balancing Web Server dengan Haproxy Layer 4

http://rizalubuntu.blogspot.co.id/2015/07/load-balancing-web-server-dengan.html

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

load balancing web server dengan haproxy

http://dhenandi.web.id/load-balancing-web-server-dengan-haproxy/



oke


Bismillahirrahmannirahim,
Hari ini saya menjadi assisten presentasi untuk Gathering/Kopdar Excellent Insight yang membahas Load Balancing dengan HAProxy kemudian disambungkan dengan replikasi database. Menurut saya sangat seru sekali belajar materi ini, karena mungkin mahal harganya :-D. Kenapa saya bilang mahal ?? Materi ini digunakan untuk server-server skala besar.

What is The Meaning of Load Balance ??

Jieh, sekali-kali sok lah pake Bahasa linggis ðŸ˜€ wkwk. Dari judulnya aja udah keren, apa sih load balance itu ?? Load balancing adalah sebuah konsep menyeimbangkan beban pada server . Itu initiya. Jika semakin besar jaringan maka semakin besar pula traffic yang didapatkan dan Load balancer berperan sebagai solusi dari masalah tersebut.
Masih ga ngerti??. Kita ambil contoh sebuah website yang memiliki traffic tinggi seperti detik.com atau Kompas.com atau yang lainnya ðŸ˜€. Jika hanya mempunyai Satu webserver saja sementara pengunjungnya banyak maka website tersebut akan mengalami collapse / down. Contoh kedua kita ambil saja website SNMPTN atau pendaftaran mahasiswa ke perguruan tinggi, ketika calon mahasiswa melakukan pendaftaran di seluruh Indonesia secara bersamaan maka terdesak pula si website tersebut dan load balance berguna agar membagi traffic tersebut kepada masing-masing server yang ada dijaringan.
Masih ga ngerti juga ?? Ambil saja contoh nyatanya. Ketika anda ke sebuah Bank besar, pasti banyak nasabah-nasabah yang mempunyai tujuan di bank tersebut. Maka banyak pula teller-teller yang ada di bank tersebut. Bayangkan saja jika Bank tersebut memiliki pengunjung 1000 per hari (Banyak banget wkwkw) namun hanya ada satu teller yang melayani para nasabah. Apa yang terjadi ?? yah “If you Know What I Mean“. Si Teller itu malah jadi bener-bener Teler :-D. Kalau di ibaratkan nasabah itu “pengunjung“, Teller itu “server“. Maka si Teller di Load Balancing menjadi banyak tidak hanya 1 agar dapat melayani nasabah-nasabah yang ada secara efektif.

Teknik Load Balancing

Karena ilmu saya masih cetek kaya kolam ikan, yang saya ketahui dari teknik load balancing ada 2. Mungkin jika ada yang mau menambahkan silahkan hubungi saya :-D. Teknik Load Balancing ada 2 yaitu :
  1. RoundRobin

    Teknik RoundRobin adalah dengan cara menganggap bahwa semua beban server sama, jadi setiap server yang ada di akses secara bergantian dan berurutan. Salah satu kekurangan Teknik ini yaitu apabila ada server yang mati maka RoundRobin akan tetap mengakses server tersebut.
  2. Least Connection

    Beda halnya dengan RoundRobin, Teknik LeastConnection lebih hebat karena akan mengalihkan beban ke server yang dianggap kosong atau trafficnya rendah.

Trus Gimana ??

Gimana apanya ðŸ˜€ ??. Banyak cara untuk melakukan load balancing seperti GlusterFS, DRBD atau yang lainnya, namun saya lebih percaya dengan HAProxy. HAProxy menawarkan solusi Load Balancing yang cukup handal dan sudah di Implementasikan. Salah satu keuntungan menggunakan HAProxy yaitu dapat melayani semua port TCP yang ada lain halnya dengan DRBD yang hanya melayani port 80 saja.

Fitur HAProxy

  1. Dapat di buat Master-Slave, jadi ada 2 Load Balancing yaitu master dan slave. Jika Load Balancing Master mati maka dapat menggunakan Load Balancing Slave.
  2. Support Load Balancing untuk beberapa server.
  3. Jika server mati otomatis trafik nya pun dihentikan.
  4. Support banyak service seperti Email, Database dll.
  5. Ada Statistik yang dapat dipantau oleh SysAdmin secara mudah

Instalasi HAProxy

  1. Topologi
oke
Instalasi HAProxy dapat di install pada distro linux server seperti Ubuntu, SLES, atau CentOS, dalam hal ini saya menggunakan SLES sebagai sistem operasinya.
Jika menggunakan SUSE, haproxy dapat di install menggunakan repo SUSE build service yaitu padahttp://software.opensuse.org/. dan menambahkan repository kedalam SLES.
Menggunakan ubuntu :
Menggunakan CentOS / RedHat :

Konfigurasi HAProxy

Secara default konfigurasi HAProxy terdapat pada /etc/haproxy/haproxy.cfg. Saya sudah menyiapkan skrip untuk HAProxy. Jalankan perintah berikut :
Tambahkan skrip berikut :
Oke jika sudah restart service dari HAProxy :

Simulasi Load Balancing

Pastikan kedua Web Server sudah berjalan dengan baik, sebagai contoh pembuktian coba bedakan identitas di server pertama dan kedua. Jalankan perintah berikut :
Pada Web server 1 :
Pada Web server 2 :
Buka Web browser dengan mengakses IP HAProxy, refresh terus jika tampilannya berbeda seperti berikut maka load balancing sudah berjalan dengan baik :
alpha-oke








bravo-oke





Banyak yang bertanya sampai saya bosen. KOK TAMPILANNYA BEDA MAS ??? Ini bisa disesusaikan. Sebagai pembuktian saja agar load balancingnya berjalan atau tidak. Jika tampilannya sama tidak akan ketahuan apakah load balancing sudah berjalan dengan semestinya :-). Agar di kedua sisi server sama bisa dilakukan sinkronisasi di kedua server dengan menggunakan rsync atau lainnya.

Penutup

Saya berharap tutorial ini dapat membantu rekan-rekan yang membutuhkannya, Jika ada kesalahan saya mohon maaf. Saya berharap komentar dari rekan-rekan demi kemajuan blog ini :-).