Εκμάθηση HAProxy για αρχάριους

Ekmathese Haproxy Gia Archarious



Καθώς η εφαρμογή σας κλιμακώνεται, εμφανίζεται η ανάγκη προσθήκης περισσότερων διακομιστών για τη διαχείριση μεγαλύτερης επισκεψιμότητας. Όσο περισσότερη επισκεψιμότητα λαμβάνει η εφαρμογή σας, τόσο μεγαλύτερες είναι οι πιθανότητες να αντιμετωπίσετε το χρόνο διακοπής λειτουργίας όταν ο διακομιστής υπερφορτώνεται. Ωστόσο, υπάρχουν εργαλεία όπως το HAProxy που σας επιτρέπουν να ορίσετε πώς γίνεται ο χειρισμός της κυκλοφορίας για να εξισορροπηθεί το φόρτο στον διακομιστή σας. Η ιδέα είναι να διασφαλιστεί ότι κανένας διακομιστής δεν υπερφορτώνεται. Το High Availability Proxy είναι ένα λογισμικό ανοιχτού κώδικα που έχει σχεδιαστεί για να προσφέρει αξιόπιστη εξισορρόπηση φορτίου ενώ λειτουργεί ως αντίστροφος διακομιστής μεσολάβησης για εφαρμογές TCP/HTTP.

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

Γιατί να χρησιμοποιήσετε το HAProxy

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







  1. Εξισορρόπηση φορτίου – Με το HAProxy, μπορείτε να διανείμετε άνετα την κίνηση σε διαφορετικούς διακομιστές για να αποφύγετε την υπερφόρτωση ενός μόνο διακομιστή. Με αυτόν τον τρόπο, η εφαρμογή σας δεν θα αντιμετωπίσει προβλήματα χρόνου διακοπής λειτουργίας και θα έχετε επιτύχει ταχύτερη απόκριση, αξιοπιστία και διαθεσιμότητα.
  2. Καταγραφή και παρακολούθηση – Θα λάβετε λεπτομερή αρχεία καταγραφής παρακολούθησης για τους διακομιστές σας για να βοηθήσετε στην αντιμετώπιση προβλημάτων. Επιπλέον, το HAProxy διαθέτει μια σελίδα στατιστικών όπου μπορείτε να λάβετε τα αναλυτικά στοιχεία απόδοσης σε πραγματικό χρόνο για τον εξισορροπητή φορτίου σας.
  3. Έλεγχοι υγείας – Ακόμη και οι διακομιστές σας απαιτούν έλεγχο υγείας για να προσδιοριστεί η κατάστασή τους. Το HAProxy εκτελεί συχνά τους ελέγχους υγείας για να γνωρίζει την κατάσταση του διακομιστή σας για να βελτιώσει την αξιοπιστία του. Εάν εντοπιστεί ένας ανθυγιεινός διακομιστής, αναδρομολογεί την κίνηση σε άλλο διακομιστή.
  4. Αντίστροφος διακομιστής μεσολάβησης - Ένας τρόπος ενίσχυσης της ασφάλειας είναι η απόκρυψη της εσωτερικής δομής. Ευτυχώς, το HAProxy σάς επιτρέπει να λαμβάνετε την κίνηση από πελάτες και να τους δρομολογείτε σε κατάλληλους διακομιστές. Με αυτόν τον τρόπο, η εσωτερική σας δομή είναι κρυμμένη από το μάτι του χάκερ.
  5. ACL (Λίστες ελέγχου πρόσβασης) – Με το HAProxy, μπορείτε να ορίσετε πώς θα γίνεται η δρομολόγηση της κυκλοφορίας χρησιμοποιώντας διάφορα κριτήρια, όπως διαδρομές, κεφαλίδες και διευθύνσεις IP. Έτσι, ο καθορισμός μιας προσαρμοσμένης λογικής δρομολόγησης για την επισκεψιμότητά σας γίνεται ευκολότερος.
  6. Τερματισμός SSL – Από προεπιλογή, το SSL/TLS εκφορτώνεται από τους διακομιστές υποστήριξης, γεγονός που προκαλεί μειωμένη απόδοση. Ωστόσο, με το HAProxy, ο τερματισμός SSL/TLS λαμβάνει χώρα στο πρόγραμμα εξισορρόπησης φορτίου, εκφορτώνοντας την εργασία στους διακομιστές υποστήριξης.

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

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



Εάν εκτελείτε τα συστήματα Ubuntu ή Debian, το HAProxy μπορεί να εγκατασταθεί από τον διαχειριστή πακέτων APT. Εκτελέστε την ακόλουθη εντολή:



$ sudo apt ενημέρωση
$ sudo apt install haproxy

Ομοίως, εάν χρησιμοποιείτε συστήματα που βασίζονται σε RHEL ή CentOS, το HAProxy είναι διαθέσιμο από τον διαχειριστή πακέτων 'yum'. Εκτελέστε τις παρακάτω εντολές:





