Instal dan Atur HAProxy di Ubuntu 20.04

Selamat datang di panduan kami tentang cara menginstal dan mengatur HAProxy di Ubuntu 20.04. HAProksi (High Availability Proxy), seperti yang mungkin sudah Anda ketahui, adalah solusi gratis, sangat cepat, dan andal yang menawarkan ketersediaan tinggi, penyeimbangan beban, dan proxy untuk aplikasi berbasis TCP dan HTTP. Ini sangat cocok untuk situs web dengan lalu lintas sangat tinggi dan mendukung cukup banyak situs yang paling banyak dikunjungi di dunia.

Ini fitur ketekunan koneksi melalui cookie HTTP, load balancing, penambahan header, modifikasi, penghapusan dua arah. Ini memiliki kemampuan memblokir permintaan dan menyediakan interface untuk menampilkan status server.

Instal dan Atur HAProxy di Ubuntu 20.04

HAProxy tersedia di repo default Ubuntu 20.04. Namun, paket yang tersedia mungkin tidak up-to-date.

apt show haproxy
Package: haproxy Version: 2.0.13-2 Priority: optional Section: net Origin: Ubuntu Maintainer: Ubuntu Developers <[email protected]> Original-Maintainer: Debian HAProxy Maintainers <[email protected]> Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 3,287 kB Pre-Depends: dpkg (>= 1.17.14) Depends: libc6 (>= 2.17), libcrypt1 (>= 1:4.1.0), libgcc-s1 (>= 3.0), liblua5.3-0, libpcre2-8-0 (>= 10.22), libssl1.1 (>= 1.1.1), libsystemd0, zlib1g (>= 1:1.1.4), adduser, lsb-base (>= 3.0-6) Suggests: vim-haproxy, haproxy-doc Homepage: http://www.haproxy.org/ Download-Size: 1,519 kB APT-Sources: http://ke.archive.ubuntu.com/ubuntu focal/main amd64 Packages

Seperti yang Anda lihat, paket HAProxy yang tersedia di repo default adalah versi 2.0.13 sedangkan rilis stabil saat ini adalah versi 2.1.5.

Buat Repositori PPA HAProxy untuk Ubuntu

Namun ada, repo PPA yang menyediakan versi rilis stabil terbaru dari HAProxy yang dikelola oleh Vincent Bernat. Repo PPA ini dapat diinstal sebagai berikut;

install software-properties-common
add-apt-repository ppa:vbernat/haproxy-2.1 --yes

Jalankan pembaruan sistem

Setelah repo PPA ditambahkan ke sistem, perbarui cache paket sistem Anda;

apt update

Instal HAProxy di Ubuntu 20.04

Anda sekarang dapat menginstal HAProxy versi stabil terbaru;

apt-cache policy haproxy
haproxy: Installed: (none) Candidate: 2.1.5-1ppa1~focal Version table: 2.1.5-1ppa1~focal 500 500 http://ppa.launchpad.net/vbernat/haproxy-2.1/ubuntu focal/main amd64 Packages  2.0.13-2 500  500 http://ke.archive.ubuntu.com/ubuntu focal/main amd64 Packages

Perhatikan versi yang disediakan oleh masing-masing repo.

Anda sekarang dapat menginstal HAProxy;

apt install haproxy

Untuk memeriksa versi HAProxy yang diinstal, jalankan perintah di bawah ini;

haproxy -v
HA-Proxy version 2.1.5-1ppa1~focal 2020/06/01 - https://haproxy.org/ Status: stable branch - will stop receiving fixes around Q1 2021. Known bugs: http://www.haproxy.org/bugs/bugs-2.1.5.html Running on: Linux 5.4.0-33-generic #37-Ubuntu SMP Thu May 21 12:53:59 UTC 2020 x86_64

Konfigurasikan HAProxy Load Balancer di Ubuntu 20.04

Dengan HAProxy, Anda dapat menentukan beberapa service proxy dan mengonfigurasi HAProxy untuk memuat keseimbangan lalu lintas untuk proxy yang ditentukan. Proxy terdiri dari sistem frontend dan satu atau lebih sistem back-end. Sistem front-end menentukan alamat IP dan port tempat proxy mendengarkan serta sistem back-end yang digunakan untuk proxy tertentu.

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

File konfigurasi HAProxy terdiri dari empat bagian;

  • global: Bagian global mendefinisikan keamanan seluruh proses dan penyetelan kinerja yang memengaruhi HAProxy pada tingkat rendah.
  • defaults: Bagian global menentukan pengaturan konfigurasi yang diterapkan ke semua bagian  frontend dan  backend . Anda dapat menentukan beberapa bagian default tetapi sub-sekuen default bagian menimpa yang datang sebelumnya.
  • frontend: Ketika HAProxy ditempatkan sebagai proxy terbalik,  frontend bagian tersebut mendefinisikan alamat IP dan port yang dapat disambungkan oleh client.
  • backend: Bagian backend mendefinisikan grup server yang akan diseimbangkan beban dan ditugaskan untuk menangani permintaan.

