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.