$ sudo yum ενημέρωση
$ sudo yum install haproxy

Στην περίπτωσή μας, χρησιμοποιούμε Ubuntu. Έτσι, έχουμε την εντολή μας ως εξής:



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

$ χαπροξία -- έκδοση

Πώς να ρυθμίσετε το HAProxy

Με εγκατεστημένο το HAProxy, μπορείτε τώρα να ανοίξετε το αρχείο ρυθμίσεών του ( / etc/haproxy/haproxy.cfg) και ορίστε τις ρυθμίσεις που θέλετε να χρησιμοποιήσετε για τον εξισορροπητή φορτίου.

Ανοίξτε το αρχείο διαμόρφωσης χρησιμοποιώντας ένα πρόγραμμα επεξεργασίας όπως το nano ή το vim.

$ sudo nano /etc/haproxy/haproxy.cfg

Λαμβάνετε ένα αρχείο διαμόρφωσης όπως αυτό στο παρακάτω:

Από το αρχείο ρυθμίσεων, θα παρατηρήσετε ότι συνοδεύεται από δύο κύριες ενότητες:

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

Ακολουθεί ένα παράδειγμα ενότητας 'Προεπιλογές':

Στη δεδομένη εικόνα, η λειτουργία καθορίζει τον τρόπο με τον οποίο το HAProxy σας θα χειρίζεται τα εισερχόμενα αιτήματα. Μπορείτε να ορίσετε τη λειτουργία σε HTTP ή TCP. Όσον αφορά το χρονικό όριο, καθορίζει πόσο χρόνο θα πρέπει να περιμένει το HAProxy. Για παράδειγμα, η σύνδεση χρονικού ορίου είναι ο χρόνος αναμονής προτού πραγματοποιηθεί μια σύνδεση backend. Το πρόγραμμα-πελάτη χρονικού ορίου είναι το χρονικό διάστημα που πρέπει να περιμένει το HAProxy για να στείλει τα δεδομένα ένας πελάτης. Ο διακομιστής χρονικού ορίου είναι ο χρόνος αναμονής του κατάλληλου διακομιστή να στείλει τα δεδομένα που θα προωθηθούν στον πελάτη. Ο τρόπος με τον οποίο ορίζετε τις προεπιλεγμένες τιμές έχει μεγάλη σημασία για τη βελτίωση του χρόνου απόκρισης της αίτησής σας.

Υπάρχουν τρεις ακόμη ενότητες που πρέπει να ορίσετε για να λειτουργεί όπως αναμένεται η συσκευή εξισορρόπησης φορτίου.

  1. frontend - Αυτή η ενότητα περιέχει τις διευθύνσεις IP που θέλετε να χρησιμοποιήσουν οι πελάτες σας για να δημιουργήσουν τη σύνδεση.
  2. backend - Εμφανίζει τις ομάδες διακομιστών που χειρίζονται τα αιτήματα όπως ορίζονται στην ενότητα διεπαφής.
  3. άκου - Χρησιμοποιείται διαδοχικά όταν θέλετε να δρομολογήσετε μια συγκεκριμένη ομάδα διακομιστών. Αυτή η ενότητα συνδυάζει τις εργασίες του frontend και του backend.

Ας έχουμε ένα παράδειγμα

Για αυτό το παράδειγμα, ορίζουμε το frontend για χρήση του localhost με μια συγκεκριμένη θύρα. Στη συνέχεια, το δεσμεύουμε με το backend που εκτελεί τον localhost και στη συνέχεια τρέχουμε έναν διακομιστή Python για να ελέγξουμε αν όλα λειτουργούν όπως αναμένεται για την εξισορρόπηση φορτίου. Ακολουθήστε τα βήματα που δίνονται.

Βήμα 1: Διαμόρφωση της ενότητας Προεπιλογές

Στην ενότητα 'Προεπιλογές', ορίζουμε τις τιμές που θα μοιράζονται στους κόμβους. Για την περίπτωσή μας, ορίσαμε τη λειτουργία σε HTTP και ορίσαμε τα χρονικά όρια για τον πελάτη και τον διακομιστή. Μπορείτε να προσαρμόσετε την ώρα ανάλογα με τις ανάγκες σας.

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

Βήμα 2: Διαμόρφωση της ενότητας Frontend

Στην ενότητα frontend, ορίζουμε τον τρόπο με τον οποίο θέλουμε να έχουν πρόσβαση στην εφαρμογή ή τον ιστότοπο οι πελάτες στο διαδίκτυο. Δίνουμε τις διευθύνσεις IP για την εφαρμογή. Αλλά για αυτήν την περίπτωση, συνεργαζόμαστε με τον localhost. Επομένως, η διεύθυνση IP μας είναι η εναλλακτική διεύθυνση του 127.0.0.1 και θέλουμε να δεχτούμε τις συνδέσεις μέσω της θύρας 80.

