Πώς να ρυθμίσετε το HAProxy ως Load Balancer για το Nginx στο CentOS 8


Για να εξασφαλιστεί η μέγιστη διαθεσιμότητα, επεκτασιμότητα και υψηλή απόδοση εφαρμογών Ιστού, είναι πλέον σύνηθες να εφαρμόζονται τεχνολογίες που εισάγουν πλεονασμό, όπως η ομαδοποίηση διακομιστών και η εξισορρόπηση φορτίου. Για παράδειγμα, δημιουργώντας ένα σύμπλεγμα διακομιστών που εκτελούν όλοι τις ίδιες εφαρμογές και στη συνέχεια ανάπτυξη εξισορρόπησης φορτίου μπροστά τους για τη διανομή της κίνησης.

Το HAProxy είναι ένας ανοιχτός κώδικας, ισχυρός, υψηλής απόδοσης, αξιόπιστος, ασφαλής και ευρέως χρησιμοποιούμενος εξισορροπητής φόρτου TCP/HTTP, διακομιστής μεσολάβησης και τερματιστής SSL/TLS, κατασκευασμένος για ιστοσελίδες πολύ υψηλής επισκεψιμότητας. Λειτουργεί αξιόπιστα σε λειτουργικά συστήματα Linux, Solaris, FreeBSD, OpenBSD καθώς και σε λειτουργικά συστήματα AIX.

Αυτός ο οδηγός δείχνει πώς να ρυθμίσετε έναν ειδικό εξισορροπητή φορτίου υψηλής διαθεσιμότητας με HAProxy στο CentOS 8 για τον έλεγχο της κυκλοφορίας σε ένα σύμπλεγμα διακομιστών ιστού NGINX. Δείχνει επίσης πώς να ρυθμίσετε τον τερματισμό SSL/TLS στο HAProxy.

Προαπαιτούμενα:

Συνολικά 4 διακομιστές με ελάχιστη εγκατάσταση CentOS 8.

Ρύθμιση περιβάλλοντος δοκιμής

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

Βήμα 1: Ρύθμιση διακομιστή Nginx HTTP στις μηχανές πελατών

1. Συνδεθείτε σε όλους τους υπολογιστές-πελάτες CentOS 8 και εγκαταστήστε τον διακομιστή ιστού Nginx χρησιμοποιώντας τη διαχείριση πακέτων dnf όπως φαίνεται.

dnf install Nginx

2. Στη συνέχεια, ξεκινήστε την υπηρεσία Nginx, προς το παρόν, ενεργοποιήστε την αυτόματη εκκίνηση κατά την εκκίνηση του συστήματος και επιβεβαιώστε ότι είναι σε λειτουργία ελέγχοντας την κατάστασή της, χρησιμοποιώντας το systemctl εντολές (κάντε αυτό σε όλους τους υπολογιστές-πελάτες).

systemctl start nginx
systemctl enable nginx
systemctl status nginx

3. Επίσης, εάν η υπηρεσία τείχους προστασίας εκτελείται σε όλους τους υπολογιστές-πελάτες (το οποίο μπορείτε να ελέγξετε εκτελώντας το τείχος προστασίας systemctl start), πρέπει να προσθέσετε τα HTTP και Υπηρεσίες HTTPS στη διαμόρφωση του τείχους προστασίας για να επιτρέπουν αιτήματα από το πρόγραμμα εξισορρόπησης φορτίου να περνούν μέσω του τείχους προστασίας στους διακομιστές ιστού Nginx. Στη συνέχεια, φορτώστε ξανά την υπηρεσία τείχος προστασίας για να πραγματοποιήσετε τις νέες αλλαγές (κάντε αυτό σε όλους τους υπολογιστές-πελάτες).

firewall-cmd --zone=public --permanent --add-service=http
firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