Bagian  frontend dan  backend dapat digabungkan menggunakan  listen bagian. Hal ini juga dapat digunakan untuk halaman statistik server  HAProxy.

Baca lebih lanjut tentang bagian ini di Bagian Penting dari Konfigurasi HAProxy.

Konfigurasi file HAProxy default terlihat seperti di bawah ini;

 grep -v '^s*#' /etc/haproxy/haproxy.cfg
global 	log /dev/log	local0 	log /dev/log	local1 notice 	chroot /var/lib/haproxy 	stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners 	stats timeout 30s 	user haproxy 	group haproxy 	daemon 	ca-base /etc/ssl/certs 	crt-base /etc/ssl/private ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets defaults 	log	global 	mode	http 	option	httplog 	option	dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 	errorfile 400 /etc/haproxy/errors/400.http 	errorfile 403 /etc/haproxy/errors/403.http 	errorfile 408 /etc/haproxy/errors/408.http 	errorfile 500 /etc/haproxy/errors/500.http 	errorfile 502 /etc/haproxy/errors/502.http 	errorfile 503 /etc/haproxy/errors/503.http 	errorfile 504 /etc/haproxy/errors/504.http

Dalam file konfigurasi kami, kami akan memodifikasi di atas untuk memasukkan frontenddan backendbagian.

Sebelum Anda dapat melanjutkan, buat cadangan file konfigurasi default;

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

Tentukan Pengaturan Konfigurasi Frontend HAProxy

Seperti yang dinyatakan di atas,  frontend bagian ini mendefinisikan alamat IP dan port yang dapat dihubungkan oleh client (Alamat IP dan port pada server HAProxy itu sendiri). Oleh karena itu, seperti inilah konfigurasi frontend kami;

frontend bind 192.168.57.8:443 ssl crt /etc/ssl/certs/haproxy.pem default_backend webapps option forwardfor
  • bind: Menentukan satu atau lebih alamat dan/atau port yang mendengarkan di server frontend.
  • ssl crt: Mengonfigurasi HAProxy SSL Termination dan menentukan jalur ke sertifikat SSL/TLS.
  • default_backend: Menentukan backend yang akan digunakan ketika tidak ada aturan “use_backend” yang cocok.
  • option forwardfor: HAProxy beroperasi dalam mode reverse-proxy. Opsi ini memungkinkan server backend untuk melihat alamat IP client alih-alih alamat IP untuk server HAProxy.

CATATAN:

Dalam demo ini, backend proksi kami menggunakan sertifikat SSL/TLS. Dengan demikian, alih-alih mengonfigurasi setiap aplikasi backend untuk mengakhiri koneksi SSL/TLS-nya ( SSL Pass through), kami akan mengonfigurasi HAProxy sebagai titik penghentian sertifikat SSL/TLS ( SSL Termination).

Jika Anda tidak menggunakan penghentian SSL/TLS, hapus bagian SSL dari baris pengikatan, ssl crt /etc/ssl/certs/haproxy.pem.

Tentukan Pengaturan Konfigurasi Backend HAProxy

Di bagian ini, kita akan, dalam bentuk dasar, mendefinisikan Algoritma Penjadwalan HAProxy dan server backend yang permintaannya sedang di
proksi/beban seimbang.

backend webapps balance roundrobin server app01 192.168.59.6:80 check server app02 192.168.60.4:80 check
  • balance parameter mendefinisikan algoritma penjadwalan load balancer.
    • roundrobin memilih server secara bergiliran.
    • Algoritma umum lainnya adalah leastconn yang memungkinkan penyeimbang beban untuk meneruskan permintaan ke server dengan koneksi paling sedikit.
  • server pengaturan menentukan server yang tersedia di back end.
    • check opsi mengaktifkan pemeriksaan kesehatan di server sehingga jika salah satunya tidak aktif, permintaan diarahkan ke server backend yang tersedia.

Tentukan Pengaturan Konfigurasi Statistik HAProxy

Menurut halaman Statistik HAProxy, HAProxy dikirimkan dengan dasbor yang disebutHAProxy Stats pageyang menunjukkan banyak metrik yang mencakup kesehatan server, tingkat permintaan saat ini, waktu respons, dan banyak lagi. Metrik ini memberikan data granular pada basis per frontend, backend, dan server. Ini dapat diaktifkan menggunakan stats enable arahan, yang dapat ditambahkan ke bagian frontend atau mendengarkan. Kami menggunakan bagian mendengarkan dalam tutorial ini.

listen stats bind 192.168.57.8:8443 ssl crt /etc/ssl/certs/haproxy.pem 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 haadmin:[email protected] # Enforce Basic authentication for Stats page stats uri /stats # Statistics URL

Perhatikan bahwa baris, bind 192.168.57.8:8443 ssl crt /etc/ssl/certs/haproxy.pem, mendefinisikan IP frontend dan port untuk mengakses statistik HAProxy serta sertifikat SSL/TLS yang akan digunakan.

Simpan dan keluar dari file setelah selesai dengan konfigurasi.

