Docker Swarm για την επίτευξη υψηλής διαθεσιμότητας



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

Ποιο είναι το πιο σημαντικό χαρακτηριστικό οποιασδήποτε διαδικτυακής εφαρμογής; Υπάρχουν πολλά, αλλά για μένα μεγάλη διαθεσιμότητα είναι το πιο σημαντικό. Αυτό μας βοηθάει το Docker Swarm! Βοηθά στην εφαρμογή να είναι πολύ διαθέσιμη.

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





Στην περίπτωση αυτού του ιστολογίου, είναι μόνο μια γωνιακή εφαρμογή που θα είναι το Docker Swarm'ed.
Σημείωση : Η μέθοδος για εμπορευματοκιβώτιο της εφαρμογής MEAN Stack είναι η ίδια.

Λοιπόν, τι είναι το σμήνος Docker;

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



Γιατί να χρησιμοποιήσετε το σμήνος Docker;

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

Άλλα οφέλη του σμήνους Docker

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

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



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

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

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

Σημείωση : Οι κινητήρες Docker είναι εγκατεστημένοι σε ανεξάρτητους κεντρικούς υπολογιστές / διακομιστές ή σε πολλαπλές VM σε έναν κεντρικό υπολογιστή.

Ξεκινώντας με τη λειτουργία σμήνος

Το Docker Swarm ξεκινά από τον διαχειριστή, ή επιτρέψτε μου να το θέσω έτσι, η περίπτωση που ξεκινά το σύμπλεγμα Swarm γίνεται ο διαχειριστής. Η εντολή για την εκκίνηση του συμπλέγματος είναι:

$ docker swarm init - διαφήμιση-addr ip-address

Εδώ, η σημαία «– διαφήμιση-addr» χρησιμοποιείται για τη διαφήμιση σε άλλους κόμβους που θέλουν να συμμετάσχουν στο σύμπλεγμα. Η διεύθυνση IP του διαχειριστή πρέπει να καθοριστεί μαζί με τη σημαία. Ακολουθεί το δείγμα στιγμιότυπου οθόνης.

εντολή docker init - σμήνος docker - edureka

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

Πώς είναι ακριβώς; Αντιγράψτε ολόκληρο το διακριτικό που δημιουργήθηκε στη μηχανή docker του διαχειριστή, επικολλήστε το στη μηχανή docker του κόμβου και εκτελέστε το. Το επισημασμένο τμήμα του παραπάνω στιγμιότυπου οθόνης είναι ένα διακριτικό. Όταν το διακριτικό εκτελείται σε έναν κόμβο εργαζομένου, θα μοιάζει με το παρακάτω στιγμιότυπο οθόνης.

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

$ docker swarm join-token manager

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

$ κόμβος συνεργατών συμβόλων

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

$ docker κόμβος ls

Το στιγμιότυπο οθόνης είναι παρακάτω:

Δημιουργία εικόνας Docker για γωνιακή εφαρμογή

Εάν όλα είναι καλά, τότε μπορούμε να ξεκινήσουμε την υπηρεσία Swarm, με την προϋπόθεση ότι το Docker Image είναι χτισμένο. Η εικόνα Docker μπορεί να δημιουργηθεί από το Dockerfile. Το Dockerfile που χρησιμοποιείται για την κατασκευή των εφαρμογών είναι παρακάτω:

ΑΠΟ κόμβο: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache clean RUN npm install COPY. / usr / src / app EXPOSE 4200 CMD ['npm', 'start']

Το Dockerfile χρησιμοποιείται για την εκτέλεση ενός συνόλου εντολών για τη δημιουργία μιας προσαρμοσμένης εικόνας Docker από μια βασική εικόνα. Όπως μπορείτε να δείτε, η βασική εικόνα που έχω χρησιμοποιήσει είναι «Κόμβος: 6». Το NodeJS είναι η εικόνα I από το Docker Hub που φέρει ετικέτα με την έκδοση 6.

Στη συνέχεια, δημιουργώ έναν νέο κατάλογο Docker μέσα στο κοντέινερ και το κάνω τον κατάλογο εργασίας μέσα στο κοντέινερ μου.

Αντιγράφω το αρχείο 'package.json' από το τοπικό μου μηχάνημα στον κατάλογο εργασίας του κοντέινερ. Στη συνέχεια, καθορίζω τις εντολές «RUN npm cache clean» και «RUN npm install». εγκατάσταση npm Η εντολή κατεβάζει την έκδοση των εξαρτήσεων που αναφέρονται στο αρχείο package.json.

