Instal dan Setup HAProxy di CentOS 8

Panduan ini akan memandu Anda melalui cara menginstal dan mengatur HAProxy di CentOS 8. HAProxy adalah penyeimbang beban opensource standar de-facto saat ini. Ini menawarkan ketersediaan tinggi, penyeimbangan beban, dan proxy untuk aplikasi berbasis TCP dan HTTP.

Saat menawarkan penyeimbangan beban, HAProxy mendukung berbagai algoritme untuk penyeimbangan beban. Beberapa yang umum digunakan meliputi;

  • Roundrobin – Ini adalah algoritme default dan memungkinkan HAProxy untuk memilih setiap server untuk melayani permintaan secara bergiliran sesuai dengan bobotnya.
  • leastconn – Server dengan jumlah koneksi terendah menerima koneksi. Direkomendasikan di mana sesi yang sangat panjang diharapkan, seperti LDAP, SQL.
  • source – Dengan algoritme ini, alamat IP sumber di-hash dan dibagi dengan berat total server yang berjalan untuk menentukan server mana yang akan menerima permintaan. Ini memastikan bahwa alamat IP client yang sama akan selalu mencapai server yang sama selama tidak ada server yang down atau up. Jika hasil hash berubah karena jumlah server yang berjalan berubah, banyak client akan diarahkan ke server yang berbeda.

Baca lebih lanjut tentang algoritma load balancing HAProxy pada  halaman dokumentasi.

Instal dan Setup HAProxy di CentOS 8

Untuk tujuan mendemonstrasikan bagaimana HAProxy pada dasarnya beroperasi, panduan ini menggunakan tiga engine virtual; satu berjalan sebagai penyeimbang beban HAProxy dan dua lainnya menjalankan server web yang melayani halaman html dasar.

Instal HAProxy di CentOS 8

Jalankan pembaruan sistem.

dnf update

Setelah pembaruan sistem selesai, Anda dapat melanjutkan untuk menginstal HAProxy. HAProxy tersedia di repo CentOS 8 default dan penginstalannya semudah menjalankan perintah;

dnf install haproxy

Mengonfigurasi HAProxy pada CentOS 8

/etc/haproxy/haproxy.cfgadalah file konfigurasi HAProxy default. Di bawah ini adalah contoh file konfigurasi default HAProxy tanpa komentar;

grep -v "^ *#" /etc/haproxy/haproxy.cfg | grep -v "^$"
global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon stats socket /var/lib/haproxy/stats ssl-default-bind-ciphers PROFILE=SYSTEM ssl-default-server-ciphers PROFILE=SYSTEM 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 frontend main bind *:5000 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 default_backend app backend static balance roundrobin server static 127.0.0.1:4331 check backend app balance roundrobin server app1 127.0.0.1:5001 check server app2 127.0.0.1:5002 check server app3 127.0.0.1:5003 check server app4 127.0.0.1:5004 check

Seperti yang Anda lihat pada file konfigurasi di atas, ada empat bagian konfigurasi HAProxy;

  • The  global pengaturan yang mendefinisikan parameter yang berlaku untuk semua server yang menjalankan HAProxy
  • Bagian  default pengaturan menentukan parameter yang berlaku untuk semua subbagian proxy dalam konfigurasi ( frontend,  backend, dan  listen).
  • Bagian  frontend pengaturan mendefinisikan soket mendengarkan server untuk permintaan koneksi client. 
  • Bagian  backend pengaturan mendefinisikan alamat IP server yang sebenarnya serta algoritma penjadwalan load balancer.
  • Terkadang, keduanya backenddan frontenddapat digabungkan di bawah listenbagian.

Baca lebih lanjut tentang bagian ini di bagian penting HAProxy.

Buat cadangan file konfigurasi HAProxy.

cp /etc/haproxy/haproxy.cfg{,.old}

Mendefinisikan Pengaturan HAProxy Global

Dalam konfigurasi kami, kami akan membiarkan pengaturan global default apa adanya.

global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon stats socket /var/lib/haproxy/stats ssl-default-bind-ciphers PROFILE=SYSTEM ssl-default-server-ciphers PROFILE=SYSTEM

Tentukan Pengaturan Default HAProxy

Kami akan membiarkan pengaturan default apa adanya;

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

