Setup HAProxy Load Balancer di Fedora 30/Fedora 29

Panduan ini akan memandu Anda melalui cara mengatur HAProxy Load balancer di Fedora 30/Fedora 29. HAProxy  menyediakan ketersediaan tinggi, penyeimbangan beban, dan proxy untuk aplikasi berbasis TCP dan HTTP. Ada beberapa algoritma yang digunakan HAProxy untuk load balancing. Beberapa yang umum digunakan meliputi;

  • Roundrobin – Ini adalah algoritme default dan memungkinkan HAProxy untuk memilih setiap server ke permintaan server 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.

Ada cukup banyak algoritma yang dapat digunakan HAProxy. Anda dapat membaca lebih lanjut tentang mereka di halaman dokumentasi.

Setup HAProxy Load Balancer di Fedora 30/Fedora 29

Untuk mendemonstrasikan bagaimana HAProxy dapat berjalan sebagai penyeimbang beban, panduan ini menggunakan tiga engine virtual; satu berjalan sebagai penyeimbang beban HAProxy dan dua server web lain yang melayani halaman html dasar;

Instal HAProxy di Fedora 30/Fedora 29

Untuk memulainya, jalankan pembaruan sistem.

dnf update dnf upgrade

Setelah pembaruan selesai, jalankan perintah di bawah ini untuk menginstal HAProxy di Fedora 30/Fedora 29.

dnf install haproxy

Konfigurasi HAProxy di Fedora 30/Fedora 29

File konfigurasi utama untuk HAProxy adalah /etc/haproxy/haproxy.cfg.

File konfigurasi HAProxy default tanpa komentar terlihat seperti di bawah ini;

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

Nah, dalam panduan ini, kami akan mengomentari frontend dan backend bagian dan menentukan konfigurasi kita sendiri.

Di bawah ini adalah kami frontend konfigurasi.

frontend lb_01 bind 192.168.43.62:80 # Bind HAProxy to port 80 default_backend webapp_backends # Define default backend servers option forwardfor # Add HTTP header "X-Forwarded-For" to requests
  • bind pengaturan menetapkan pendengar ke alamat IP dan port tertentu. 
  • default_backend memberikan nama  backend untuk mengirim lalu lintas ke.
  • option forwardformengaktifkan header HTTP “X-Forwarded-For” pada semua permintaan HAProxy yang dikirim ke server. Header ini berisi nilai yang mewakili alamat IP client

Bagian konfigurasi backend;

backend webapp_backends balance roundrobin server webapp_01.example.com 192.168.43.252:80 check server webapp_02.example.com 192.168.43.174: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.

Selain itu, kita akan mendefinisikan listener bagian statistik.

listen stats bind 192.168.43.62:80 # Bind stats to port 80 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 admin:[email protected] # Authentication for Stats page stats uri /lb_stats # Statistics URL

Akhirnya, file konfigurasi HAProxy kami terlihat seperti di bawah ini (tanpa komentar);

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 lb_01 bind		192.168.0.102:80	# Bind HAProxy to port 80 default_backend	webapp_backends		# Define default backend servers option		forwardfor		# Add HTTP header "X-Forwarded-For" to requests backend webapp_backends balance roundrobin server webapp_01.example.com 192.168.0.110:80 check server webapp_02.example.com 192.168.0.104:80 check listen stats bind 192.168.0.102:80 # Bind stats to port 80 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 admin:[email protected] # Authentication for Stats page stats uri /lb_stats # Statistics URL

Untuk membaca lebih lanjut tentang opsi konfigurasi yang digunakan di sini, periksa halaman dokumentasi.

Jalankan pemeriksaan konfigurasi;

haproxy -c -f /etc/haproxy/haproxy.cfg
Configuration file is valid

Buka port HAProxy di firewall.

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

Menjalankan HAProxy

Anda dapat memulai dan mengaktifkan HAProxy untuk berjalan pada boot sistem dengan menjalankan perintah di bawah ini;

systemctl restart haproxy systemctl enable 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 Mon 2019-07-15 02:39:48 EAT; 1min 3s ago Main PID: 12099 (haproxy) Tasks: 2 (limit: 1143) Memory: 2.3M CGroup: /system.slice/haproxy.service ├─12099 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid └─12100 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid Jul 15 02:39:47 fedora29.example.com systemd[1]: Starting HAProxy Load Balancer... Jul 15 02:39:48 fedora29.example.com systemd[1]: Started HAProxy Load Balancer.

Konfigurasikan HAProxy Logging

Untuk mengonfigurasi pencatatan standar HAProxy, edit /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.rsyslo
g.com/doc/imudp.html module(load="imudp") # needs to be done just once input(type="imudp" port="514")...

Selanjutnya, nonaktifkan pencatatan pesan yang dikirim ke local2 fasilitas di, (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.

systemctl restart rsyslog

Mulai ulang HAProxy

systemctl restart haproxy

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

tail -f /var/log/haproxy.log
Jul 16 16:52:07 localhost haproxy[2050]: 192.168.0.103:45190 [16/Jul/2019:16:52:07.214] lb_01 webapp_backends/webapp_02.example.com 0/0/0/1/1 200 358 - - ---- 2/1/0/0/0 0/0 "GET / HTTP/1.1" Jul 16 16:52:07 localhost haproxy[2050]: 192.168.0.103:45190 [16/Jul/2019:16:52:07.374] lb_01 webapp_backends/webapp_01.example.com 0/0/0/1/2 200 358 - - ---- 2/1/0/0/0 0/0 "GET / HTTP/1.1"

Konfigurasi Apache X-Forwarded-For Logging

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 ""%{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...

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...

Simpan file dan jalankan perintah pemeriksaan sintaks file konfigurasi Apache.

apachectl configtest
Syntax OK

Mulai ulang Apache

systemctl restart httpd

Menguji Penyeimbang Beban HAProxy

Untuk menguji HAProxy, navigasikan ke browser dan masukkan alamat IP HAProxy. Saat dimuat dan disegarkan, konten dari setiap server web disajikan secara bergiliran karena kami menggunakanroundrobin algoritma.

Anda juga dapat memeriksa statistik HAProxy menggunakan URL yang ditentukan di listen bagian konfigurasi, http://IP-Address/lb_stats.

Nah itu dia. Anda HAProxy di Fedora 30/Fedora 29 sekarang sedang berjalan. Untuk membaca lebih lanjut tentang konfigurasi HAProxy, lihat halaman konfigurasi HAProxy.

Tutorial Terkait

Konfigurasikan HAProxy 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