HAProxy atau High Availability Proxy adalah open source TCP dan HTTP load balancer dan perangkat lunak server proxy. HAProxy telah ditulis oleh Willy Tarreau dalam C, mendukung SSL, kompresi, keep-alive, format log kustom dan penulisan ulang header. HAProxy adalah server proxy dan penyeimbang beban yang cepat dan ringan dengan jejak memori yang kecil dan penggunaan CPU yang rendah. Ini digunakan oleh situs besar seperti Github, StackOverflow, Reddit, Tumblr, Twitter, dan lainnya. Ini telah menjadi penyeimbang beban perangkat lunak dan server proxy paling populer dalam beberapa tahun terakhir.
Dalam tutorial ini, Anda akan melalui instalasi dan konfigurasi HAProxy pada RHEL 8 / CentOS 8. Kami akan menginstal HAProxy pada satu server dan kemudian menginstal server web Nginx di server lain. HAProxy akan bertindak sebagai penyeimbang beban untuk server web Nginx.
Dalam tutorial ini Anda akan mempelajari:
- Arsitektur dan Konsep HAProxy
- Konfigurasikan file host untuk resolusi nama
- Instal dan Konfigurasikan HAProxy
- Instal dan Konfigurasi Nginx
- Menguji fitur Load Balancing
- Akses URL Statistik HAProxy

Persyaratan dan Konvensi Perangkat Lunak yang Digunakan
Kategori | Persyaratan, Konvensi, atau Versi Perangkat Lunak yang Digunakan |
---|---|
Sistem | RHEL 8 / CentOS 8 |
Perangkat Lunak | HAProxy, Nginx |
Lainnya | Akses istimewa ke sistem Linux Anda sebagai root atau melalui sudo perintah. |
Konvensi | # – membutuhkan perintah linux yang diberikan untuk dieksekusi dengan hak akses root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah$ – membutuhkan perintah linux yang diberikan untuk dieksekusi sebagai pengguna biasa yang tidak memiliki hak istimewa |
Arsitektur dan Konsep HAProxy
HAProxy dapat berjalan dalam dua mode:mode TCP Layer 4 dan Mode HTTP Layer 7. Dalam mode Layer 4 TCP, HAProxy meneruskan paket RAW TCP dari klien ke server aplikasi. Dalam mode HTTP Layer 7, HAProxy menguraikan header HTTP sebelum meneruskannya ke server aplikasi. Dalam tutorial ini, kita akan menggunakan Nginx sebagai server web yang mendukung mode HTTP Layer 7.


