DevOps Expert | Haproxy – High Performance Load Balancer Server

haproxy load balancer server

Kapan Anda harus menggunakan Haproxy?

Ketika ribuan pengguna mengakses situs atau aplikasi web ataupun sejenisnya pada waktu bersamaan, sehingga trafic yang tinggi yang membuat server anda overload (down) karena tidak dapat menampung request yang diterima, maka haproxy dapat menjadi solusi bagi anda.

Bayangkan kalo anda cuma punya 1 server yang dipakai untuk menangani semua request yg sudah terlanjut buanyaaak bgt… disisi lain spec server sudah mentok g bisa di upgrade lagi. sudah tidak memungkinkan untuk vertical scaling. maka sudah saat nya untuk melakukan horisontal scaling. yap… dengan Haproxy kita dapat membuat horisontal scaling untuk menghajar mengatasi trafic yang tinggi.

Teknik ini dikenal dengan load balancing. Jadi load balancing adalah teknik untuk melakukan distribusi beban trafik pada dua atau lebih jalur koneksi secara seimbang sehingga setiap jalur koneksi akan menerima beban trafik yang sama. yap begitulah cara kerja load balancing.

Apa itu Haproxy?

HAProxy adalah project open source dibawah GPLv2 license. Haproxy atau kepanjangan dari High Availability Proxy adalah loadbalancer TCP/IP dan proxy server yang dapat membagi beban request yang datang kepada multi node server. sehingga beban server akan dibagi kepada node server yang ada.

Pembagian beban nya pun bermacam-macam cara ada yang sama rata, ada yang berdasarkan beban trafic dan lain nya. akan kita pelajari algoritma pembagian beban request  ini selanjutnya. Jadi haproxy ini adalah perantara antara client/user dengan server (web/database/dll) sehingga disebut juga dengan haproxy reverse proxy.

Haproxy tidak hanya bisa untuk web load balancing namun juga yang lain seperti smtp load balancing atau mysql load balancing.

Bagaimana cara kerja Haproxy?

Load balance pada web server dapat dilakukan dengan 2 macam yaitu pada Layer 4 (transport layer) dan Layer 7 (application layer). Layer 4 lebih sederhana karena pembagian hanya berdasarkan range IP dan port. Pada layer 7 pembagian lebih kompleks sampai pembagian trafic berdasarkan url tertentu, dsb.

User akan mengirimkan request kepada load balancer (haproxy) kemudian diteruskan (forward) ke node (web server) lain. Teknik load balancing yang sering digunakan adalah roundrobin dan least connection. RoundRobin adalah cara yang menganggap bahwa semua beban server sama, jadi setiap server yang ada di akses secara bergantian dan berurutan, sedangkan Least Connection hanya mengalihkan beban ke server yang dianggap kosong atau trafficnya rendah.

di dalam haproxy terdapat 2 bagian (side) yakni frontend dan backend. koneksi yang datang dari user akan di terima oleh bagian frontend untuk di olah/filter sesuai rule frontend, jika lolos maka paket di lanjutkan ke backend untuk di oleh/filter sesuai rule backend selanjutnya akan di putuskan untuk kirim ke node tertentu sesuai strategi yang di pakai backend. Jadi frontend hanya mengurusi client/users dan backend mengurusi node server.
haproxy ada 2 mode dalam operasinya yakni HTTP close mode dan HTTP keep-alive mode.

Mengapa harus Haproxy?

Sebenarnya untuk melakukan load balancing trafic pada server ada beberapa alternative lain seperti Nginx, LVS / IPVS, varnish, dll. Namun haproxy memang khusus dibuat untuk keperluan ini, mature, reliable dan high performance. Disamping dia mempunyai fitur-fitur pendukung lain tentunya.

Haproxy hanya menggunakan 15% dari processing time penggunaan CPU dengan HTTP close mode dan sekitar 30% jika menggunakan HTTP keep-alive mode. Itu artinya secara global haproxy mempunyai impact yang besar dalam performa namun kecil dalam penggunaan resource.

Dengan load balancing maka yang akan menerima request tidak hanya 1 server, sehingga mempercepat waktu response sebuah web. 1 web server dapat menerima banyak request, sedangkan 1 server biasanya kita memiliki 1 web server, bayangkan saja jika kita mempunyai 3 dan masing – masing server mempunyai 1 web server maka waktu response sebuah web akan meningkat 3 kali lipat. Kesimpulan nya dengan haproxy dapat mempercepat waktu reponse sebuah web (fast response).

Karena adanya server yang lebih dari 1, hal ini memungkinkan ketika salah 1 server mati request tetap dapat di layani dengan server lain. jadi lebih reliable.