Secara umum, seperti inilah konfigurasi kami.NOTEbahwa kami menambahkan baris, tune.ssl.default-dh-param 2048, ke bagian opsi konfigurasi SSL/TLS.

global 	log /dev/log	local0 	log /dev/log	local1 notice 	chroot /var/lib/haproxy 	stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners 	stats timeout 30s 	user haproxy 	group haproxy 	daemon 	ca-base /etc/ssl/certs 	crt-base /etc/ssl/private ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256 ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets tune.ssl.default-dh-param 2048 defaults 	log	global 	mode	http 	option	httplog 	option	dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 	errorfile 400 /etc/haproxy/errors/400.http 	errorfile 403 /etc/haproxy/errors/403.http 	errorfile 408 /etc/haproxy/errors/408.http 	errorfile 500 /etc/haproxy/errors/500.http 	errorfile 502 /etc/haproxy/errors/502.http 	errorfile 503 /etc/haproxy/errors/503.http 	errorfile 504 /etc/haproxy/errors/504.http frontend kifarunixlb bind 192.168.57.8:443 ssl crt /etc/ssl/certs/haproxy.pem default_backend webapps option forwardfor backend webapps balance roundrobin server app01 192.168.59.6:80 check server app02 192.168.60.4:80 check listen stats bind 192.168.57.8:8443 ssl crt /etc/ssl/certs/haproxy.pem 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 haadmin:[email protected] # Enforce Basic authentication for Stats page stats uri /stats # Statistics URL

Validasi Sintaks Konfigurasi HAProxy

Setelah selesai dengan konfigurasi, jalankan perintah di bawah ini untuk memverifikasi validasi sintaks konfigurasi HAProxy sebelum Anda dapat memulainya;

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

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

Configuration file is valid

Jika tidak, Anda akan mendapatkan error pada stdout. Pastikan untuk memperbaikinya sebelum Anda dapat melanjutkan.

Menjalankan HAProxy

Saat diinstal, HAProxy dimulai dan diaktifkan untuk berjalan pada boot sistem secara default. Anda dapat memulai kembali dengan menjalankan perintah di bawah ini

systemctl restart haproxy

Untuk memeriksa statusnya;

systemctl status haproxy
● haproxy.service - HAProxy Load Balancer Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-06-05 20:45:33 UTC; 7s ago Docs: man:haproxy(1) file:/usr/share/doc/haproxy/configuration.txt.gz Process: 21423 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS (code=exited, status=0/SUCCESS) Main PID: 21425 (haproxy) Tasks: 3 (limit: 2282) Memory: 39.5M CGroup: /system.slice/haproxy.service ├─21425 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock └─21440 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock Jun 05 20:45:33 haproxy.kifarunix-demo.com systemd[1]: Starting HAProxy Load Balancer... Jun 05 20:45:33 haproxy.kifarunix-demo.com haproxy[21425]: Proxy kifarunixlb started. Jun 05 20:45:33 haproxy.kifarunix-demo.com haproxy[21425]: Proxy kifarunixlb started. Jun 05 20:45:33 haproxy.kifarunix-demo.com haproxy[21425]: Proxy webapps started. Jun 05 20:45:33 haproxy.kifarunix-demo.com haproxy[21425]: Proxy webapps started. Jun 05 20:45:33 haproxy.kifarunix-demo.com haproxy[21425]: Proxy stats started. Jun 05 20:45:33 haproxy.kifarunix-demo.com haproxy[21425]: Proxy stats started. Jun 05 20:45:33 haproxy.kifarunix-demo.com haproxy[21425]: [NOTICE] 156/204533 (21425) : New worker #1 (21440) forked Jun 05 20:45:33 haproxy.kifarunix-demo.com systemd[1]: Started HAProxy Load Balancer.

Jika UFW sedang berjalan, Buka port 443 serta port statistik;

ufw allow 443/tcp
ufw allow 8443/tcp

Verifikasi Pengaturan Penyeimbangan Beban HAProxy di Ubuntu 20.04

Anda sekarang dapat mengakses HAProxy Anda dari browser untuk mengonfirmasi pengaturan LB Anda. Gunakan alamat, https[s]://lb-server-IP-or-hostname.

Halaman pertama menampilkan konten dari backend pertama yang ditentukan, dalam demo ini, app01. Ingat algoritma LB yang digunakan di sini, roundrobin.

Jika Anda mereload url, konten dari aplikasi kedua akan ditampilkan;

Anda juga dapat memeriksa statistik HAProxy Anda, http[s]://lb-server-IP-or-hostname[:port]/stats. Jika Anda mengaktifkan otentikasi dasar, Anda akan diminta untuk mengotentikasi.

Dan di sana Anda mendapatkan statistik Anda.

Itu membawa kita ke akhir tutorial tentang cara menginstal dan Setup HAProxy di Ubuntu 20.04.

Bacaan lebih lanjut

Panduan Konfigurasi HAProxy

Tutorial Terkait

Instal dan Setup HAProxy di CentOS 8

Setup HAProxy Load Balancer di Fedora 30/Fedora 29

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