Kusprayitna Blogs

Hidup untuk berbagi ilmu :: IT Linux Windows Database Oracle PHP OpenSource

Linux LoadBalancing dengan HAProxy

Posted by kusprayitna on February 22nd, 2012

Sudah sekian lama server di kampus aktif dan tidak ada gangguan yang berarti. Ini adalah waktu luang untuk upgrade pengetahuan yang bermanfaat dan untuk dapat diimplementasikan.

Ada dua buah server, yaitu portal1 dan portal2 yang mempunyai layanan sama, yaitu hosting dengan konten/isi yang identik, tentunya server dengan OS Linux Centos dan aplikasi Apache. Kedua server ini diakses secara bergantian menggunakan loadbalacing DNS server.

Metode load balancing dengan DNS ini merupakan metode yang sangat sederhana sekali, yaitu dengan menuliskan kedua lamat server dalam DNS recordnya. Sebagai contoh jika di cek DNS recordnya yaitu :

# dig portal.uii.ac.id

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_4.2 <<>> portal.uii.ac.id

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55004

;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 3

;; QUESTION SECTION:

;portal.uii.ac.id.              IN      A

;; ANSWER SECTION:

portal.uii.ac.id.       9491    IN      A       202.162.37.146

portal.uii.ac.id.       9491    IN      A       202.162.37.147

Dapat dilihat diatas, alamat portal.uii.ac.id adalah 202.162.37.146 dan 202.162.37.147

Dalam praktek selama ini metode diatas tidak ada masalahberarti, akan tetapi mempunyai kelemahan yaitu :

  1. Tidak ada fail over, yaitu jika salah satu server mati dan klien akses ke portal.uii.ac.id mendapatkan alamat IP yang mati maka layanan akan error, jadi harus sering "refresh" browser.
  2. Tidak ada statistik pengguna yang enak dibaca selain harus cek log masing masing server.
Dalam waktu luang ini, habis Dhuhuran alhamdulillah berhasil setup loadbalancing menggunakan HAProxy. Mengapa HAproxy, ada beberapa fitur yang dapat dijadikan alasan yaitu :
  1. Merupakan loadbalancing yang dapat dibuat master dan slave load balancing, sehingga apabila load balacing utama gagal/fail, maka load balancing cadangan dapat otomatis bekerja.
  2. Support loadbalancing untuk beberapa server farms
  3. Heald status, untuk cek status server, yaitu Jika server dalam server farms mati, maka trafik ke server tersebut otomatis dihentikan.
  4. Dapat untuk loadbalancing aplikasi yang tidak support loadbalancing, maksudnya adalah aplikasi yang mengatur sesi user di server bersangkutan seperti ecommerce, shopping, dll
  5. Ada statistik yang mudah dibaca
  6. Mudah setingnya, ini yang penting..... biar cepat semuanya. Amien
