Installasi HAProxy Load Balancer di CentOS 7

Logo HAProxy

HAProxy merupakan salah satu aplikasi Load Balancer yang digunakan untuk membagi beban traffic, salah satunya untuk membagi beban traffic website sehingga dapat meningkatkan performa. Tutorial kali ini kita akan membahas tentang bagaimana cara installasi HAProxy Load Balancer di CentOS 7.

Berikut ini adalah gambaran umum infrastruktur server yang menggunakan Load Balancer

Adapun tipe Load Balancing nya adalah sebagai berikut:

  • Round Robin : HAProxy akan mengambil source dengan beban yang setara antara satu server dengan server lainnya
  • Leastconn : HAProxy akan mengambil jumlah koneksi network paling sedikit
  • First : HAProxy akan mengambil dari server upstream pertama lebih dulu, setelah terlacak beban penuh, haproxy akan mengambil pada server upstream selanjutnya
  • Source : HAProxy akan mengambil data dari server, secara tetap, tidak berpindah-pindah. Sehingga jika sebuah sessi koneksi terjadi di upstream pertama, tidak akan terputus hingga sessi koneksi tersebut diakhiri

Disini saya menggunakan 3 server untuk percobaan, sebagai berikut:

  • 1 server untuk HAProxy dengan hostname lb.kelolaserver.com (sebagai frontend)
  • 2 server Web dengan hostname web01.kelolaserver.com & web02.kelolaserver.com (sebagai backend)

2 Web server sudah terinstall Apache dan berisi website landing page (hanya untuk testing) dan untuk tipe Load Balancingnya akan menggunakan tipe Round Robin.

Installasi

Sebelumnya, periksa terlebih dahulu paket HAProxy apakah sudah tersedia di dalam repositori default atau belum dengan menggunakan perintah berikut:

[root@lb ~]# yum info haproxy

Hasilnya akan muncul seperti ini:

Available Packages
Name        : haproxy
Arch        : x86_64
Version     : 1.5.18
Release     : 8.el7
Size        : 834 k
Repo        : base/7/x86_64
Summary     : TCP/HTTP proxy and load balancer for high availability environments
URL         : http://www.haproxy.org/
License     : GPLv2+
Description : HAProxy is a TCP/HTTP reverse proxy which is particularly suited for high
            : availability environments. Indeed, it can:
            :  - route HTTP requests depending on statically assigned cookies
            :  - spread load among several servers while assuring server persistence
            :    through the use of HTTP cookies
            :  - switch to backup servers in the event a main server fails
            :  - accept connections to special ports dedicated to service monitoring
            :  - stop accepting connections without breaking existing ones
            :  - add, modify, and delete HTTP headers in both directions
            :  - block requests matching particular patterns
            :  - report detailed status to authenticated users from a URI
            :    intercepted by the application

Kemudian lakukan perintah berikut untuk melakukan installasi paket HAProxy:

[root@lb ~]# yum -y install haproxy

Jalankan service HAProxynya:

[root@lb ~]# systemctl start haproxy

Konfigurasi

Sebelum melakukan konfigurasi, jangan lupa backup terlebih dahulu konfigurasi defaultnya:

[root@lb ~]# rsync -auvr /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg_backup

Kemudian edit file konfigurasinya

[root@lb ~]# vim /etc/haproxy/haproxy.cfg
#---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        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 haproxy-monitoring *:8080             #Haproxy Monitoring berjalan di 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_anda:password_anda   #User dan Password untuk login ke Dashboard Monitoring
    stats admin if TRUE
    default_backend app-main                 #Konfigurasi untuk monitoring backend

#---------------------------------------------------------------------
# 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                                   #Balance algorithm
    option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost   #Check the server application is up and healty - 200 status code
    server web01 xxx.xxx.xxx.xxx:80 check                #Rubah menjadi IP Backend Web Server 1 anda 
    server web02 xxx.xxx.xxx.xxx:80 check                #Rubah menjadi IP Backend Web Server 2 anda

Edit file konfigurasi rsyslog.conf pada baris 15-17 dan baris 56 seperti berikut:

Pada baris 15-17 :

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
$AllowedSender UDP, 127.0.0.1

Pada baris 56:

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
local2.*                                                /var/log/haproxy.log

Restart service Rsyslog dan service HAProxy, jangan lupa set supaya jalan pada saat booting

[root@lb ~]# systemctl restart rsyslog
[root@lb ~]# systemctl restart haproxy
[root@lb ~]# systemctl enable haproxy

Cek status service HAProxynya:

[root@lb ~]# systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
   Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
   Active: active (running) since Rab 2019-02-13 09:22:01 UTC; 21s ago
 Main PID: 12042 (haproxy-systemd)
   CGroup: /system.slice/haproxy.service
           ├─12042 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
           ├─12043 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
           └─12044 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds

Peb 13 09:22:01 lb.kelolaserver.com systemd[1]: Started HAProxy Load Balancer.
Peb 13 09:22:01 lb.kelolaserver.com haproxy-systemd-wrapper[12042]: haproxy-systemd-wrapper: executing /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/hap....pid -Ds
Hint: Some lines were ellipsized, use -l to show in full.
[root@lb ~]# netstat -atpn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      12044/haproxy       
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      12044/haproxy       
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3137/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      3099/master         
tcp        0     36 157.230.33.240:22       61.247.53.193:43978     ESTABLISHED 6511/sshd: root@pts 
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::22                   :::*                    LISTEN      3137/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      3099/master

Ujicoba

Lakukan ujicoba mengakses IP HAProxy, apabila berhasil maka akan muncul tampilan backend seperti ini (contoh web server di backend menggunakan NGINX):

Untuk akses ke Dashboard Monitoring HAProxy menggunakan akses berikut (Cek bagian stats auth username_anda:password_anda)

  • URL: http://IP_Server:8080/stats
  • User: username_anda
  • Password: password_anda

Berikut ini tampilan Dashboard Monitoringnya:

Terlihat bahwa backend sedang down, sebaliknya apabila backend keduanya sedang up akan tampil seperti berikut:

Sekian dan terima kasih, semoga bermanfaat ya.

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to Top