Pengen Punya WebSite instan kualitas intan ?

Friday, May 27, 2011

Load Balancing dengan Nginx

Load Balancing

Load balancing adalah sebuah konsep yang gunanya untuk menyeimbangkan beban atau muatan pada infrastruktur TI sebuah perusahaan.

Dalam hal ini, nginx menggunakan  algoritma round robin sederhana. Third-party module yang digunakan adalah http upstream hash.

Round Robin

Algoritma Round Robin (RR) didisain untuk sistem time sharing. Algoritma ini mirip dengan penjadwalan FCFS (First Come First Served), namun preemption ditambahkan untuk switch (peralihan proses) antara proses. Antrian ready diperlakukan atau dianggap sebagai antrian sirkular. CPU menglilingi antrian ready dan mengalokasikan masing-masing proses untuk interval waktu tertentu sampai satu time slice /quantum. [read more]

Load Balancing dengan nginx

Dalam tulisan ini menggunakan nginx sebagai front-end server.
.:: konfigurasi pada vhost / nginx.conf
[root@server01 conf]# cd /etc/nginx/conf.d/
[root@server01 conf.d]# nano idprayoga.com.conf
#isi file konfigurasi
upstream bagi {
    server 10.100.100.98;
    server 10.100.100.99;
    server 10.100.100.100;
}
server {
   listen  80;
   server_name  idprayoga.com www.idprayoga.com;
   access_log  /var/log/nginx/idprayoga.com.access.log ;
   error_log    /var/log/nginx/idprayoga.com.error.log ;
   location / {
        proxy_pass      http://bagi;
        include         /etc/nginx/conf.d/proxy.conf;
   }
}

.:: restart nginx

Tips-Trix
Tips-Trix untuk mencoba Load Balancing jika hanya memiliki 1 server.
Dalam contoh tulisan ini menggunakan nginx sebagai front-end server dan menggunakan apache sebagai back-end server. Karena menggunakan satu server, jadi pembagiannya berdasarkan port dalam satu server. Untuk implementasi yang sesungguhnya tinggal menyesuaikan sesuai kebutuhan.

siapkan back-end server agar berjalan dengan multiple port (misal 8080, 8090. 8091)
.:: copy file konfigurasi apache (httpd.conf)
[root@server01 conf.d]# cd /etc/httpd/conf
[root@server01 conf.d]# cp httpd.conf httpd8090.conf
[root@server01 conf.d]# cp httpd.conf httpd8091.conf

jadi sekarang ada 3 file konfigurasi, httpd.conf, httpd8090.conf, dan httpd8091.conf. Ganti masing-masing port agar berjalan di port yang berbeda dengan mengubah Listen sesui nama file konfigurasi. Misal httpd.conf Listen 8080 , httpd8090.conf Listen 8090 , dan httpd8091.conf Listen 8091

.:: Selanjutnya jalankan perintah untuk alternatif ServerConfigFile
[root@server01 conf]# httpd -f /etc/httpd/conf/httpd8090.conf
[root@server01 conf]# httpd -f /etc/httpd/conf/httpd8091.conf

.:: cek port
[root@server01 conf]# netstat -tlnup |grep 80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      7640/nginx.conf
tcp        0      0 :::8080                     :::*                        LISTEN      7654/httpd
tcp        0      0 :::8090                     :::*                        LISTEN      7672/httpd
tcp        0      0 :::8091                     :::*                        LISTEN      7686/httpd

jika sudah terlihat apache berjalan pada multiple port, sekarang tinggal buat konfigurasi vhost pada masing-masing file.
.:: contoh isi pada httpd.conf, httpd8090.conf, dan httpd8091.conf ( sesuaikan port-nya )
ServerName idprayoga.com
ServerAlias www.idprayoga.com
DocumentRoot "/home/8080/www/idprayoga.com/htdocs"
CustomLog "|/usr/sbin/cronolog /var/apachelogs/prayoga/%Y/%m/%d/idprayoga.com.access_log" combined
ErrorLog "|/usr/sbin/cronolog /var/apachelogs/prayoga/%Y/%m/%d/idprayoga.com.error_log"
ScriptAlias /cgi-bin/ "/home/prayoga/www/idprayoga.com/cgi-bin/"
Options All
AllowOverride All
Order allow,deny
Allow from all
### add these line in VirtualHost configuration
        RPAFenable      On
        RPAFsethostname On
        RPAFproxy_ips   10.100.100.99 ### can use multiple IP address

buat file pada direktori masing-masing berisi index.html dengan isi Port 8080,  Port 8090, dan Port 8091 atau isi lain yang intinya saat test untuk mengetahui kita sedang mengakses dari server port mana.
.:: konfigurasi pada vhost / nginx.conf
[root@server01 conf]# cd /etc/nginx/conf.d/
[root@server01 conf.d]# nano idprayoga.com.conf
#isi file konfigurasi
upstream bagi {
    server 10.100.100.99:8080;
    server 10.100.100.99:8090;
    server 10.100.100.99:8091;
}
server {
   listen  80;
   server_name  idprayoga.com;
   access_log  /var/log/nginx/idprayoga.com.access.log ;
   error_log    /var/log/nginx/idprayoga.com.error.log ;
   location / {
        proxy_pass      http://bagi;
        include         /etc/nginx/conf.d/proxy.conf;
   }
}

.:: restart httpd dan nginx
[root@server01 conf.d]# /etc/init.d/nginx restart
[root@server01 conf.d]# killall -9 httpd
[root@server01 conf.d]# /etc/init.d/httpd start
[root@server01 conf]# httpd -f /etc/httpd/conf/httpd8090.conf
[root@server01 conf]# httpd -f /etc/httpd/conf/httpd8091.conf

.:: testing

Akses idprayoga.com dari browser dan refresh. Perhatikan, seharusnya setiap refresh seharusnya tampilan berubah-ubah Port 8080, Port 8090, dan Port 8091.

Konfigurasi ini juga bisa berfungsi sebagai Fault Tolerance (bisa dijadikan server primary backup) dengan menambahkan parameter backup di belakangnya. Contoh, dalam keadaan normal, request di tangani oleh server primary (8080), namun jika server primary (8080) mati, request dari client akan di tangani oleh server backup (8090)
upstream bagi {
    server 10.100.100.99:8080;
    server 10.100.100.99:8090 backup;
   
}


bila ada yang salah mohon dikasih masukan. Terimakasih :)

1 comments:

Unknown said...

Makasih gan tutorialnya.. oprek terus gaan..

Post a Comment