Dalam instalasi kali ini adalah instalasi yang sederhana saja
Tahapan instalasi HAProxy:
Arsitektur :
Untuk informasi arsitektur haproxy lebih detail dapat diakses di http://haproxy.1wt.eu/download/1.2/doc/architecture.txt
Disini saya menambahkan 1 server untuk load balancing, yaitu dengan 2 NIC dan alamat IP Internet adalah 202.162.37.148 dan IP Local yaitu 192.168.0.1.
  1. Download software HAproxy yang terbaru

    # wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.26.tar.gz

  2. Extract file hasil download

    #tar -xzf  haproxy-1.3.26.tar.gz

  3. Compile source codenya

    #make TARGET=linux26
    #make install

    Hasil instalasi file binary tersimpan di "/usr/local/sbin/haproxy"
    untuk melihat dokumen manual dapat dengan perintah "man haproxy"

  4. Download contoh konfigurasinya

    #wget http://layer1.rack911.com/haproxy/haproxy-standard.cfg -O /etc/haproxy.cfg

  5. Download script agar dapat dijalankan dengan mudah sebagai service

    #wget http://layer1.rack911.com/haproxy/haproxy.init -O /etc/init.d/haproxy
    #chmod +x /etc/init.d/haproxy

  6. Sesuaikan seting konfigurasi haproxy.cfg

    #vi /etc/haproxy.cfg

  7. global
    maxconn     4096 # Total Max Connections. This is dependent on ulimit
    daemon
    nbproc      4 # Number of processing cores. Dual Dual-core Opteron is 4 cores for example.
    defaults
            mode        http
            clitimeout  60000
            srvtimeout  30000
            contimeout  4000
            option      httpclose # Disable Keepalive
    
    listen  http_proxy 202.162.37.148:80
            ##=== algoritma loadbalancing ===##
            balance roundrobin
            ##=== jika server tidak support mekanisme LoadBalancing, tangani dengan COOKIE ==##
            #cookie JSESSIONID prefix
            #cookie SERVERID insert indirect
    
            ##=== untuk fungsi cek kesehatan server farm ===##
            #option httpchk
            option httpchk HEAD /check.txt HTTP/1.0
            option forwardfor # This sets X-Forwarded-For
            ##=== statitistik ===##
            stats enable
            stats refresh 10s
            stats hide-version
            stats scope   .
            stats uri     /lb?stats
            stats auth admin:password
    
            ## Define your servers farm
            server portal1 192.168.0.29:80 weight 1 maxconn 512 check
            server portal2 192.168.0.28:80 weight 1 maxconn 512 check
  8. Sesuaikan service
    Sesuaikan lokasi binary haproxy di file /etc/init.d/haproxy, sebab default instalasi adalah /usr/local/sbin/haproxy akan tetapi di script defaultnya adalah /usr/sbin/haproxy
  9. Jalankan haproxy

    # service haproxy start

Catatan tentang seting haproxy.cfg
  • Jumlah prosesor yaitu 4 core
  • Jumlah koneksi maksimal 4096
  • Loadbalancing hanya meneruskan request http, lainnya tidak diteruskan
  • Metode pemilihan server di server farm menggunakan roundrobin
  • Statistik loadbalancing dapat diakses di http://202.162.37.148/lb?stats dengan user "admin" dan password "password"
  • Status server di server farm di cek dengan periontah "option httpchk HEAD /check.txt", yang artinya haproxy akan mengirimkan perintah http head /check.txt ke setiap alamat ip server. Untuk itu setiap server di server farm harus disiapkan file tersebut
Yang dilakukan di setiap server di server farm yaitu :
  1. Membuat apache support virtual host
  2. Disiapkan virtual host berdasarkan alamat IP
  3. Format log di apache diubah akan mengenal alamat IP yang akses sebenarnya, sebab jika tidak diubah maka yang dikenali adalah alamat IP dari load balancing.
Contoh konfigurasi virtual host :
NameVirtualHost *:80

<VirtualHost 192.168.0.29:80>
    ServerName portal1.uii.ac.id
    ServerAdmin admin@portal1.uii.ac.id
    DocumentRoot /var/www/html

    SetEnvIf Request_URI "^/check\.txt$" dontlog  
    ErrorLog /var/log/httpd/vhost_error.log
    CustomLog /var/log/httpd/vhost_access.log combined env=!dontlog
</VirtualHost>

Dalam konfigurasi diatas, menambahkan pengecekan jika yang diakses adalah check.txt maka tidak perlu ditulis dalam log, dengan tujuan agar tidak memenuhi log server.

File konfigurasi apache disesuaikan juga

# vi /etc/http/conf/httpd.conf

Sebelumnya

[...]
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
[...]

Diubah menjadi

[...]
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
[...]

Janagn lupa untuk restart apache setelah dilakukan perubahan.

Hasil statistik

Salam sukses slalu


One Response to “Linux LoadBalancing dengan HAProxy”

  1. Kusprayitna Blogs » Blog Archive » Setup Database MySQL Clustering Says:

    [...] Node mati, maka otomatis akses diarahkan ke Node yang hidup. Pandung instalasi dapat diakses di http://kusprayitna.staff.uii.ac.id/2012/02/22/linux-loadbalancing-dengan-haproxy/ Disini dilakukan penambahan monitoring database berdasarkan status webserver (httpd) di setiap [...]

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>