4. Στη συνέχεια, ανοίξτε ένα πρόγραμμα περιήγησης ιστού στα τοπικά σας μηχανήματα και ελέγξτε εάν η εγκατάσταση του Nginx λειτουργεί καλά. Χρησιμοποιήστε τα IP του πελάτη για πλοήγηση, αφού δείτε τη δοκιμαστική σελίδα Nginx, σημαίνει ότι ο διακομιστής ιστού που είναι εγκατεστημένος στον υπολογιστή-πελάτη λειτουργεί σωστά.

5. Στη συνέχεια, πρέπει να δημιουργήσουμε δοκιμαστικές σελίδες στους υπολογιστές-πελάτες που θα χρησιμοποιήσουμε αργότερα για να δοκιμάσουμε τη ρύθμιση του 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

Βήμα 2: Εγκατάσταση και ρύθμιση παραμέτρων διακομιστή HAProxy στο CentOS 8

6. Τώρα εγκαταστήστε το πακέτο HAProxy στον διακομιστή HAProxy εκτελώντας την ακόλουθη εντολή.

dnf install haproxy

7. Στη συνέχεια, ξεκινήστε την υπηρεσία HAProxy, ενεργοποιήστε την αυτόματη εκκίνηση κατά την εκκίνηση του συστήματος και επαληθεύστε την κατάστασή της.

systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy

8. Τώρα θα διαμορφώσουμε το HAProxy χρησιμοποιώντας το ακόλουθο αρχείο διαμόρφωσης.

vi /etc/haproxy/haproxy.cfg

Το αρχείο διαμόρφωσης χωρίζεται σε τέσσερις κύριες ενότητες.

  • καθολικές ρυθμίσεις – ορίζει παραμέτρους σε όλη τη διαδικασία.
  • προεπιλογές – αυτή η ενότητα ορίζει τις προεπιλεγμένες παραμέτρους για όλες τις άλλες ενότητες μετά τη δήλωσή της.
  • frontend – αυτή η ενότητα περιγράφει ένα σύνολο υποδοχών ακρόασης που δέχονται συνδέσεις πελάτη.
  • Backend – αυτή η ενότητα περιγράφει ένα σύνολο διακομιστών στους οποίους θα συνδεθεί ο διακομιστής μεσολάβησης για τις προωθητικές εισερχόμενες συνδέσεις.

Για να κατανοήσετε τις επιλογές στις καθολικές ρυθμίσεις και στις προεπιλογές, διαβάστε την τεκμηρίωση του HAProxy (σύνδεσμος παρέχεται στο τέλος του άρθρου). Για αυτόν τον οδηγό, θα χρησιμοποιήσουμε τις προεπιλογές.

Ρύθμιση καταγραφής HAProxy

9. Το HAProxy όταν αναπτυχθεί θα διαδραματίσει σημαντικό ρόλο στην υποδομή πληροφορικής σας, επομένως η διαμόρφωση της καταγραφής για αυτό αποτελεί βασική απαίτηση. Αυτό σας επιτρέπει να λαμβάνετε πληροφορίες σχετικά με κάθε σύνδεση με τους διακομιστές ιστού υποστήριξης.

Η παράμετρος καταγραφής (επισημαίνεται στο παρακάτω στιγμιότυπο οθόνης) δηλώνει έναν παγκόσμιο διακομιστή Syslog (όπως το rsyslog ως προεπιλογή στο CentOS) που θα λαμβάνει μηνύματα καταγραφής. Εδώ μπορούν να δηλωθούν περισσότεροι από ένας διακομιστές.

Η προεπιλεγμένη ρύθμιση παραμέτρων οδηγεί στον localhost (127.0.0.1) και ο local2 είναι ο προεπιλεγμένος κωδικός εγκατάστασης που χρησιμοποιείται για την αναγνώριση μηνυμάτων καταγραφής HAProxy στην ενότητα rsyslog.

10. Στη συνέχεια, πρέπει να πείτε στον διακομιστή rsyslog πώς να λαμβάνει και να επεξεργάζεται μηνύματα καταγραφής HAProxy. Ανοίξτε το αρχείο διαμόρφωσης rsyslog στο /etc/rsyslog.conf ή δημιουργήστε ένα νέο αρχείο στον κατάλογο /etc/rsyslog.d, για παράδειγμα /etc/rsyslog .d/haproxy.conf.

vi /etc/rsyslog.d/haproxy.conf

Αντιγράψτε και επικολλήστε την ακόλουθη διαμόρφωση για τη συλλογή αρχείων καταγραφής με UDP στην προεπιλεγμένη θύρα 514.

$ModLoad imudp 
$UDPServerAddress 127.0.0.1 
$UDPServerRun 514 

Προσθέστε επίσης αυτές τις γραμμές για να δώσετε εντολή στο rsyslog να εγγράψει σε δύο ξεχωριστά αρχεία καταγραφής με βάση τη σοβαρότητα, όπου local2 είναι ο κωδικός εγκατάστασης που ορίζεται στη διαμόρφωση HAProxy παραπάνω.

local2.* 	/var/log/haproxy-traffic.log 
local2.notice 	/var/log/haproxy-admin.log

11. Αποθηκεύστε το αρχείο και κλείστε το. Στη συνέχεια, επανεκκινήστε την υπηρεσία rsyslog για να εφαρμόσετε τις πρόσφατες αλλαγές.

systemctl restart rsyslog

Ρύθμιση παραμέτρων HAProxy Front-end και Back-ends

12. Σε αυτήν την ενότητα, θα δείξουμε πώς να ρυθμίσετε τις παραμέτρους των διακομιστών front-end και back-end. Επιστρέψτε στο αρχείο διαμόρφωσης HAProxy και τροποποιήστε τις προεπιλεγμένες ενότητες front-end και backend ως εξής. Δεν θα μπούμε σε μια λεπτομερή εξήγηση για κάθε παράμετρο, μπορείτε πάντα να ανατρέξετε στην επίσημη τεκμηρίωση.

Η ακόλουθη διαμόρφωση ορίζει μια ενότητα ακρόαση που χρησιμοποιείται για την προβολή της σελίδας Στατιστικά HAProxy. Η παράμετρος bind εκχωρεί σε έναν ακροατή μια δεδομένη διεύθυνση IP (* για όλα σε αυτήν την περίπτωση) και port (9000 ).

Η ρύθμιση στατιστικών ενεργοποίηση ενεργοποιεί τη σελίδα στατιστικών στοιχείων στην οποία θα έχετε πρόσβαση χρησιμοποιώντας το URI /stats (δηλ. http://server_ip:9000/stats) .

Η ρύθμιση στατιστικών auth χρησιμοποιείται για την προσθήκη ενός βασικού ελέγχου ταυτότητας κατά την πρόσβαση στη σελίδα (αντικαταστήστε τα haproxy και Lostp@1ss με ένα όνομα χρήστη και κωδικό πρόσβασης επιλογή).

listen stats
    bind *:9000
    stats enable
    stats hide-version
    stats uri /stats
    stats admin if LOCALHOST
    stats auth haproxy:Lostp@1ss

13. Η επόμενη διαμόρφωση ορίζει μια ενότητα διεπαφής που ονομάζεται TL (μπορείτε να δώσετε ένα όνομα της αρεσκείας σας). Η παράμετρος mode καθορίζει τη λειτουργία στην οποία λειτουργεί το HAProxy.

Η παράμετρος acl (Λίστα ελέγχου πρόσβασης) χρησιμοποιείται για τη λήψη απόφασης με βάση το περιεχόμενο που εξάγεται από το αίτημα. Σε αυτό το παράδειγμα, το αίτημα θεωρείται απλό HTTP εάν δεν έχει γίνει μέσω SSL.

Στη συνέχεια, η ρύθμιση http-request-set-header χρησιμοποιείται για την προσθήκη μιας κεφαλίδας HTTP στο αίτημα. Αυτό βοηθά στην ενημέρωση του Nginx ότι το αρχικό αίτημα υποβλήθηκε μέσω HTTP (ή μέσω της θύρας 80).

Η οδηγία default_backend ή use_backend ορίζει τους διακομιστές υποστήριξης, σε αυτήν την περίπτωση, στους οποίους αναφέρονται οι TL_web_servers.

Λάβετε υπόψη ότι το HAProxy θα επιστρέψει ένα "σφάλμα μη διαθέσιμης υπηρεσίας 503 " εάν ένα αίτημα δεν δρομολογηθεί από use_backend ή default_backend > οδηγία.

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. Στη συνέχεια, πρέπει να ορίσουμε μια ενότητα υποστήριξης όπου η ρύθμιση balance καθορίζει τον τρόπο με τον οποίο το HAProxy επιλέγει τους διακομιστές υποστήριξης για την επεξεργασία ενός αιτήματος, εάν όχι Η μέθοδος επιμονής υπερισχύει αυτής της επιλογής.

Η οδηγία cookie επιτρέπει τη διατήρηση βασισμένη σε cookie, δίνει εντολή στο HAProxy να στείλει ένα cookie με το όνομα SERVERID στον πελάτη και για να το συσχετίσετε με το ID του διακομιστή που έδωσε την αρχική απόκριση.

Η οδηγία διακομιστής χρησιμοποιείται για τον ορισμό των ανοδικών διακομιστών στη μορφή όνομα_διακομιστή (π.χ. websrv1), διακομιστής_IP:θύρα και επιλογές.

Μια βασική επιλογή είναι ο έλεγχος που λέει στο HAProxy να συνεχίσει να ελέγχει τη διαθεσιμότητα ενός διακομιστή και να αναφέρει στη σελίδα στατιστικών στοιχείων.

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

Σχολιάστε τυχόν άλλες ενότητες frontend και backend όπως φαίνεται στο στιγμιότυπο οθόνης που ακολουθεί. Αποθηκεύστε το αρχείο και κλείστε το.

15. Τώρα επανεκκινήστε την υπηρεσία HAProxy για να εφαρμόσετε τις νέες αλλαγές.

systemctl restart haproxy

16. Στη συνέχεια, βεβαιωθείτε ότι το HTTP (θύρα 80) και το HTTPS (θύρα 433) ανοίγουν οι υπηρεσίες στο τείχος προστασίας για να δεχτούν αιτήματα πελατών ως εξής. Επίσης, ανοίξτε τη θύρα 9000 στο τείχος προστασίας για πρόσβαση στη σελίδα στατιστικών στοιχείων και φορτώστε ξανά τις ρυθμίσεις του τείχους προστασίας.

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

Βήμα 3: Δοκιμή εγκατάστασης HAProxy και προβολή στατιστικών

17. Τώρα είναι ώρα να δοκιμάσετε τη ρύθμιση HAPrxoy. Στον τοπικό επιτραπέζιο υπολογιστή από τον οποίο έχετε πρόσβαση σε όλους τους διακομιστές, προσθέστε την ακόλουθη γραμμή στο αρχείο /etc/hosts για να μπορέσουμε να χρησιμοποιήσουμε τον εικονικό τομέα ιστότοπου.

10.42.0.247  www.tecmint.lan

18. Στη συνέχεια, ανοίξτε ένα πρόγραμμα περιήγησης και πλοηγηθείτε χρησιμοποιώντας είτε τη διεύθυνση διακομιστή είτε τον τομέα του ιστότοπου.

http://10.42.0.247/
OR
http://www.tecmint.lan/

19. Για πρόσβαση στη σελίδα στατιστικών στοιχείων HAProxy, χρησιμοποιήστε την ακόλουθη διεύθυνση.

http://10.42.0.247:9000/stats

Στη συνέχεια χρησιμοποιήστε το όνομα χρήστη και τον κωδικό πρόσβασης που ορίσατε στο αρχείο διαμόρφωσης HAProxy (ανατρέξτε στην παράμετρο stats auth).

Μετά από μια επιτυχημένη σύνδεση, θα μεταβείτε στη σελίδα στατιστικών στοιχείων HAProxy που σας δείχνει μετρήσεις που καλύπτουν την υγεία των διακομιστών σας, τα τρέχοντα ποσοστά αιτημάτων, τους χρόνους απόκρισης και πολλά άλλα.

Για να δείξουμε πώς λειτουργεί η αναφορά κατάστασης σχετικά με τους χρωματικούς κωδικούς, έχουμε τοποθετήσει έναν από τους διακομιστές υποστήριξης.

Βήμα 4: Διαμόρφωση HTTPS σε HAProxy με χρήση αυτουπογεγραμμένου πιστοποιητικού SSL

20. Σε αυτήν την τελευταία ενότητα, θα δείξουμε πώς να ρυθμίσετε τις παραμέτρους του SSL/TLS για να ασφαλίσετε όλες τις επικοινωνίες μεταξύ του διακομιστή HAProxy και του πελάτη. Το HAProxy υποστηρίζει τέσσερις κύριες λειτουργίες διαμόρφωσης HTTPS, αλλά για αυτόν τον οδηγό, θα χρησιμοποιήσουμε τη μεταφόρτωση SSL/TLS.

Στη λειτουργία εκφόρτωσης SSL/TLS, το HAProxy αποκρυπτογραφεί την κίνηση στην πλευρά του πελάτη και συνδέεται με καθαρή κίνηση στους διακομιστές υποστήριξης.

Θα ξεκινήσουμε δημιουργώντας το πιστοποιητικό και το κλειδί όπως φαίνεται (απαντήστε στις ερωτήσεις ανάλογα με βάση τα στοιχεία της εταιρείας σας κατά τη δημιουργία του πιστοποιητικού, όπως επισημαίνεται στο στιγμιότυπο οθόνης).

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. Στη συνέχεια, ανοίξτε το αρχείο διαμόρφωσης HAProxy (/etc/haproxy/haproxy.cfg) και επεξεργαστείτε την ενότητα της διεπαφής.

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

Αποθηκεύστε το αρχείο και κλείστε το.

22. Στη συνέχεια, επανεκκινήστε την υπηρεσία HAProxy για να εφαρμόσετε τις νέες αλλαγές.

systemctl restart haproxy.service

23. Στη συνέχεια, ανοίξτε ένα πρόγραμμα περιήγησης και δοκιμάστε να αποκτήσετε πρόσβαση στον ιστότοπο για άλλη μια φορά. Το πρόγραμμα περιήγησης θα εμφανίσει ένα σφάλμα λόγω του αυτουπογεγραμμένου πιστοποιητικού. Κάντε κλικ στην επιλογή Σύνθετες για να συνεχίσετε.

Αυτα για τωρα! Κάθε εφαρμογή Ιστού έχει το δικό της σύνολο απαιτήσεων, πρέπει να σχεδιάσετε και να διαμορφώσετε την εξισορρόπηση φορτίου ώστε να ταιριάζει στις απαιτήσεις της υποδομής πληροφορικής και της εφαρμογής σας.

Για να λάβετε περισσότερες πληροφορίες σχετικά με ορισμένες από τις επιλογές διαμόρφωσης που χρησιμοποιούνται σε αυτόν τον οδηγό και γενικά πώς να χρησιμοποιήσετε το HAProxy, ανατρέξτε στην επίσημη τεκμηρίωση της έκδοσης κοινότητας HAProxy ή στην τεκμηρίωση της εταιρικής έκδοσης του HAProxy. Μπορείτε να δημοσιεύσετε τυχόν ερωτήσεις ή σκέψεις μέσω της παρακάτω φόρμας σχολίων.