Πρέπει να προσθέσετε τη λέξη-κλειδί «bind» που λειτουργεί ως ακροατής για τη διεύθυνση IP στην καθορισμένη θύρα. Η διεύθυνση IP και η θύρα που ορίζετε είναι αυτά που χρησιμοποιεί το πρόγραμμα εξισορρόπησης φορτίου για την αποδοχή των εισερχόμενων αιτημάτων.

Αφού προσθέσουμε τις προηγούμενες γραμμές στο αρχείο ρυθμίσεων, πρέπει να επανεκκινήσουμε το 'haproxy.service' με την ακόλουθη εντολή:

$ sudo systemctl επανεκκίνηση απροσεξίας

Σε αυτό το σημείο, μπορούμε να δοκιμάσουμε να στείλουμε τα αιτήματα στον ιστότοπό μας χρησιμοποιώντας την εντολή “curl”. Εκτελέστε την εντολή και προσθέστε τη διεύθυνση IP προορισμού.

$ curl <διεύθυνση IP>

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

Βήμα 3: Διαμόρφωση του Backend

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

Το σφάλμα 503 που λάβαμε νωρίτερα ήταν επειδή δεν είχαμε κανένα backend για να χειριστούμε τα αιτήματα. Ας ξεκινήσουμε ορίζοντας το 'default_backend' για τη διαχείριση των αιτημάτων. Το ορίζετε στο τμήμα frontend. Το ονομάσαμε 'linux_backend' για αυτήν την περίπτωση.

Στη συνέχεια, δημιουργήστε μια ενότητα backend που έχει το ίδιο όνομα με αυτό που ορίζεται στην ενότητα frontend. Στη συνέχεια, πρέπει να χρησιμοποιήσετε τη λέξη-κλειδί «διακομιστής» ακολουθούμενη από το όνομα του διακομιστή σας και τη διεύθυνση IP του. Η παρακάτω εικόνα δείχνει ότι ορίσαμε τον διακομιστή 'linuxint1' χρησιμοποιώντας το IP 127.0.0.1 και τη θύρα 8001:

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

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

$ python3 -m http.server 8001 --bind 127.0.0.1

Βεβαιωθείτε ότι έχετε αντικαταστήσει τις τιμές ώστε να ταιριάζουν με τη διεύθυνση IP σας και τη θύρα που θέλετε να δεσμεύσετε. Παρατηρήστε πώς δημιουργείται ο διακομιστής web και ακούει τυχόν εισερχόμενα αιτήματα.

Σε άλλο τερματικό, ας χρησιμοποιήσουμε την εντολή 'curl' για να στείλουμε ένα αίτημα στον διακομιστή.

$ curl <διεύθυνση IP>

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

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

Έτσι μπορείτε να ορίσετε ένα απλό HAProxy για τον ιστότοπο ή την εφαρμογή σας.

Εργασία με Κανόνες

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

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

Επιπλέον, έχουμε το 'default_backend' μας και ένα άλλο 'use_backend' που είναι μια διαφορετική ομάδα διακομιστών που θα χρησιμοποιήσουμε ανάλογα με τη θύρα από την οποία προέρχονται τα αιτήματα. Στην παρακάτω διαμόρφωση, όλα τα αιτήματα μέσω της θύρας 81 αντιμετωπίζονται από τους διακομιστές στο 'Linux2_backend'. Οποιαδήποτε άλλα αιτήματα αντιμετωπίζονται από το 'default_backend'.

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

Επανεκκινήστε γρήγορα την υπηρεσία HAProxy.

Ας δημιουργήσουμε τον διακομιστή ιστού χρησιμοποιώντας την Python3 και ας δεσμεύσουμε τα αιτήματα στη θύρα 8002 που είναι ο εναλλακτικός διακομιστής υποστήριξης.

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

Ελέγχοντας ξανά τον web server μας, μπορούμε να δούμε ότι καταφέρνει να λαμβάνει και να χειρίζεται τα αιτήματα και δίνει μια απάντηση 200 (επιτυχίας).

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

συμπέρασμα

Το HAProxy είναι μια ιδανική λύση για εξισορρόπηση φορτίου για εφαρμογές TCP/HTTP. Μόλις εγκατασταθεί, μπορείτε να επεξεργαστείτε άνετα το αρχείο διαμόρφωσης για να ορίσετε τις προεπιλεγμένες ενότητες, το frontend και το backend για να καθοδηγήσετε τον τρόπο λειτουργίας του load balancer σας. Αυτή η ανάρτηση είναι ένας οδηγός για αρχάριους για το HAProxy. Ξεκίνησε ορίζοντας το HAProxy και τα χαρακτηριστικά του. Στη συνέχεια, διερεύνησε να κατανοήσει πώς να ρυθμίσετε τις παραμέτρους του HAProxy και κατέληξε δίνοντας ένα παράδειγμα σχετικά με τον τρόπο χρήσης του HAProxy ως εξισορροπητή φορτίου.