Mendefinisikan Pengaturan Frontend HAProxy

Di bagian ini, kita akan mendefinisikan bagaimana HAProxy diakses secara eksternal untuk mengaktifkan akses ke server backend. Karena sebagian besar opsi telah ditentukan pada bagian pengaturan default, berikut adalah pengaturan frontend kami;

frontend lb01 bind 192.168.56.133:80 default_backend kifaruapps

Di mana;

  • bind mendefinisikan alamat IP dan port tertentu tempat HAProxy mendengarkan.
  • default_backend memberikan nama  backend untuk mengirim lalu lintas ke.

Mendefinisikan Pengaturan Backend HAProxy

Pada bagian Backend, tentukan alamat IP server backend yang sebenarnya serta algoritma penjadwalan load balancer. 

backend kifaruapps balance roundrobin server webapp01 192.168.2.112:8080 check server webapp02 192.168.58.9:80 check
  • balance pengaturan mendefinisikan algoritma penjadwalan load balancer roundrobin.
  • server pengaturan menentukan server yang tersedia di back end.
  • check – mengaktifkan pemeriksaan kesehatan di server. Secara default, server selalu dianggap tersedia. Jika disetel, server tersedia saat menerima koneksi TCP berkala, untuk memastikan bahwa server benar-benar dapat melayani permintaan.

Tentukan Pengaturan HAProxy Listen

Anda dapat secara opsional menambahkan bagian mendengarkan untuk mengaktifkan statistik HAProxy. HAProxy menyediakan dasbor yang disebutHAProxy Stats page yang menampilkan metrik yang terkait dengan kesehatan server Anda, tingkat permintaan saat ini, waktu respons, dan banyak lagi yang memberikan data terperinci per frontend, backend, dan basis server.

Halaman Stats dapat diaktifkan seperti yang ditunjukkan di bawah ini;

listen stats bind 192.168.56.133:8088 # Bind stats to port 8088 log global # Enable Logging stats enable # enable statistics reports stats hide-version # Hide the version of HAProxy stats refresh 30s # HAProxy refresh time stats show-node # Shows the hostname of the node stats auth lbadmin:[email protected] # Authentication for Stats page stats uri /lb_stats # Statistics URL

Pastikan port stats diizinkan di firewall.

firewall-cmd --add-port=8088/tcp --permanent
firewall-cmd --reload

Pastikan untuk memeriksa log SELinux untuk berjaga-jaga jika ada yang tidak dapat diakses.

Akhirnya, seperti inilah file konfigurasi HAProxy kami;

global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon stats socket /var/lib/haproxy/stats ssl-default-bind-ciphers PROFILE=SYSTEM ssl-default-server-ciphers PROFILE=SYSTEM 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 c
heck 10s maxconn 3000 frontend lb01 bind 192.168.56.133:80 default_backend kifarunixapps backend kifarunixapps balance roundrobin server webapp01 192.168.2.112:8080 check server webapp02 192.168.58.9:80 check listen stats bind 192.168.56.133:8088 # Bind stats to port 8088 stats enable # enable statistics reports stats hide-version # Hide the version of HAProxy stats refresh 30s # HAProxy refresh time stats show-node # Shows the hostname of the node stats auth lbadmin:[email protected] # Authentication for Stats page stats uri /lb_stats # Statistics URL

Baca lebih lanjut tentang opsi konfigurasi di halaman dokumentasi HAProxy .

Verifikasi Konfigurasi HAProxy

Untuk memeriksa file konfigurasi HAProxy untuk error sintaks, jalankan perintah di bawah ini;

haproxy -c -f /etc/haproxy/haproxy.cfg

Jika semuanya baik-baik saja, Anda harus mendapatkan output seperti itu;

Configuration file is valid

Buka port HAProxy di firewall.

firewall-cmd --add-port=80/tcp --permanent firewall-cmd --reload

Menjalankan HAProxy di CentOS 8

Untuk memulai dan mengaktifkan HAProxy untuk berjalan pada boot sistem, jalankan perintah di bawah ini;

systemctl enable --now haproxy

Periksa status HAProxy.

