Memiliki banyak pengunjung hingga peningkatan traffic adalah hal yang diharapkan oleh para pemilik website. Namun, banyaknya pengunjung berbanding lurus dengan permintaan atau request pada server yang semakin bertambah.
Oleh karena itu kestabilan server diperlukan agar dapat memenuhi permintaan para pengunjung. Di artikel ini, kamu akan mengetahui cara menjaga kestabilan server menggunakan load balancing HAProxy Nginx di CentOS 7.
Load Balancing
Load balancing adalah salah satu metode untuk mendistribusikan traffic ke beberapa server agar tidak membebani satu server saja sehingga kinerja server menjadi seimbang dan menghindari terjadinya overload.
HAProxy
HAProxy atau High Availability Proxy adalah open source TCP dan HTTP load balancer dan proxy server software. HAProxy ditulis dalam bahasa C oleh Willy Tarreau yang didukung oleh SSL, keep-alive custom log format, dan header writing.
HAProxy adalah salah satu software yang cepat dan telah digunakan oleh website terkenal, seperti Github, StackOverflow, Reddit, Tumblr, dan Twitter. HAProxy kini termasuk dalam salah satu load balancer populer saat ini.
Sebagai penjelasan tambahan, baca dahulu artikel kami tentang proxy.
Konsep HAProxy
HAProxy dapat berjalan pada 2 mode; TCP layer 4 dan HTTP layer 7. Pada TCP layer 4, HAProxy melakukan forward RAW packet TCP dari client ke application server. Pada HTTP layer 7, HAProxy melakukan parsing HTTP Header sebelum melakukan forwarding ke application server.
Algoritma
Ada beberapa algoritma yang digunakan oleh HAProxy dalam menerima permintaan pengunjung:
-
Roundrobin
Algoritma yang paling sederhana, HAProxy akan mengambil dan menyeimbangkan source setara pada server yang tersedia.
-
Lastconn
Jika ada koneksi akan ditangani oleh backend server dengan jumlah koneksi paling sedikit, atau sederhananya HAProxy akan mengambil jumlah koneksi yang paling sedikit.
-
Source
IP client akan di-hash agar dapat menentukan server backend yang menerima permintaan terakhir dari IP pengunjung tersebut. Jadi, jika ada pengunjung melakukan request nantinya akan diterima oleh salah satu server secara bertahap, tidak dipindah-pindah sesinya sampai sesi tersebut berakhir.
Pada tutorial ini kami akan menggunakan algoritma Round Robin.
Load Balancing HAProxy Nginx di CentOS 7
Sebelum menggunakan Load Balancing HAProxy Nginx di CentOS 7, perhatikan beberapa hal berikut:
Persiapan
Sebelum memulai instalasinya, pastikan kamu sudah memenuhi syarat berikut.
- Memiliki 3 VPS dan Domain yang aktif.
- Memiliki akses root ke VPS.
Persyaratan
Note: Kami menyamarkan alamat IP menjadi “xxx”, nantinya kamu harus mengubah segala pengaturan IP dengan alamat IP kamu.
- VPS 1 sebagai Load Balancer
103.xxx.xxx.188 - VPS 2 sebagai Web Server 1 (srv1)
103.xxx.xxx.39 - VPS 3 sebagai Web Server 2 (srv2)
103.xxx.xxx.45
Konfigurasi HAProxy Load Balancer
Berikut ini beberapa langkah konfigurasinya:
Update Server
Update server dan reboot supaya packages yang tersedia di repositories sudah up-to-date.
$ yum update -y
$ reboot
Configure etc/hosts
Login sebagai root ke Load Balancer.
Edit etc/hosts untuk menambahkan hostname dari srv1 dan srv2 supaya dikenali oleh Load Balancer.
$ nano /etc/hosts
Tambahkan hostname srv1 dan srv2:
103.xxx.xxx.39 srv1.loadbalancer srv1
103.xxx.xxx.45 srv2.loadbalancer srv2
Save dan Exit.
Login sebagai root ke srv1 dan srv2
$ nano /etc/hosts
103.xxx.xxx.188 loadbalancer
Lakukan settingan di atas pada kedua web server (srv1 dan srv2).
Instal & Konfigurasikan HAProxy
Login sebagai root ke Load Balancer
HAProxy sudah tersedia pada repositori CentOS 7, kemudian ke directory HAProxy dan backup file konfigurasi aslinya.
$ yum install haproxy -y
$ cd /etc/haproxy/
$ mv haproxy.cfg haproxy.cfg.original
Buat file konfigurasi haproxy yang baru.
$ nano haproxy.cfg
Gunakan konfigurasi di bawah 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 #Haproxy Monitoring run on port 8080
#bind haproxy3-monitoring *:8080
listen stats
bind *:8080
mode http
option forwardfor
option httpclose
stats enable
stats show-legends
stats refresh 5s
stats uri /stats #URL for HAProxy monitoring
stats realm Haproxy\ Statistics
stats auth admin:p4ssadmin #User and Password for login to the monitoring dashboard
stats admin if TRUE
default_backend app-main #This is optionally for monitoring backend
#———————————————————————
# FrontEnd Config
#———————————————————————
frontend main
bind *:80
option http-server-close
option forwardfor
default_backend app-main
#———————————————————————
# BackEnd roundrobin as balance algorithm
#———————————————————————
backend app-main
balance roundrobin #Balance algorithm
option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost #Check the server application is up and healty – 200 status code
server srv1 103.xxx.xxx.39:80 check #srv1
server srv2 103.xxx.xxx.45:80 check #srv2
Simpan hasil konfigurasi dan Exit.
Configure Rsyslog
Di sini kami akan melakukan konfigurasi rsyslog daemon untuk logging pada statistik HAProxy, edit rsyslog.conf dan aktifkan UDP port 514 agar dapat digunakan oleh rsyslog.
$ nano /etc/rsyslog.conf
Hapus tanda “#” pada perintan dibawah ini:
#module(load=”imudp”) # needs to be done just once
#input(type=”imudp” port=”514″)
Save lalu Exit.
Setelah itu buat konfigurasi haproxy untuk rsyslog.
$ cd /etc/rsyslog.d/
$ nano haproxy.conf
Tempel (paste) konfigurasi di bawah ini ke dalam file haproxy.conf.
local2.=info /var/log/haproxy-access.log #For Access Log
local2.notice /var/log/haproxy-info.log #For Service Info – Backend, loadbalancer
Simpan dan keluar.
Restart rsyslog dan start haproxy.
$ systemctl restart rsyslog
$ systemctl start haproxy
Tambahkan haproxy untuk start on-boot.
$ systemctl enable haproxy
Instal dan Konfigurasikan Nginx
Login sebagai root ke srv1 dan srv2
$ yum install epel-release -y
$ yum install nginx -y
Setelah Nginx terinstal di srv1 dan srv2, kunjungi direktori web lalu ubah index file untuk melihat hasil load balancer pada kedua server tersebut.
$ cd /usr/share/nginx/html/
$ echo “<h1>srv1.loadbalancer</h1>” > index.html #untuk srv1
$ echo “<h1>srv2.loadbalancer</h1>” > index.html #untuk srv2
Kemudian, tambahkan Nginx untuk start on-boot lalu start Nginx.
$ systemctl enable nginx
$ systemctl start nginx
Lakukan langkah “Configure Nginx” ini pada kedua server.
Testing
Akses LoadBalancer dengan IP: 103.xxx.xxx.188, maka akan seperti di bawah ini dengan algoritma Round Robin:
Jika pengecekan menggunakan c:
[root@server-dewiweb ~]# curl 103.xxx.xxx.188
<h1>srv2.loadbalancer</h1>
[root@server-dewiweb ~]# curl 103.xxx.xxx.188
<h1>srv1.loadbalancer</h1>
Kamu juga bisa melihat statistik pada HAProxy Web Monitoring dengan URL: http://103.xxx.xxx.188:8080/stats
Jika tamplannya sudah seperti gambar di atas, artinya proses menjaga kestabilan server menggunakan load balancing sudah berhasil.
Simpulan
Menjaga kestabilan server dengan load balancing HAProxy Nginx di CentOS 7 memang pilihan yang tepat saat kamu mulai khawatir dengan traffic pada website hingga menyebabkan resource pada server kamu hampir melewati batas. Pemilihan algoritma pada konfigurasi HAProxy untuk menjaga kestabilan server dapat disesuaikan dengan kebutuhan kamu.