Balance Algorithm adalah algoritma yang digunakan oleh HAProxy untuk memilih server saat melakukan load balancing. Mode berikut tersedia:
Roundrobin
Ini adalah algoritma keseimbangan yang paling sederhana. Untuk setiap koneksi baru, itu akan ditangani oleh server backend berikutnya. Jika server backend terakhir dalam daftar tercapai, server akan mulai lagi dari atas daftar backend.
Koneksi Terkecil
Koneksi baru akan ditangani oleh server backend dengan jumlah koneksi paling sedikit. Ini berguna ketika waktu dan beban permintaan sangat bervariasi.
Sumber
Ini untuk sesi lengket, IP klien akan di-hash untuk menentukan server backend yang menerima permintaan terakhir dari IP ini. Jadi IP A akan selalu ditangani oleh backend1, dan IP B akan selalu ditangani oleh banckend2 agar tidak mengganggu sesi.
Konfigurasikan file host untuk resolusi nama
Masuk ke server penyeimbang beban dan edit /etc/hosts
file dan HAProxy loadbalancer, nginx1, nama host nginx2. Salin file yang sama di dua node nginx lainnya dan periksa konektivitas jaringan melalui perintah ping.
# vim /etc/hosts
192.168.1.108 loadbalancer.example.com
192.168.1.104 nginx1.example.com
192.168.1.105 nginx2.example.com
Instal dan Konfigurasi HAProxy
HAProxy tersedia di repositori RHEL 8 / CentOS 8, oleh karena itu masuk ke server loadbalancer dan instal paket HAProxy dengan perintah yum ini.
# yum install haproxy
Setelah berhasil diinstal, Anda dapat menggunakan perintah di bawah ini untuk memverifikasi instalasi.
# yum info haproxy
# yum info haproxy Updating Subscription Management repositories. Updating Subscription Management repositories. Last metadata expiration check: 0:06:03 ago on Sat 16 Mar 2019 11:40:24 PM +04. Installed Packages Name : haproxy Version : 1.8.14 Release : 1.el8 Arch : x86_64 Size : 4.1 M Source : haproxy-1.8.14-1.el8.src.rpm Repo : @System From repo : rhel-8-for-x86_64-appstream-beta-rpms Summary : HAProxy reverse proxy 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 one 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 from the application
Ketika instalasi selesai, pergi ke /etc/haproxy/
direktori dan buat cadangan file konfigurasi asli.
# cd /etc/haproxy/ # cp haproxy.cfg haproxy.cfg.orig
Selanjutnya lakukan perubahan di bawah ini pada file konfigurasi HAProxy haproxy.cfg
dengan editor mana pun.
#--------------------------------------------------------------------- # Example configuration for a possible web application. See the # full configuration options online. # # https://www.haproxy.org/download/1.8/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 # utilize system-wide crypto-policies ssl-default-bind-ciphers PROFILE=SYSTEM ssl-default-server-ciphers PROFILE=SYSTEM #--------------------------------------------------------------------- # 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 stats bind loadbalancer.example.com:8080 # HAProxy Monitoring run on port 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:admin # User and Password for login to the monitoring dashboard #stats admin if TRUE default_backend loadbalancer # This is optionally for monitoring backend #--------------------------------------------------------------------- # main frontend which proxys to the backends #--------------------------------------------------------------------- frontend loadbalancer bind loadbalancer.example.com:80 #acl url_static path_beg -i /static /images /javascript /stylesheets #acl url_static path_end -i .jpg .gif .png .css .js #use_backend static if url_static option http-server-close option forwardfor default_backend loadbalancer #--------------------------------------------------------------------- # static backend for serving up images, stylesheets and such #--------------------------------------------------------------------- #backend static # balance roundrobin # server static 127.0.0.1:4331 check #--------------------------------------------------------------------- # round robin balancing between the various backends #--------------------------------------------------------------------- backend loadbalancer 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 nginx1.example.com 192.168.1.104:80 check # NGINX Server1 server nginx2.example.com 192.168.1.105:80 check # NGNIX Server2
Simpan file konfigurasi ini dan keluar.
Sekarang, kita akan mengkonfigurasi daemon rsyslog untuk mencatat statistik HAProxy. Edit rsyslog.conf
file untuk mengaktifkan port UDP 514 untuk digunakan oleh rsyslog. Buka file konfigurasi rsyslog dan batalkan komentar pada baris untuk mengaktifkan koneksi UDP.
# vim /etc/rsyslog.conf
module(load="imudp") # needs to be done just once input(type="imudp" port="514")
Simpan file dengan perubahan di atas dan keluar. Kemudian buat file konfigurasi HAProxy baru untuk rsyslog dan tambahkan entri di bawah ini ke dalam file itu.
# cd /etc/rsyslog.d/ # vi haproxy.conf
local2.=info /var/log/haproxy-access.log # For Access Log local2.notice /var/log/haproxy-info.log # For Service Info - Backend, loadbalancer
Sekarang restart rsyslog dan kemudian mulai layanan HAProxy dan tambahkan HAProxy untuk memulai saat boot.
# systemctl restart rsyslog # systemctl start haproxy # systemctl enable haproxy
Instal dan Konfigurasi Nginx
Nginx sudah menjadi bagian dari repo RHEL 8 / CentOS 8 yang ada dan dapat diinstal dengan perintah berikut.
# yum install nginx
Setelah terinstal, Anda dapat memverifikasi penginstalan dengan bantuan perintah ini.
# yum info nginx
# yum info nginx Updating Subscription Management repositories. Updating Subscription Management repositories. Last metadata expiration check: 0:06:14 ago on Sat 16 Mar 2019 11:40:24 PM +04. Installed Packages Name : nginx Epoch : 1 Version : 1.14.0 Release : 3.el8+1631+ba902cf0 Arch : x86_64 Size : 568 k Source : nginx-1.14.0-3.el8+1631+ba902cf0.src.rpm Repo : rhel-8-for-x86_64-appstream-beta-rpms Summary : A high performance web server and reverse proxy server URL : http://nginx.org/ License : BSD Description : Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and : IMAP protocols, with a strong focus on high concurrency, performance and low : memory usage.
Setelah Nginx diinstal, buka direktori web dan ubah index.html
mengajukan sesuai. Pastikan Anda melakukan langkah-langkah di bawah ini pada server nginx1 dan nginx2.
# cd /usr/share/nginx/html # ls -lrth total 20K -rw-r--r--. 1 root root 2.8K Oct 31 2016 poweredby.png -rw-r--r--. 1 root root 368 Oct 31 2016 nginx-logo.png -rw-r--r--. 1 root root 3.7K Mar 16 20:39 50x.html -rw-r--r--. 1 root root 3.6K Mar 16 20:39 404.html -rw-r--r--. 1 root root 3.7K Mar 16 20:42 index.html
Selanjutnya, tambahkan Nginx untuk memulai saat boot dan kemudian mulai daemon dengan perintah di bawah ini.
# systemctl enable nginx # systemctl start nginx
Menguji fitur Load Balancing
Pengujian dapat dilakukan dengan menelusuri dan mengakses loadbalancer IP 192.168.1.108 (untuk kasus saya) dan Anda akan melihat satu kali itu pergi ke Nginx Node1 dan kedua kalinya itu pergi ke Nginx Node2 secara round robin.


Anda juga dapat memeriksa /var/log/haproxy-access.log
untuk mendapatkan informasi detail tentang load balancing.
Akses URL Statistik HAProxy
Akses dasbor untuk Laporan Statistik HAProxy yang berjalan pada port 8080 dengan nama pengguna dan sandi yang ditentukan di haproxy.cfg
berkas.
http://192.168.1.108:8080/stats


HAProxy berhasil bekerja dan bertindak sebagai penyeimbang beban untuk dua server web Nginx.
Kesimpulan
HAProxy atau Proksi Ketersediaan Tinggi adalah perangkat lunak sumber terbuka yang menyediakan ketersediaan tinggi untuk layanan berbasis TCP, ini beroperasi sebagai penyeimbang beban HTTP dan server proxy. Perangkat lunak ini ditulis dalam C dan mendukung SSL, keep-alive dan kompresi. HAProxy adalah pilihan yang tepat untuk semua orang yang membutuhkan penyeimbang beban dan server proxy yang cepat dan ringan dengan jejak memori yang kecil dan penggunaan CPU yang rendah. Haproxy dapat berjalan dalam mode Layer 4 TCP dan mode HTTP Layer 7. Nginx hanya mendukung mode HTTP Layer 7 dengan HAProxy. Jika Anda ingin menggunakan mode Layer 4 TCP, Anda dapat menggunakan server web lain seperti Apache. Di RHEL 8 / CentOS 8 Linux, HAProxy tersedia di repositori default. Sangat mudah untuk menginstal dan mengkonfigurasi.