Πώς να χρησιμοποιήσετε το Nginx ως HTTP Load Balancer στο Linux


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

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

Συνιστώμενη ανάγνωση: Ο απόλυτος οδηγός για την ασφάλεια, τη σκλήρυνση και τη βελτίωση της απόδοσης του διακομιστή Web Nginx

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

Οι μέθοδοι εξισορρόπησης φορτίου που υποστηρίζονται από το Nginx είναι:

  • round-robin – το οποίο διανέμει αιτήματα στους διακομιστές εφαρμογών με κυκλικό τρόπο. Χρησιμοποιείται από προεπιλογή όταν δεν έχει καθοριστεί μέθοδος,
  • λιγότερο συνδεδεμένο – εκχωρεί το επόμενο αίτημα σε έναν λιγότερο απασχολημένο διακομιστή (τον διακομιστή με τον λιγότερο αριθμό ενεργών συνδέσεων),
  • ip-hash – όπου χρησιμοποιείται μια συνάρτηση κατακερματισμού για τον προσδιορισμό του διακομιστή που θα επιλεγεί για το επόμενο αίτημα με βάση τη διεύθυνση IP του πελάτη. Αυτή η μέθοδος επιτρέπει τη διατήρηση της περιόδου λειτουργίας (σύνδεση ενός πελάτη σε έναν συγκεκριμένο διακομιστή εφαρμογής).

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

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

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

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

Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8

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

A Record   		@   		192.168.58.7

Αυτή η εγγραφή λέει στα αιτήματα πελατών πού πρέπει να κατευθύνει ο τομέας, σε αυτήν την περίπτωση, στον εξισορροπητή φορτίου (192.168.58.7). Οι εγγραφές DNS A δέχονται μόνο τιμές IPv4. Εναλλακτικά, το αρχείο /etc/hosts στους υπολογιστές-πελάτες μπορεί επίσης να χρησιμοποιηθεί για σκοπούς δοκιμής, με την ακόλουθη καταχώρηση.

192.168.58.7  	tecmintapp.lan

Ρύθμιση Nginx Load Balancing στο Linux

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

sudo apt install nginx   [On Debian/Ubuntu]
sudo yum install nginx   [On CentOS/RHEL]   

Στη συνέχεια, δημιουργήστε ένα αρχείο μπλοκ διακομιστή που ονομάζεται /etc/nginx/conf.d/loadbalancer.conf (δώστε ένα όνομα της επιλογής σας).

sudo vi /etc/nginx/conf.d/loadbalancer.conf

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

 
upstream backend {
        server 192.168.58.5;
        server 192.168.58.8;
    }
	
    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        server_name tecmintapp.lan;

        location / {
	        proxy_redirect      off;
	        proxy_set_header    X-Real-IP $remote_addr;
	        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header    Host $http_host;
		proxy_pass http://backend;
	}
}

Στην παραπάνω διαμόρφωση, η οδηγία proxy_pass (η οποία θα πρέπει να προσδιορίζεται μέσα σε μια τοποθεσία, / σε αυτήν την περίπτωση) χρησιμοποιείται για τη διαβίβαση ενός αιτήματος στους διακομιστές μεσολάβησης HTTP που αναφέρονται χρησιμοποιώντας το backend λέξης, στην οδηγία upstream (χρησιμοποιείται για τον ορισμό μιας ομάδας διακομιστών). Επίσης, τα αιτήματα θα διανέμονται μεταξύ των διακομιστών χρησιμοποιώντας έναν σταθμισμένο μηχανισμό εξισορρόπησης γύρου.

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

upstream backend {
        least_conn;
        server 192.168.58.5;
        server 192.168.58.8;
    }

Και για να ενεργοποιήσετε τον μηχανισμό επιμονής περιόδου λειτουργίας ip_hash, χρησιμοποιήστε:

upstream backend {
	ip_hash;
        server 192.168.58.5;
        server 192.168.58.8;
    }

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

upstream backend {
        server 192.168.58.5	weight=4;
        server 192.168.58.8;
    }

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

sudo nginx -t

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

sudo systemctl restart nginx
sudo systemctl enable nginx

Δοκιμή Nginx Load Balancing στο Linux

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

http://tecmintapp.lan

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

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