παράκαμψη έναντι υπερφόρτωσης c ++

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

Τώρα, για να δημιουργήσετε την εικόνα Docker με βάση αυτό το Dockerfile, εκτελέστε την παρακάτω εντολή:

$ docker build -t γωνιακή εικόνα.

Σημείωση: Οι εικόνες Docker πρέπει να είναι ενσωματωμένες σε όλους τους κόμβους του συμπλέγματος. Χωρίς αυτό, τα δοχεία δεν μπορούν να περιστραφούν σε άλλους κινητήρες Docker.

java πώς να δημιουργήσετε μια σειρά αντικειμένων

Έναρξη της υπηρεσίας Docker Swarm

Δεδομένου ότι η εικόνα Docker είναι χτισμένη, μπορούμε να περιστρέψουμε ένα κοντέινερ από αυτήν την εικόνα. Όμως, θα κάνουμε κάτι καλύτερο: δημιουργήστε μια υπηρεσία Docker Swarm. Η εντολή για δημιουργία υπηρεσίας σμήνος είναι:

$ docker service create --name «Angular-App-Container» -p 4200: 4200 γωνιακή-εικόνα

Εδώ, η σημαία «όνομα» χρησιμοποιείται για να δώσει ένα όνομα στην υπηρεσία μου και η σημαία «p» χρησιμοποιείται για να εκθέσει τη θύρα κοντέινερ στη θύρα κεντρικού υπολογιστή. Στο αρχείο package.json, έχω καθορίσει τη θύρα κοντέινερ στην οποία θα πρέπει να φιλοξενείται η εφαρμογή Angular. Και το 4200 σε αυτήν την εντολή βοηθά στη χαρτογράφηση της θύρας 4200 του κοντέινερ στη θύρα 4200 του κεντρικού υπολογιστή. Η «γωνιακή εικόνα» είναι το όνομα της εικόνας που δημιούργησα προηγουμένως.

Θυμάμαι : Όταν δημιουργούμε μια υπηρεσία, μπορεί να φιλοξενείται σε οποιονδήποτε κινητήρα σύνδεσης στο σύμπλεγμα. Ο διευθυντής του σμήνους θα αποφασίσει πού θα φιλοξενηθεί. Όμως, ανεξάρτητα από τον κόμβο στον οποίο φιλοξενείται, η εφαρμογή μπορεί να προσεγγιστεί στο localhost: 4200 από οποιονδήποτε από τους κόμβους που είναι συνδεδεμένοι στο σύμπλεγμα.

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

Και τώρα τι? Είναι το δοχείο ενεργό;

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

$ docker service ls

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

Εδώ, το 'REPLICAS = 1/1' δηλώνει ότι υπάρχει ένα μόνο 'service' αυτού του κοντέινερ, στο σύμπλεγμα. Και το 'MODE = replicate' δείχνει ότι η υπηρεσία αναπαράγεται σε όλους τους κόμβους του συμπλέγματος.

Τώρα, για να προσδιορίσετε σε ποιον κόμβο / διαχειριστή, φιλοξενείται η εφαρμογή, μπορούμε να εκτελέσουμε την εντολή υπηρεσία docker service ps ακολουθούμενη από το όνομα του κοντέινερ. Η εντολή είναι:

$ docker service ps Angular-App-Container

Το στιγμιότυπο οθόνης για το ίδιο είναι παρακάτω.

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

Η εντολή «docker ps» ρίχνει φως στις λεπτομέρειες σχετικά με το ενεργό κοντέινερ. Η εντολή είναι:

$ docker ps

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

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

Για να ελέγξετε πόσους κόμβους εκτελούνται, εκτελέστε την εντολή λίστας κόμβων. Η εντολή είναι:

$ docker κόμβος ls

Για να ελέγξετε τα κοντέινερ που εκτελούνται σε έναν συγκεκριμένο κεντρικό υπολογιστή, εκτελέστε την εντολή node ps. Η εντολή είναι:

$ docker κόμβος ps

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

Απολύτως! Υπάρχει κάτι που ονομάζεται Global MODE. Σε αυτήν τη λειτουργία, υπάρχει μια υπηρεσία αυτού του κοντέινερ που εκτελείται σε κάθε έναν / διαχειριστή του συμπλέγματος. Θυμηθείτε να σταματήσετε την τρέχουσα υπηρεσία / κοντέινερ πριν γυρίσετε ένα άλλο σετ κοντέινερ.

