Konfigurasi HAProxy sebagai LoadBalancer untuk Nginx pada CentOS 7 Server

Assalamualaikum Wr. Wb.

HAProxy atau yang biasa disebut High Availability Proxy adalah TCP opensource dan HTTP load balancer serta software untuk server proxy. HAProxy diciptakan oleh Willy dengan menggunakan bahasa C, HAProxy juga mendukung SSL, kompresi, keep-alive, kustom format log dan header rewriting. Selain itu HAProxy memiliki konsumsi resource memori dan CPU yang kecil.
Banyak web yang juga mengimplementasikan konsep HAProxy seperti Github, StackOverflow, Reddit, Tumblr, Twiiter dan lain sebagainya.

Pada tutorial kali ini saya akan membagikan tentang bagaimana cara menggunakan HAProxy sebagai load balancer dari suatu web server dan web server yang kita gunakan saat ini adalah nginx. Kita membutuhkan tiga server, dimana satu server sebagai load balancer dan kedua server menggunakan web server (nginx).

  • Konsep Dasar HAProxy

HAProxy dapat digunakan dengan dua mode, mode yang pertama adalah TCP (layer 4) dimana HAProxy meneruskan paket RAW TCP ke server aplikasi dan mode yang kedua adalah HTTP (layer 7) dimana HAProxy melakukan parsing header HTTP terlebih dehulu sebelum meneruskannya ke server aplikasi. Nah, pada tutorial kali ini saya akan menggunakan web server nginx yang juga mendukung layer 7 (mode HTTP).

  • Algoritma LoadBalance

Algoritma Load Balance
HAProxy memiliki algoritma yang berbeda-beda untuk memilih server mana yang akan di load balance, berikut macam-macam algoritmanya :

  1. Roundrobin, algoritma ini yang paling sederhana, cara kerja dari algoritma ini yaitu memilih server backend secara berurutan, apabila sudah mencapai server backend yang terakhir, dia akan mengulang kembali dari server backend yang pertama.
  2. Lastconn, konsep dari algoritma ini yaitu memilih server backend yang memiliki jumlah koneksi paling sedikit. Hal ini berguna ketika waktu dan pemuatan permintaan sangat bervariasi.
  3. Source, algoritma ini menentukan IP client mana yang akan dieksekusi oleh server backend. Jadi IP A akan selalu ditangani oleh server backend A, dan IP B akan selalu ditangani oleh server backend B.

Nah, pada tutorial kali ini saya menggunakan contoh algoritma Roundrobin.

  • Topologi HAProxy

Sebelumnya kita harus merancang terlebih dahulu topologi yang digunakan HAProxy tersebut untuk memudahkan dalam melakukan konfigurasi. Berikut topologi yang saya gunakan :

Topologi HAProxy

Prasyarat

Syarat sebelum melakukan konfigurasi HAProxy kali ini antara lain :

1. Sistem operasi CentOS 7 Server

2. Root privileges

3. Load balancer menggunakan hostname : loadbalancer

4. Nginx1 menggunakan hostname : nginx1.loadbalancer.me

5. Nginx2 menggunakan hostname : nginx2.loadbalancer.me

Membuat Hostname

Langkah pertama kali yang dilakukan yaitu membuat/merubah hostname VM Anda dengan nama yang sudah ditentukan sebelumnya, untuk mengubahnya Anda dapat menggunakan perintah : hostnamectl set-hostname <nama host> (tanpa tanda kurung). Untuk memeriksa apakah hostname sudah terupdate atau belum, Anda dapat menggunakan perintah : hostnamectl. Sekedar untuk memastikan, Anda dapat logout terlebih dahulu dan coba login kembali ke terminal server Anda.

Setelah itu, tambahkan konfigurasi hostname pada masing-masing VM melalui file "/etc/hostname". Untuk VM load balancer. Silakan menambahkan konfigurasi hostname nginx seperti berikut :

"IP Address" (tanpa tanda petik) nginx1.loadbalancer.me nginx1
"IP Address" (tanpa tanda petik) nginx2.loadbalancer.me nginx2

Sedangkan, untuk masing-masing VM nginx, silakan untuk menambahkan konfigurasi hostname load balancer seperti berikut :

"IP Address" (tanpa tanda petik) loadbalancer
  • Install dan Konfigurasi HAProxy

Karena repositori HAProxy secara default sudah disediakan oleh CentOS 7 server, maka Anda dapat menginstallnya secara langsung. Remote ke server load balancer Anda terlebih dahulu, lakukan update paket dan install paket HAProxy dengan menjalankan perintah : yum install haproxy -y

Ketika instalasi sudah selesai, start dan aktifkan secara otomatis setelah boot pada service haproxy dengan perintah : systemctl start haproxy dan systemctl enable haproxy , setelah itu masuk ke direktori "/etc/haproxy" dan backup file konfigurasi aslinya.

cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg.orig

Simpan konfigurasi tersebut dan keluar.

Langkah selanjutnya lakukan konfigurasi rsyslog untuk HAProxy. Kita akan melakukan konfigurasi daemon rsyslog untuk statistik HAProxy, edit file rsyslog.conf. untuk mengaktifkan port UDP 514 agar dapat digunakan oleh rsyslog. Buang tanda pagar (#) untuk mengaktifkan baris konfigurasi koneksi UDP seperti berikut :

$ModLoad imudp
$UDPServerRun 514

Simpan hasil konfigurasi dan keluar.

Buat file konfigurasi HAProxy untuk rsyslog, gunakan teks editor favorit Anda pada "/etc/rsyslog.d/haproxy.conf" dan pastekan baris konfigurasi berikut ini :

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log         127.0.0.1 local2     #Log configuration
 
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000                
    user        haproxy             #Haproxy running under user and group "haproxy"
    group       haproxy
    daemon
 
    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats
 
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
 
#---------------------------------------------------------------------
#HAProxy Monitoring Config
#---------------------------------------------------------------------
listen haproxy3-monitoring *:8080                #Monitoring HAProxy menggunakan port 8080
    mode http
    option forwardfor
    option httpclose
    stats enable
    stats show-legends
    stats refresh 5s
    stats uri /stats                             #URL untuk monitoring haproxy 
    stats realm Haproxy\ Statistics
    stats auth username:password            #User dan password login monitoring haproxy
    stats admin if TRUE
    default_backend app-main                    #Hanya pilihan saja
 
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend main
    bind *:80
    option http-server-close
    option forwardfor
    default_backend app-main
 
#---------------------------------------------------------------------
# BackEnd roundrobin as balance algorithm
#---------------------------------------------------------------------
backend app-main
    balance roundrobin                                     #Algoritma load balance
    option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost    #Cek aplikasi server berjalan dengan baik - 200 kode status
    server nginx1 IP_Address:80 check                 #Nginx1 
    server nginx2 IP_Address:80 check                 #Nginx2
Keterangan : Ganti username, password, dan IP Address yang Anda gunakan.

Kemudian, buatlah file konfigurasi HAProxy untuk rsyslog.

cd /etc/rsyslog.d/
vim haproxy.conf

Pastekan baris konfigurasi beriktu ini :

local2.=info     /var/log/haproxy-access.log #Untuk akses log
local2.notice    /var/log/haproxy-info.log   #Untuk info servis backend, loadbalancer

Simpan hasil konfigurasi dan keluar, dan sekarang restart service haproxy tersebut dengan perintah : systemctl restart haproxy.

  • Install dan Konfigurasi Nginx

Pada bagian ini, install repo tambahan (epel-release) terlebih dahulu kemudian install nginx pada masing-masing VM nginx.

yum install epel-release -y
yum install nginx -y

Start dan aktifkan service nginx terlebih dahulu :

systemctl start nginx
systemctl enable nginx

Setelah service nginx sudah running, langkah selanjutnya adalah menampilkan tulisan website dari masing-masing web server nginx seperti contoh berikut, hal ini untuk membedakan tampilan dari nginx1 maupun nginx2.

echo "<h1>nginx1.loadbalance.me</h1>" > /usr/share/nginx/html/index.html     #Untuk nginx1
echo "<h1>nginx2.loadbalance.me</h1>" > /usr/share/nginx/html/index.html     #Untuk nginx2
  • Pengujian

Setelah instalasi dan konfigurasi dilakukan dengan benar, maka tahap akhir sekarang melakukan pengujian hasil. Akses IP Address load balancer Anda pada browser, apabila di refresh muncul tampilan seperti berikut maka konfigurasi Anda sudah berhasil :

Hasil akses HAProxy menggunakan Nginx1
Hasil akses HAProxy menggunakan Nginx2

Apabila Anda ingin mengakses melalui terminal dari server HAProxy, Anda dapat menjalankakannya menggunakan perintah : curl <IP Address HAProxy> (Tanpa tanda kurung) dan hasilnya akan tampak seperti gambar berikut ini :

Hasil akses HAProxy dengan terminal

Sekian untuk tutorial cara instalasi dan konfigurasi HAProxy sebagai load balancer untuk web server nginx, Anda dapat menggunakan HAProxy dengan kebutuhan Anda yang lain seperti mengkombinasikan dengan database server. Untuk tutorial tersebut akan saya bagikan pada post selanjutnya. Semoga dengan tulisan ini dapat membuat Anda semakin semangat untuk mencoba haproxy ini. Aamiin 🙂

Referensi :

How to setup HAProxy as Load Balancer for Nginx on CentOS 7

Leave a Reply