Cara Mengatur HAProxy sebagai Load Balancer untuk Nginx di CentOS 8
Untuk memastikan ketersediaan aplikasi web maksimum, skalabilitas, dan kinerja tinggi, penerapan teknologi yang memperkenalkan redundansi, seperti pengelompokan server dan penyeimbangan beban, kini menjadi hal yang umum. Misalnya, menyiapkan sekelompok server yang semuanya menjalankan aplikasi yang sama dan kemudian menerapkan penyeimbang beban di depannya untuk mendistribusikan lalu lintas.
HAProxy adalah penyeimbang beban TCP/HTTP sumber terbuka, kuat, berkinerja tinggi, andal, aman, dan ketersediaan tinggi yang banyak digunakan, server proxy, dan terminator SSL/TLS yang dibuat untuk situs web dengan lalu lintas sangat tinggi. Ini berjalan dengan baik di Linux, Solaris, FreeBSD, OpenBSD serta sistem operasi AIX.
Panduan ini menunjukkan cara menyiapkan penyeimbang beban ketersediaan tinggi khusus dengan HAProxy di CentOS 8 untuk mengontrol lalu lintas di cluster server web NGINX. Ini juga menunjukkan cara mengonfigurasi penghentian SSL/TLS di HAProxy.
Prasyarat:
Total 4 server dengan minimal instalasi CentOS 8.
Pengaturan Lingkungan Uji
----------- HAProxy Server Setup -----------
HA Proxy Server - hostname: haproxy-server.tecmint.lan; IP: 10.42.0.247
Test Site Domain: www.tecmint.lan
----------- Client Web Servers Setup -----------
Web Server #1 - hostname: websrv1.tecmint.lan; IP: 10.42.0.200
Web Server #2 - hostname: websrv2.tecmint.lan; IP: 10.42.0.21
Web Server #3 - hostname: websrv3.tecmint.lan; IP: 10.42.0.34
Langkah 1: Menyiapkan Server HTTP Nginx di Mesin Klien
1. Masuk ke semua mesin klien CentOS 8 Anda dan instal server web Nginx menggunakan manajer paket dnf seperti yang ditunjukkan.
dnf install Nginx
2. Selanjutnya, mulai layanan Nginx, untuk saat ini, aktifkan layanan tersebut untuk memulai secara otomatis saat boot sistem dan konfirmasikan bahwa layanan tersebut aktif dan berjalan dengan memeriksa statusnya, menggunakan systemctl perintah (lakukan ini di semua mesin klien).
systemctl start nginx
systemctl enable nginx
systemctl status nginx
3. Selain itu, jika layanan firewalld berjalan di semua mesin klien (yang dapat Anda periksa dengan menjalankan systemctl start firewalld), Anda harus menambahkan HTTP dan Layanan HTTPS dalam konfigurasi firewall untuk memungkinkan permintaan dari penyeimbang beban melewati firewall ke server web Nginx. Kemudian muat ulang layanan firewalld untuk menerapkan perubahan baru (lakukan ini pada semua mesin klien).
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload
4. Selanjutnya, buka browser web di komputer lokal Anda dan uji apakah instalasi Nginx berfungsi dengan baik. Gunakan IP klien untuk bernavigasi, setelah Anda melihat halaman pengujian Nginx, itu berarti server web yang diinstal pada mesin klien berfungsi dengan baik.
5. Selanjutnya, kita perlu membuat halaman pengujian pada mesin klien yang nantinya akan kita gunakan untuk menguji penyiapan HAProxy.
----------- Web Server #1 -----------
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv1.tecmint.lan"> /usr/share/nginx/html/index.html
----------- Web Server #2 -----------
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv2.tecmint.lan"> /usr/share/nginx/html/index.html
----------- Web Server #3 -----------
cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.orig
echo "Showing site from websrv3.tecmint.lan"> /usr/share/nginx/html/index.html
Langkah 2: Menginstal dan Mengonfigurasi Server HAProxy di CentOS 8
6. Sekarang instal paket HAProxy di server HAProxy dengan menjalankan perintah berikut.
dnf install haproxy
7. Selanjutnya, mulai layanan HAProxy, aktifkan layanan untuk memulai otomatis saat boot sistem dan verifikasi statusnya.
systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy
8. Sekarang kita akan mengkonfigurasi HAProxy menggunakan file konfigurasi berikut.
vi /etc/haproxy/haproxy.cfg
File konfigurasi dibagi menjadi empat bagian utama.
- setelan global – menetapkan parameter seluruh proses.
- defaults – bagian ini menetapkan parameter default untuk semua bagian lain setelah deklarasinya.
- frontend – bagian ini menjelaskan sekumpulan soket pendengar yang menerima koneksi klien.
- Backend – bagian ini menjelaskan sekumpulan server yang akan disambungkan oleh proxy untuk meneruskan koneksi masuk.
Untuk memahami opsi pada setelan global dan default, baca dokumentasi HAProxy (tautan tersedia di akhir artikel). Untuk panduan ini, kami akan menggunakan default.
Menyiapkan Pencatatan HAProxy
9. HAProxy ketika diterapkan akan memainkan peran penting dalam infrastruktur TI Anda, sehingga mengonfigurasi logging untuk itu merupakan persyaratan dasar; ini memungkinkan Anda mendapatkan wawasan tentang setiap koneksi ke server web backend Anda.
Parameter log (disorot dalam tangkapan layar berikut) mendeklarasikan server Syslog global (seperti rsyslog sebagai default di CentOS) yang akan menerima pesan log. Lebih dari satu server dapat dideklarasikan di sini.
Konfigurasi default menunjuk ke localhost (127.0.0.1) dan local2 adalah kode fasilitas default yang digunakan untuk mengidentifikasi pesan log HAProxy di bawah rsyslog.
10. Selanjutnya, Anda perlu memberi tahu server rsyslog cara menerima dan memproses pesan log HAProxy. Buka file konfigurasi rsyslog ke /etc/rsyslog.conf atau buat file baru di direktori /etc/rsyslog.d, misalnya /etc/rsyslog .d/haproxy.conf.
vi /etc/rsyslog.d/haproxy.conf
Salin dan tempel konfigurasi berikut untuk mengumpulkan log dengan UDP pada port default 514.
$ModLoad imudp
$UDPServerAddress 127.0.0.1
$UDPServerRun 514
Tambahkan juga baris ini untuk memerintahkan rsyslog menulis ke dua file log terpisah berdasarkan tingkat keparahannya, dengan local2 adalah kode fasilitas yang ditentukan dalam konfigurasi HAProxy di atas.
local2.* /var/log/haproxy-traffic.log
local2.notice /var/log/haproxy-admin.log
11. Simpan file dan tutup. Kemudian restart layanan rsyslog untuk menerapkan perubahan terkini.
systemctl restart rsyslog
Mengonfigurasi Front-end dan Back-end HAProxy
12. Di bagian ini, kami akan mendemonstrasikan cara mengonfigurasi proxy front-end dan back-end. Kembali ke file konfigurasi HAProxy dan ubah bagian front-end dan backend default sebagai berikut. Kami tidak akan membahas penjelasan detail setiap parameter, Anda selalu dapat merujuk ke dokumentasi resmi.
Konfigurasi berikut mendefinisikan bagian dengarkan yang digunakan untuk menyajikan halaman Statistik HAProxy. Parameter bind menetapkan pendengar ke alamat IP tertentu (*
untuk semua dalam kasus ini) dan port (9000 ).
Setelan statistik aktifkan mengaktifkan laman statistik yang akan diakses menggunakan URI /stats (yaitu http://server_ip:9000/stats
) .
Pengaturan statistik auth digunakan untuk menambahkan otentikasi dasar saat mengakses halaman (ganti haproxy dan Lostp@1ss dengan nama pengguna dan kata sandi Anda pilihan).
listen stats
bind *:9000
stats enable
stats hide-version
stats uri /stats
stats admin if LOCALHOST
stats auth haproxy:Lostp@1ss
13. Konfigurasi berikutnya mendefinisikan bagian frontend yang disebut TL (Anda dapat memberi nama sesuai keinginan Anda). Parameter mode menentukan mode pengoperasian HAProxy.
Parameter acl (Daftar Kontrol Akses) digunakan untuk membuat keputusan berdasarkan konten yang diekstrak dari permintaan. Dalam contoh ini, permintaan dianggap HTTP biasa jika tidak dibuat melalui SSL.
Kemudian setelan http-request set-header digunakan untuk menambahkan header HTTP ke permintaan. Hal ini membantu memberi tahu Nginx bahwa permintaan awal dibuat melalui HTTP (atau melalui port 80).
Direktif default_backend atau use_backend mendefinisikan server backend, dalam hal ini, direferensikan oleh TL_web_servers.
Perhatikan bahwa HAProxy akan menampilkan “kesalahan 503 Layanan Tidak Tersedia ” jika permintaan tidak dirutekan oleh use_backend atau default_backend direktif.
frontend TL
bind *:80
mode http
acl http ssl_fc,not
http-request set-header X-Forwarded-Protocol http if http
default_backend TL_web_servers
14. Kemudian kita perlu menentukan bagian backend di mana pengaturan saldo menentukan bagaimana HAProxy memilih server back-end untuk memproses permintaan jika tidak ada metode persistensi mengesampingkan pilihan itu.
Perintah cookie mengaktifkan persistensi berbasis cookie, memerintahkan HAProxy untuk mengirimkan cookie bernama SERVERID ke klien dan untuk mengaitkannya dengan ID server yang memberikan respons awal.
Direktif server digunakan untuk mendefinisikan server upstream dalam format sever_name (misalnya websrv1), server_IP:port dan opsi.
Salah satu opsi utamanya adalah periksa yang memberitahukan HAProxy untuk terus memeriksa ketersediaan server dan melaporkan pada laman statistik.
backend TL_web_servers
mode http
balance roundrobin
option httpchk HEAD /
cookie SERVERUID insert indirect nocache
server websrv1 10.42.0.200:80 cookie websrv1 check
server websrv2 10.42.0.21:80 cookie websrv2 check
server websrv3 10.42.0.34:80 cookie websrv3 check
Komentari bagian frontend dan backend lainnya seperti yang ditunjukkan pada tangkapan layar berikut. Simpan file dan tutup.
15. Sekarang restart layanan HAProxy untuk menerapkan perubahan baru.
systemctl restart haproxy
16. Selanjutnya, pastikan bahwa HTTP (port 80) dan HTTPS (port 433) layanan dibuka di firewall untuk menerima permintaan klien sebagai berikut. Selain itu, buka port 9000 di firewall untuk mengakses halaman statistik dan memuat ulang pengaturan firewall.
firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent –add-service=https
firewall-cmd --zone=public --permanent --add-port=9000/tcp
firewall-cmd --reload
Langkah 3: Menguji Pengaturan HAProxy dan Melihat Statistik
17. Sekarang waktunya menguji penyiapan HAPrxoy. Pada mesin desktop lokal tempat Anda mengakses semua server, tambahkan baris berikut di file /etc/hosts untuk memungkinkan kami menggunakan domain situs tiruan.
10.42.0.247 www.tecmint.lan
18. Kemudian buka browser dan navigasikan menggunakan alamat server atau domain situs.
http://10.42.0.247/
OR
http://www.tecmint.lan/
19. Untuk mengakses halaman statistik HAProxy, gunakan alamat berikut.
http://10.42.0.247:9000/stats
Kemudian gunakan nama pengguna dan kata sandi yang Anda tentukan di file konfigurasi HAProxy (lihat parameter autentikasi statistik).
Setelah login berhasil, Anda akan diarahkan ke halaman statistik HAProxy yang menunjukkan metrik yang mencakup kesehatan server Anda, tingkat permintaan saat ini, waktu respons, dan banyak lagi.
Untuk mendemonstrasikan cara kerja laporan status mengenai kerja kode warna, kami telah menempatkan salah satu server back-end.
Langkah 4: Mengonfigurasi HTTPS di HAProxy Menggunakan Sertifikat SSL yang Ditandatangani Sendiri
20. Di bagian terakhir ini, kami akan mendemonstrasikan cara mengonfigurasi SSL/TLS untuk mengamankan semua komunikasi antara server HAProxy dan klien. HAProxy mendukung empat mode konfigurasi HTTPS utama, namun untuk panduan ini, kita akan menggunakan pembongkaran SSL/TLS.
Dalam mode pembongkaran SSL/TLS, HAProxy menguraikan lalu lintas di sisi klien dan terhubung dalam lalu lintas yang jelas ke server backend.
Kita akan mulai dengan membuat sertifikat dan kunci seperti yang ditunjukkan (jawab pertanyaan berdasarkan detail perusahaan Anda selama pembuatan sertifikat, seperti yang disorot pada tangkapan layar).
mkdir /etc/ssl/tecmint.lan
cd /etc/ssl/tecmint.lan/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/tecmint.lan.key -out /etc/ssl/tecmint.lan.crt
cd /etc/ssl/tecmint.lan/
cat tecmint.crt tecmint.key >tecmint.pem
ls -l
21. Selanjutnya, buka file konfigurasi HAProxy (/etc/haproxy/haproxy.cfg) dan edit bagian front-end.
frontend TL
bind *:80
bind *:443 ssl crt /etc/ssl/tecmint.lan/tecmint.pem
redirect scheme https if !{ ssl_fc }
mode http
acl http ssl_fc,not
acl https ssl_fc
http-request set-header X-Forwarded-Protocol http if http
http-request set-header X-Forwarded-Protocol https if https
default_backend TL_web_servers
Simpan file dan tutup.
22. Kemudian restart layanan HAProxy untuk menerapkan perubahan baru.
systemctl restart haproxy.service
23. Selanjutnya, buka browser web dan coba akses situs tersebut sekali lagi. Browser akan menampilkan kesalahan karena sertifikat yang ditandatangani sendiri, klik Lanjutan untuk melanjutkan.
Itu saja untuk saat ini! Setiap aplikasi web memiliki serangkaian persyaratannya sendiri, Anda perlu merancang dan mengonfigurasi penyeimbangan beban agar sesuai dengan infrastruktur TI dan kebutuhan aplikasi Anda.
Untuk mendapatkan wawasan lebih lanjut tentang beberapa opsi konfigurasi yang digunakan dalam panduan ini, dan secara umum cara menggunakan HAProxy, lihat dokumentasi resmi edisi komunitas HAProxy atau dokumentasi versi perusahaan HAProxy. Anda dapat mengirimkan pertanyaan atau pemikiran apa pun melalui formulir umpan balik di bawah.