Ada beberapa variasi dalam penggunaannya haproxy diantaranya ada yang berfokus pada bandwidth, atau berdasarkan request rate, atau koneksi yang konkuren, atau pada kinerja SSL. Fitur-fitur yang ada disediakan untuk membantu tugas haproxy dalam mengendalikan trafic. Contohnya nanti akan kita bahas dalam haproxy configuration.

Fitur Basic

Proxying : menjembatani koneksi dari client dan server.
SSL : haproxy ssl support secure sockets layer (https)
Monitoring : termonitor secara terus menerus dan tercatat
High availibility : walaupun 1 atau beberapa web server mati masih tetap terkoneksi
Load balancing : beban trafik yang terbagi sama rata atau sama rasa
Stickiness : aliran data/paket yang melekat pada aturan/rule yang di setting
Sampling and converting information : pengelompokan dan rekap data dari paket yang lewat
Map : membuat simple rule untuk setting frontend dan backend
ACLs dan Conditions : haproxy acl mengatur trafic dengan rule dan condition
Stick-tables
Formatted strings
HTTP rewriting and redirection
Server protection
Logging : terdapat haproxy log file untuk maintenance
Statistics : data statistic untuk monitoring trafic

Fitur Advance

Management
System-specific capabilities
Scripting : HAProxy support Lua embedded language

Persiapan Installasi dan Konfigurasi

Kali ini kita akan gunakan 3 server  VPS dengan OS terinstall ubuntu 18.04
1 server sebagai load balancer dengan haproxy
2 server sebagai web server dengan nginx

server haproxy kita beri nama haproxy.qodrbee.com
web server kita beri nama web1.qodrbee.com dan web2.qodrbee.com
berikut konfigurasinya :

haproxy.qodrbee.com

ip public : 10.20.30.40 open port 80 # terhubung ke internet/user
ip private : 192.168.1.1/24 #terhubung dengan private web server

web1.qodrbee.com

ip private : 192.168.1.2/24 #terhubung dengan haproxy.qodrbee.com

web2.qodrbee.com

ip private : 192.168.1.3/24 #terhubung dengan haproxy.qodrbee.com

persiapan haproxy load balancer server

okey itu tadi adalah persiapan kita (persiapan mental dan kesabaran :v) sebelum memulai instalasi dan konfigurasi haproxy.
Selanjutnya kita coffe break dulu agar kembali fresh dan fokus. 10menit…
10.. 9.. 8.. 7.. 6.. 5.. 4.. 3.. 2.. 1..
oke break habis kita lanjutkan tahap instalasi dan konfigurasi.

kalau sudah sampai sini anda wajib share tulisan ini.
agar (banyak pengunjung di web saya) manfaatnya lebih tersebar ke yang lain.

tanpa basa bali klik disini untuk menuju babak baru dalam haproxy.
HAProxy installation and configuration
jeng jeng jeng…..

Referensi :

DevOps Expert | Haproxy – Instalasi & Konfigurasi pada VPS Ubuntu 18.04

haproxy load balancer server

Pada bab sebelumnya kita sudah mengetahui tentang apa, mengapa dan bagaimana cara kerja haproxy. Jika Anda belum mengetahui konsep dan alasan di balik haproxy sebaiknya Anda membacanya terlebih dahulu disini.

Haproxy Installation

Pertama kita create vps terlebih dahulu, bisa dengan digital ocean atau vultr atau yang lain nya. Jika belum mengetahui cara deploy (membuat) VPS dan instalasinya silahkan ikuti step by step disini. Selain VPS bisa juga menggunakan VM (virtual machine) atau bahkan dedicated computer.

Sediakan 3 VPS. Saya asumsikan sudah terinstall ubuntu server 18.04 atau keluarga debian, karena kurang lebih caranya sama kalau sesama keluarga linux debian. beda-beda dikit paling.
Pada VPS 1 (Hostname haproxy.qodrbee.com) lakukan

  1. Setting IP private
    edit file konfigurasi ip address

    root@haproxy:~# nano /etc/netplan/01-netcfg.yaml

    akan muncul isi file seperti ini lalu edit ip address menjadi 192.168.1.1/24

    network:
      version: 2
      renderer: networkd
      ethernets:
        ens3:
          dhcp4: yes
        ens7:
          addresses: [192.168.1.1/24]
          dhcp4: no
          dhcp6: no
          optional: true
          nameservers:
            addresses: [8.8.8.8,8.8.4.4]
    

    ens3 adalah ethernet yg terhubung ke public dan
    ens7 adalah yang terhubung ke private atau ke web server kita nantinya.
    Angka 3 dan 7 pada ens bisa berbeda untuk vps lain. Silahkan disesuaikan
    jika sudah simpan dengan ctrl+x lalu apply settingan tersebut dengan perintah

    root@haproxy:~# netplan apply

    cek ip address ens7 apakah sudah berubah

    root@haproxy:~# ifconfig
    ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 10.20.30.40  netmask 255.255.254.0  broadcast 10.20.30.255
            inet6 fe80::5400:1ff:fef4:c42e  prefixlen 64  scopeid 0x20<link>
            ether 56:00:01:f4:c4:ce  txqueuelen 1000  (Ethernet)
            RX packets 2008493  bytes 468728324 (468.7 MB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 1952526  bytes 1666990785 (1.6 GB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    ens7: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.1.1  netmask 255.255.255.0  broadcast 192.168.1.255
            inet6 fe80::5800:1ff:fef4:c48e  prefixlen 64  scopeid 0x20<link>
            ether 5a:00:01:f4:c4:ce  txqueuelen 1000  (Ethernet)
            RX packets 8122671  bytes 2208780819 (2.2 GB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 14258789  bytes 1377041568 (1.3 GB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 104578  bytes 9203032 (9.2 MB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 104578  bytes 9203032 (9.2 MB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
  2. Install haproxy
    update repo

    root@haproxy:~# apt update

    install haproxy

    root@haproxy:~# apt install haproxy

    Setelah terinstall, maka edit default config aplikasi haproxynya untuk mengarahkan settingan load balancernya, di /etc/default/haproxy , hilangkan tanda # di awal tulisan CONFIG dan ubah ENABLED menjadi 1.

    root@haproxy:~# nano /etc/default/haproxy
    # Defaults file for HAProxy
    #
    # This is sourced by both, the initscript and the systemd unit file, so do not
    # treat it as a shell script fragment.
    
    # Change the config file location if needed
    CONFIG="/etc/haproxy/haproxy.cfg"
    
    # Add extra flags here, see haproxy(1) for a few options
    #EXTRAOPTS="-de -m 16"
    ENABLED=1

    okey sekarang installasi haproxy sudah selesai, nanti kita lanjutkan untuk konfigurasinya.

Kemudian pada VPS 2 dan 3 (web1.qodrbee.com dan web2.qodrbee.com) kita lakukan

 

Haproxy Configuration

buka file konfigurasi haproxy

root@haproxy:~# nano /etc/haproxy/haproxy.cfg
global
    log 127.0.0.1 local0 notice   # menyimpan log pada 
                                  # syslog server (localhost)
    maxconn 2000          # max koneksi yang ditangani secara bersamaan
    user haproxy          # user yg menangani haproxy (jgn diganti)
    group haproxy         # group yg menangani haproxy (jgn diganti)

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    retries 3             # jml percobaan ketika timeout sebelum failure
    option redispatch     # meng-enable session redistribution 
                          # jika connection fail
    timeout connect  5s   # lama max sampai terhubung ke server 
                          # hingga berhasil
    timeout client  10s   # lama proses pengiriman data client/server
    timeout server  10s   # lama proses pengiriman data client/server

    listen web-load-balanced 0.0.0.0:80 # listen agar dapat di akses 
                                        # dari manapun
    mode http
    balance roundrobin    # algoritma metode load balancing
                          # ada pilihan algoritma roundrobin/static-rr/
                          # leastconn/source/uri/url_param
    option httpclose
    option forwardfor
    server web1 192.168.1.2:80 check # server backend, health check untuk 
    server web2 192.168.1.3:80 check # mengetahui status server backend

Oke konfigurasi standar haproxy sudah selasai. Selanjutnya kita uji coba. Start dulu haproxynya

root@haproxy:~# service haproxy start

buka komputer lain di luar VPS untuk melakukan request ke server load balancer sebut saja komputer user. Misal kita kasih IP address nya 192.168.1.111
kita lakukan dengan browser atau curl. Untuk uji coba kali ini kita pakai curl.
buat script php sebagai berikut untuk mengetahui IP server dan Client dari request.
simpan di /var/www/html/cek_loadbalance.php di server web1 dan web2

<?php
header('Content-Type: text/plain');
echo "Server IP: ".$_SERVER['SERVER_ADDR'];
echo "\nClient IP: ".$_SERVER['REMOTE_ADDR'];
echo "\nX-Forwarded-for: ".$_SERVER['HTTP_X_FORWARDED_FOR'];
?>

lalu dari komputer user lakukan

root@user:~# curl cek_loadbalance.php

seharusnya akan muncul hasil seperti ini

root@user:~$ curl http://192.168.1.1/cek_loadbalance.php
Server IP: 192.168.1.2
Client IP: 192.168.1.1
X-Forwarded-for: 192.168.1.111
root@user:~$ curl http://192.168.1.1/cek_loadbalance.php
Server IP: 192.168.1.3
Client IP: 192.168.1.1
X-Forwarded-for: 192.168.1.111

perhatikan server IP… dia berganti ganti karena kita memakai algoritma round robin. Request yang datang ke load balancer di arahkan bergantian ke 192.168.1.2 (web1) dan 192.168.1.3(web2)

X-Forwarded-for adalah IP komputer user