systemctl status haproxy
● haproxy.service - HAProxy Load Balancer Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2020-03-05 22:34:58 EAT; 2s ago Process: 3262 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q (code=exited, status=0/SUCCESS) Main PID: 3263 (haproxy) Tasks: 2 (limit: 5047) Memory: 2.5M CGroup: /system.slice/haproxy.service ├─3263 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid └─3265 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid Mar 05 22:34:58 ceph-admin.kifarunix-demo.com systemd[1]: Starting HAProxy Load Balancer... Mar 05 22:34:58 ceph-admin.kifarunix-demo.com systemd[1]: Started HAProxy Load Balancer.

Konfigurasikan HAProxy Logging di CentOS 8

Untuk mengonfigurasi edit logging standar HAProxy /etc/rsyslog.conf dan aktifkan penerimaan syslog UDP pada port 514 dengan menghapus komentar (#) pada garis, #module(load=”imudp”) dan #input(type=”imudp” port=”514″) seperti yang ditunjukkan di bawah ini.

vim /etc/rsyslog.conf
... # Provides UDP syslog reception # for parameters see http://www.rsyslog.com/doc/imudp.html module(load="imudp") # needs to be done just once input(type="imudp" port="514")...

Selanjutnya, nonaktifkan pencatatan pesan otentikasi pribadi yang dikirim ke local2 fasilitas, (local2.none) pada /var/log/messages dan aktifkan masuk /var/log/haproxy.log seperti yang ditunjukkan di bawah ini.

... *.info;mail.none;authpriv.none;cron.none,local2.none /var/log/messages local2.* /var/log/haproxy.log

Simpan file konfigurasi dan jalankan perintah di bawah ini untuk memeriksa error apa pun.

rsyslogd -N1

Selanjutnya, restart Rsyslog dan HAProxy

systemctl restart rsyslog haproxy

Anda sekarang seharusnya dapat memiliki HAProxy log on /var/log/haproxy.log.

tail -f /var/log/haproxy.log

Konfigurasi Apache X-Forwarded-Untuk Logging di Server Backend

Karena kami telah mengonfigurasi HAProxy untuk menambahkan header HTTP “X-Forwarded-For” ke semua permintaan yang dikirim ke server backend (option forwardfor), Anda dapat mengonfigurasi logging untuk hal yang sama di server backend. Ini memastikan alamat IP dari client yang meminta diambil alih-alih penyeimbang beban HAProxy.

Oleh karena itu, login ke server backend dan konfigurasikan Apache untuk mencatat header X-Forwarded-For. Baris default yang kita ubah adalah;

... LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined LogFormat "%h %l %u %t "%r" %>s %b" common...

Oleh karena itu, edit baris ini sehingga terlihat seperti;

... LogFormat ""%{X-Forwarded-For}i" %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined LogFormat "%h %l %u %t "%r" %>s %b" common...

Simpan file dan jalankan perintah pemeriksaan sintaks file konfigurasi Apache.

apachectl configtest
Syntax OK

Mulai ulang Apache

systemctl restart httpd

Menguji HAProxy Load Balancer di CentOS 8

Untuk memverifikasi bahwa HAProxy dapat memuat keseimbangan permintaan http, navigasikan ke browser dan akses HAProxy menggunakan nama host atau alamat IP.

Karena menggunakan roundrobin algoritme, saat Anda me-refresh halaman, Anda seharusnya bisa mendapatkan konten dari kedua server backend yang dilayani.

Memeriksa Statistik HAProxy

Untuk memeriksa statistik server frontend dan backend Anda, cukup navigasikan ke url statistik yang ditentukan di bagian mendengarkan; http://server-IP_OR_hostname:8088/lb_stats. Tetapkan URL yang sesuai.

Saat diminta, autentikasi menggunakan kredensial yang ditentukan oleh stats authdilisten section, dalam demo ini, lbadmin: [email protected], untuk nama user dan password.

Statistik HAProxy

Itu menandai akhir dari panduan kami tentang cara menginstal dan mengatur HAProxy di CentOS 8.

Tutorial Terkait

Setup HAProxy Load Balancer di Fedora 30/Fedora 29

Konfigurasikan HAP r oxy Load Balancer dengan SSL di Ubuntu 18.04/Debian 10/9

Cara Memasang dan Mengonfigurasi Pound sebagai penyeimbang Beban HTTP Apache di Ubuntu 16.04