Πώς να ρυθμίσετε και να διατηρήσετε υψηλή διαθεσιμότητα/ομαδοποίηση στο Linux


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

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

Τα συμπλέγματα χωρίζονται σε τέσσερις κύριους τύπους:

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

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

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

  • Node1: 192.168.10.10
  • Node2: 192.168.10.11

Σε αυτό το άρθρο, θα δείξουμε τα βασικά για τον τρόπο ανάπτυξης, διαμόρφωσης και διατήρησης υψηλής διαθεσιμότητας/ομαδοποίησης στο Ubuntu 16.04/18.04 και το CentOS 7. Θα δείξουμε πώς να προσθέσετε την υπηρεσία Nginx HTTP στο σύμπλεγμα.

Διαμόρφωση τοπικών ρυθμίσεων DNS σε κάθε διακομιστή

Προκειμένου οι δύο διακομιστές να επικοινωνούν μεταξύ τους, πρέπει να διαμορφώσουμε τις κατάλληλες τοπικές ρυθμίσεις DNS στο αρχείο /etc/hosts και στους δύο διακομιστές.

Ανοίξτε και επεξεργαστείτε το αρχείο χρησιμοποιώντας τον αγαπημένο σας επεξεργαστή γραμμής εντολών.

$ sudo vim /etc/hosts  

Προσθέστε τις ακόλουθες καταχωρήσεις με τις πραγματικές διευθύνσεις IP των διακομιστών σας.

192.168.10.10	node1.example.com
192.168.10.11 	node2.example.com

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

Εγκατάσταση του Nginx Web Server

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

$ sudo apt install nginx  [On Ubuntu]
$ sudo yum install epel-release && sudo yum install nginx [On CentOS 7]

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

$ sudo systemctl enable nginx
$ sudo systemctl start nginx
$ sudo systemctl status nginx

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

$ echo "This is the default page for node1.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS1
$ echo "This is the default page for node2.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS2

Εγκατάσταση και ρύθμιση παραμέτρων Corosync και βηματοδότη

Στη συνέχεια, πρέπει να εγκαταστήσουμε τα Βηματοδότης, Corosync και Pcs σε κάθε κόμβο ως εξής.

$ sudo apt install corosync pacemaker pcs	#Ubuntu 
$ sudo yum install corosync pacemaker pcs	#CentOS 

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

$ sudo systemctl enable pcsd
$ sudo systemctl start pcsd
$ sudo systemctl status pcsd

Δημιουργία του Cluster

Κατά την εγκατάσταση, δημιουργείται ένας χρήστης συστήματος που ονομάζεται \hacluster. Επομένως, πρέπει να ρυθμίσουμε τον έλεγχο ταυτότητας που απαιτείται για τεμ.. Ας ξεκινήσουμε δημιουργώντας έναν νέο κωδικό πρόσβασης για το χρήστης \hacluster, πρέπει να χρησιμοποιήσουμε τον ίδιο κωδικό πρόσβασης σε όλους τους διακομιστές:

$ sudo passwd hacluster

Στη συνέχεια, σε έναν από τους διακομιστές (Node1), εκτελέστε την ακόλουθη εντολή για να ρυθμίσετε τον έλεγχο ταυτότητας που απαιτείται για τεμ.

$ sudo pcs cluster auth node1.example.com node2.example.com -u hacluster -p password_here --force

Τώρα δημιουργήστε ένα σύμπλεγμα και συμπληρώστε το με ορισμένους κόμβους (το όνομα του συμπλέγματος δεν μπορεί να υπερβαίνει τους 15 χαρακτήρες, σε αυτό το παράδειγμα, χρησιμοποιήσαμε το examplecluster) στον διακομιστή Node1.

$ sudo pcs cluster setup --name examplecluster node1.example.com node2.example.com 

Τώρα ενεργοποιήστε το σύμπλεγμα κατά την εκκίνηση και ξεκινήστε την υπηρεσία.

$ sudo pcs cluster enable --all
$ sudo pcs cluster start --all

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

$ sudo pcs status
OR
$ sudo crm_mon -1

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

Διαμόρφωση επιλογών συμπλέγματος

Η πρώτη επιλογή είναι να απενεργοποιήσετε το STONITH (ή το Shoot The Other Node In The Head), την εφαρμογή περίφραξης στον Βηματοδότη.

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

Για να απενεργοποιήσετε το STONITH, εκτελέστε την ακόλουθη εντολή:

$ sudo pcs property set stonith-enabled=false

Στη συνέχεια, αγνοήστε επίσης την πολιτική Απαρτία εκτελώντας την ακόλουθη εντολή:

$ sudo pcs property set no-quorum-policy=ignore

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

