Εγκατάσταση του εξισορροπητή φορτίου HAProxy στο CentOS

Η μετάφραση του άρθρου ετοιμάστηκε την παραμονή της έναρξης του μαθήματος "Διαχειριστής Linux. Εικονικοποίηση και ομαδοποίηση"

Εγκατάσταση του εξισορροπητή φορτίου HAProxy στο CentOS

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

Το HAProxy προσπαθεί να βελτιστοποιήσει τη χρήση των πόρων, να μεγιστοποιήσει την απόδοση, να ελαχιστοποιήσει τον χρόνο απόκρισης και να αποφύγει την υπερφόρτωση οποιουδήποτε μεμονωμένου πόρου. Μπορεί να εγκατασταθεί σε μια ποικιλία διανομών Linux, όπως το CentOS 8, στο οποίο θα επικεντρωθούμε σε αυτόν τον οδηγό, καθώς και σε συστήματα Debian 8 и Ubuntu 16.

Εγκατάσταση του εξισορροπητή φορτίου HAProxy στο CentOS

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

Ως προϋπόθεση για καλύτερα αποτελέσματα, θα πρέπει να έχετε τουλάχιστον δύο διακομιστές ιστού και έναν διακομιστή εξισορρόπησης φορτίου. Οι διακομιστές Ιστού πρέπει να εκτελούν τουλάχιστον μια βασική υπηρεσία Ιστού, όπως το nginx ή το httpd, προκειμένου να ελέγχεται η εξισορρόπηση φορτίου μεταξύ τους.

Εγκατάσταση του HAProxy στο CentOS 8

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

sudo yum info haproxy

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

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

sudo yum install gcc pcre-devel tar make -y

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

wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz

Μόλις ολοκληρωθεί η λήψη, εξαγάγετε τα αρχεία χρησιμοποιώντας την παρακάτω εντολή:

tar xzvf ~/haproxy.tar.gz -C ~/

Μεταβείτε στον μη συσκευασμένο κατάλογο πηγής:

cd ~/haproxy-2.0.7

Στη συνέχεια, μεταγλωττίστε το πρόγραμμα για το σύστημά σας:

make TARGET=linux-glibc

Και τέλος, εγκαταστήστε το ίδιο το HAProxy:

sudo make install

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

Ρύθμιση του HAProxy για τον διακομιστή σας

Τώρα προσθέστε τους ακόλουθους καταλόγους και το αρχείο στατιστικών για τις εγγραφές HAProxy:

sudo mkdir -p /etc/haproxy
sudo mkdir -p /var/lib/haproxy 
sudo touch /var/lib/haproxy/stats

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

sudo ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

Εάν θέλετε να προσθέσετε έναν διακομιστή μεσολάβησης στο σύστημά σας ως υπηρεσία, αντιγράψτε το αρχείο haproxy.init από παραδείγματα στον κατάλογό σας /etc/init.d. Επεξεργαστείτε τα δικαιώματα του αρχείου έτσι ώστε να εκτελείται το σενάριο και, στη συνέχεια, επανεκκινήστε τον δαίμονα systemd:

sudo cp ~/haproxy-2.0.7/examples/haproxy.init /etc/init.d/haproxy
sudo chmod 755 /etc/init.d/haproxy
sudo systemctl daemon-reload

Πρέπει επίσης να επιτρέψετε στην υπηρεσία να επανεκκινήσει αυτόματα κατά την εκκίνηση του συστήματος:

sudo chkconfig haproxy on

Για ευκολία, συνιστάται επίσης να προσθέσετε έναν νέο χρήστη για την εκτέλεση του HAProxy:

sudo useradd -r haproxy

Μετά από αυτό, μπορείτε να ελέγξετε ξανά τον αριθμό της εγκατεστημένης έκδοσης χρησιμοποιώντας την ακόλουθη εντολή:

haproxy -v
HA-Proxy version 2.0.7 2019/09/27 - https://haproxy.org/

Στην περίπτωσή μας, η έκδοση θα πρέπει να είναι 2.0.7, όπως φαίνεται στο παραπάνω παράδειγμα.

Τέλος, το προεπιλεγμένο τείχος προστασίας στο CentOS 8 είναι αρκετά περιοριστικό για αυτό το έργο. Χρησιμοποιήστε τις ακόλουθες εντολές για να επιτρέψετε τις απαιτούμενες υπηρεσίες και να επαναφέρετε το τείχος προστασίας:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-port=8181/tcp
sudo firewall-cmd --reload