Η εντολή για αυτό είναι:

$ docker service rm Angular-App-Container

Η εντολή για περιστροφή του κοντέινερ σε καθολική λειτουργία είναι:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 --mode global angular-image

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

Όταν εκτελείται η εντολή ps της υπηρεσίας docker, θα δείτε κάτι σαν αυτό:

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

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

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 --replicas = 2 γωνιακή εικόνα

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

Από τον κόμβο Worker, μπορείτε να επαληθεύσετε ότι το κοντέινερ εκτελείται εκτελώντας την εντολή 'docker ps'.

java τι είναι ένα διακριτικό

Docker Swarm για υψηλή διαθεσιμότητα

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

$ docker stop Angular-App-Container

Εκτελέστε την παραπάνω εντολή στον κόμβο: Worker-1 όπου εκτελείται το κοντέινερ.Από τον διαχειριστή, εκτελέστε την εντολή:

$ docker service ps Angular-App-Container

Τώρα θα παρατηρήσετε ότι το κοντέινερ εκτελείται τώρα σε κόμβο: Worker-2 και Manager. Ωστόσο, τερματίστηκε από τον κόμβο: Worker-1. Το ίδιο είναι ορατό από το παρακάτω στιγμιότυπο οθόνης.

Ετσι Υψηλή διαθεσιμότητα Docker επιτυγχάνεται. Εγώn Παρά το γεγονός ότι το κοντέινερ είναι ανενεργό στο Worker-1, η εφαρμογή μπορεί να αποδοθεί στον αριθμό θύρας 4200 σε αυτόν τον κόμβο εργαζομένου. Αυτό συμβαίνει επειδή είναι εσωτερικά συνδεδεμένο με άλλους κόμβους του συμπλέγματος και είναι σε θέση να αποδώσει την εφαρμογή στο πρόγραμμα περιήγησης.

Υψηλή διαθεσιμότητα μετά την αναβάθμιση των υπηρεσιών

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

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

Κλίμακα υπηρεσίας $ docker Angular-App-Container = 5

Το στιγμιότυπο οθόνης αυτού είναι παρακάτω.

Εκτελώντας την εντολή λίστας υπηρεσιών docker, μπορείτε να παρατηρήσετε ότι ο αριθμός των αντιγράφων είναι τώρα 5. Και εκτελώντας την εντολή υπηρεσίας docker ps μαζί με το όνομα υπηρεσίας, μπορείτε να δείτε πώς οι 5 υπηρεσίες ισορροπούν και διανέμονται στους 3 κόμβους . Οι εντολές είναι:

$ docker service ls $ docker service ps Angular-App-Container

Και τέλος, σε μια εγκατάσταση Docker Swarm, εάν δεν θέλετε ο διαχειριστής σας να συμμετάσχει στις διαδικασίες και να τον κρατήσει απασχολημένο μόνο για τη διαχείριση των διαδικασιών, τότε μπορούμε να απομακρύνουμε τον διαχειριστή από τη φιλοξενία οποιασδήποτε εφαρμογής. Επειδή έτσι λειτουργεί στον κόσμο, έτσι δεν είναι; Οι διευθυντές προορίζονται μόνο για τη διαχείριση άλλων εργαζομένων. Τέλος πάντων, η εντολή για να γίνει αυτό είναι:

Ενημέρωση κόμβου $ docker - διαθεσιμότητα αποστράγγισης Manager-1

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

$ docker node ls $ docker service ps Angular-App-Container

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

Έτσι, αυτό τελειώνει σε αυτό το blog στο Docker Swarm. Ελπίζω ότι αυτό το blog εξήγησε πόσο σημαντικό είναι να εφαρμοστεί η λειτουργία Swarm για την επίτευξη υψηλής διαθεσιμότητας. Μείνετε συντονισμένοι για περισσότερα ιστολόγια σε αυτήν τη σειρά εκμάθησης του Docker.

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

Σμήνος Docker για υψηλή διαθεσιμότητα | Εκπαιδευτικό Docker | Εκμάθηση DevOps

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

Έχετε μια ερώτηση για εμάς; Παρακαλώ αναφέρετέ το στην ενότητα σχολίων και θα επικοινωνήσουμε μαζί σας.