$ sudo pcs property list

Προσθήκη υπηρεσίας πόρων/συστάδας

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

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

Θα προσθέσουμε δύο πόρους συμπλέγματος: τον πόρο κινητής διεύθυνσης IP που ονομάζεται \floating_ip” και έναν πόρο για τον διακομιστή ιστού Nginx που ονομάζεται \http_server.

Αρχικά ξεκινήστε προσθέτοντας το floating_ip ως εξής. Σε αυτό το παράδειγμα, η κινητή διεύθυνση IP μας είναι 192.168.10.20.

$ sudo pcs resource create floating_ip ocf:heartbeat:IPaddr2 ip=192.168.10.20 cidr_netmask=24 op monitor interval=60s

που:

  • floating_ip: είναι το όνομα της υπηρεσίας.
  • \ocf:heartbeat:IPaddr2: λέει στον Βηματοδότη ποια δέσμη ενεργειών θα χρησιμοποιήσει, στο IPaddr2 σε αυτήν την περίπτωση, σε ποιο χώρο ονομάτων βρίσκεται (βηματοδότης) και σε ποιο πρότυπο συμμορφώνεται με το ocf.
  • op monitor interval=60s”: δίνει εντολή στον Βηματοδότη να ελέγχει την υγεία αυτής της υπηρεσίας κάθε ένα λεπτό καλώντας την ενέργεια παρακολούθησης του πράκτορα.

Στη συνέχεια, προσθέστε τον δεύτερο πόρο, που ονομάζεται http_server. Εδώ, ο αντιπρόσωπος πόρων της υπηρεσίας είναι ocf:heartbeat:nginx.

$ sudo pcs resource create http_server ocf:heartbeat:nginx configfile="/etc/nginx/nginx.conf" op monitor timeout="20s" interval="60s"

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

$ sudo pcs status resources

Κοιτάζοντας την έξοδο της εντολής, έχουν παρατεθεί οι δύο προστιθέμενοι πόροι: \floating_ip και \http_server. Η υπηρεσία floating_ip είναι απενεργοποιημένη επειδή ο κύριος κόμβος βρίσκεται σε λειτουργία.

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

-------------- CentOS 7 -------------- 
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=high-availability		
$ sudo firewall-cmd --reload

-------------- Ubuntu -------------- 
$ sudo ufw allow http	
$ sudo ufw allow high-availability						
$ sudo ufw reload 

Δοκιμή υψηλής διαθεσιμότητας/ομαδοποίησης

Το τελευταίο και σημαντικό βήμα είναι να ελέγξουμε ότι η ρύθμιση υψηλής διαθεσιμότητας λειτουργεί. Ανοίξτε ένα πρόγραμμα περιήγησης ιστού και μεταβείτε στη διεύθυνση 192.168.10.20 και θα πρέπει να δείτε την προεπιλεγμένη σελίδα Nginx από το node2.example.com όπως φαίνεται στο στιγμιότυπο οθόνης.

Για να προσομοιώσετε μια αποτυχία, εκτελέστε την ακόλουθη εντολή για να σταματήσετε το σύμπλεγμα στο node2.example.com.

$ sudo pcs cluster stop http_server

Στη συνέχεια, φορτώστε ξανά τη σελίδα στο 192.168.10.20, θα πρέπει τώρα να αποκτήσετε πρόσβαση στην προεπιλεγμένη ιστοσελίδα Nginx από το node1.example.com.

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

 
$ sudo crm_resource --resource http_server --force-stop 

Στη συνέχεια, πρέπει να εκτελέσετε το crm_mon σε διαδραστική λειτουργία (η προεπιλογή), εντός του διαστήματος οθόνης των 2 λεπτών, θα πρέπει να μπορείτε να δείτε την ειδοποίηση του συμπλέγματος ότι ο http_server απέτυχε και να μετακινηθείτε σε άλλο κόμβο.

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

Για περισσότερες πληροφορίες σχετικά με το Corosync και τον Βηματοδότη, ανατρέξτε στη διεύθυνση: https://clusterlabs.org/

Περίληψη

Σε αυτόν τον οδηγό, δείξαμε τα βασικά για τον τρόπο ανάπτυξης, διαμόρφωσης και διατήρησης υψηλής διαθεσιμότητας/ομαδοποίησης/ανατύπωσης στο Ubuntu 16.04/18.04 και το CentOS 7. Δείξαμε πώς να προσθέσετε την υπηρεσία Nginx HTTP σε ένα σύμπλεγμα. Εάν έχετε οποιεσδήποτε σκέψεις να μοιραστείτε ή ερωτήσεις, χρησιμοποιήστε την παρακάτω φόρμα σχολίων.