Ρύθμιση Load Balancer

Η εγκατάσταση του HAProxy είναι μια αρκετά απλή διαδικασία. Ουσιαστικά, το μόνο που χρειάζεται να κάνετε είναι να πείτε στο HAProxy ποιες συνδέσεις πρέπει να ακούει και πού πρέπει να τις αναμεταδίδει.

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

Εξισορρόπηση φορτίου στο στρώμα μεταφοράς (επίπεδο 4)

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

sudo vi /etc/haproxy/haproxy.cfg

Προσθέστε τις ακόλουθες ενότητες στο αρχείο. Αντικαθιστώ όνομα διακομιστή τι πρέπει να καλούν τους διακομιστές σας στη σελίδα στατιστικών στοιχείων και private_ip — ιδιωτικές διευθύνσεις IP των διακομιστών στους οποίους θέλετε να κατευθύνετε την κυκλοφορία ιστού. Μπορείτε να ελέγξετε τις ιδιωτικές διευθύνσεις IP στον πίνακα ελέγχου UpCloud και στην καρτέλα Ιδιωτικό δίκτυο στο μενού Δίκτυο.

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats timeout 30s
   user haproxy
   group haproxy
   daemon

defaults
   log global
   mode http
   option httplog
   option dontlognull
   timeout connect 5000
   timeout client 50000
   timeout server 50000

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

Αυτό ορίζει έναν εξισορροπητή φορτίου επιπέδου μεταφοράς (επίπεδο 4) με εξωτερική ονομασία http_front listening στη θύρα 80, ο οποίος στη συνέχεια προωθεί την κυκλοφορία σε ένα προεπιλεγμένο backend με το όνομα http_back. Πρόσθετα στατιστικά στοιχεία /haproxy?stats συνδέει τη σελίδα στατιστικών στοιχείων με την καθορισμένη διεύθυνση.

Διάφοροι αλγόριθμοι εξισορρόπησης φορτίου.

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

Οι αλγόριθμοι εξισορρόπησης χρησιμοποιούνται για να προσδιορίσουν σε ποιον διακομιστή στο backend μεταβιβάζεται κάθε σύνδεση. Εδώ είναι μερικές από τις χρήσιμες επιλογές:

  • Γύρος: Κάθε διακομιστής χρησιμοποιείται με τη σειρά του ανάλογα με το βάρος του. Αυτός είναι ο πιο ομαλός και δίκαιος αλγόριθμος όταν ο χρόνος επεξεργασίας των διακομιστών παραμένει ομοιόμορφα κατανεμημένος. Αυτός ο αλγόριθμος είναι δυναμικός, επιτρέποντας την άμεση προσαρμογή του βάρους του διακομιστή.
  • Leastconn: επιλέγεται ο διακομιστής με τις λιγότερες συνδέσεις. Το Round Robin εκτελείται μεταξύ διακομιστών με το ίδιο φορτίο. Η χρήση αυτού του αλγόριθμου συνιστάται για μεγάλες περιόδους σύνδεσης όπως LDAP, SQL, TSE κ.λπ., αλλά δεν είναι πολύ κατάλληλος για σύντομες συνεδρίες όπως το HTTP.
  • Πρώτα: Ο πρώτος διακομιστής με διαθέσιμες υποδοχές σύνδεσης λαμβάνει τη σύνδεση. Οι διακομιστές επιλέγονται από το χαμηλότερο αριθμητικό αναγνωριστικό έως το υψηλότερο, το οποίο ορίζει τη θέση του διακομιστή στο αγρόκτημα. Μόλις ένας διακομιστής φτάσει στο maxconn, χρησιμοποιείται ο επόμενος διακομιστής.
  • πηγή: Η διεύθυνση IP προέλευσης κατακερματίζεται και διαιρείται με το συνολικό βάρος των διακομιστών που εκτελούνται για να καθοριστεί ποιος διακομιστής θα λάβει το αίτημα. Με αυτόν τον τρόπο, η ίδια διεύθυνση IP πελάτη θα πηγαίνει πάντα στον ίδιο διακομιστή, ενώ οι διακομιστές παραμένουν οι ίδιοι.

Ρύθμιση εξισορρόπησης φορτίου σε επίπεδο εφαρμογής (επίπεδο 7)

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

Ανοίξτε το αρχείο διαμόρφωσης HAProxy χρησιμοποιώντας ένα πρόγραμμα επεξεργασίας κειμένου:

sudo vi /etc/haproxy/haproxy.cfg

Στη συνέχεια, διαμορφώστε τα τμήματα frontend και backend όπως στο παρακάτω παράδειγμα:

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   acl url_blog path_beg /blog
   use_backend blog_back if url_blog
   default_backend http_back

backend http_back
   balance roundrobin
   server server_name1 private_ip1:80 check
   server server_name2 private_ip2:80 check

backend blog_back
   server server_name3 private_ip3:80 check

Το frontend δηλώνει έναν κανόνα ACL που ονομάζεται url_blog που ισχύει για όλες τις συνδέσεις με διαδρομές που ξεκινούν με /blog. Το Use_backend καθορίζει ότι οι συνδέσεις που αντιστοιχούν στη συνθήκη url_blog θα πρέπει να εξυπηρετούνται από ένα backend που ονομάζεται blog_back και ότι όλα τα άλλα αιτήματα αντιμετωπίζονται από το προεπιλεγμένο backend.

Στην πλευρά του backend, η διαμόρφωση δημιουργεί δύο ομάδες διακομιστών: http_back, όπως πριν, και μια νέα που ονομάζεται blog_back, που χειρίζεται τις συνδέσεις με το example.com/blog.

Αφού αλλάξετε τις ρυθμίσεις, αποθηκεύστε το αρχείο και επανεκκινήστε το HAProxy χρησιμοποιώντας την ακόλουθη εντολή:

sudo systemctl restart haproxy

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

Δοκιμή της ρύθμισης

Μόλις ρυθμιστεί και εκτελεστεί το HAProxy, ανοίξτε τη δημόσια διεύθυνση IP του διακομιστή εξισορρόπησης φορτίου σε ένα πρόγραμμα περιήγησης και ελέγξτε εάν έχετε συνδεθεί σωστά στο backend. Η παράμετρος stats uri στη διαμόρφωση δημιουργεί μια σελίδα στατιστικών στην καθορισμένη διεύθυνση.

http://load_balancer_public_ip/haproxy?stats

Όταν φορτώνετε τη σελίδα στατιστικών στοιχείων, εάν όλοι οι διακομιστές σας εμφανίζονται πράσινοι, τότε η εγκατάσταση ήταν επιτυχής!

Εγκατάσταση του εξισορροπητή φορτίου HAProxy στο CentOS

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

Εάν το πρόγραμμα εξισορρόπησης φορτίου δεν αποκρίνεται, βεβαιωθείτε ότι οι συνδέσεις HTTP δεν αποκλείονται από τείχος προστασίας. Βεβαιωθείτε επίσης ότι το HAProxy λειτουργεί χρησιμοποιώντας την παρακάτω εντολή:

sudo systemctl status haproxy

Προστασία της σελίδας στατιστικών στοιχείων με κωδικό πρόσβασης

Ωστόσο, εάν η σελίδα στατιστικών στοιχείων εμφανίζεται απλώς στη διεπαφή, τότε είναι ανοιχτή για να τη δουν όλοι, κάτι που μπορεί να μην είναι καλή ιδέα. Αντίθετα, μπορείτε να του εκχωρήσετε έναν προσαρμοσμένο αριθμό θύρας προσθέτοντας το παρακάτω παράδειγμα στο τέλος του αρχείου haproxy.cfg. Αντικαθιστώ όνομα χρήστη и κωδικό πρόσβασης για κάτι ασφαλές:

listen stats
   bind *:8181
   stats enable
   stats uri /
   stats realm Haproxy Statistics
   stats auth username:password

Αφού προσθέσετε μια νέα ομάδα ακροατών, αφαιρέστε τον παλιό σύνδεσμο στατιστικών uri από την ομάδα διεπαφής. Όταν τελειώσετε, αποθηκεύστε το αρχείο και επανεκκινήστε το HAProxy.

sudo systemctl restart haproxy

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

http://load_balancer_public_ip:8181

Βεβαιωθείτε ότι όλοι οι διακομιστές σας εξακολουθούν να εμφανίζονται πράσινοι και, στη συνέχεια, ανοίξτε μόνο την IP του load balancer χωρίς αριθμούς θύρας στο πρόγραμμα περιήγησής σας.

http://load_balancer_public_ip/

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

Συμπέρασμα: HAProxy Load Balancer

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

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

Περισσότερα για το μάθημα "Διαχειριστής Linux. Εικονικοποίηση και ομαδοποίηση"***

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο