Το σύμπλεγμα Redis χειρίζεται τις αποτυχίες του κόμβου μέσω ενός συνδυασμού ανίχνευσης αποτυχίας, προώθησης αντιγράφων και διαχείρισης του κράτους συμπλέγματος για να εξασφαλίσει τη συνεχιζόμενη λειτουργία και τη διαθεσιμότητα δεδομένων. Έχει σχεδιαστεί για να επιβιώσει από τις αποτυχίες μερικών κόμβων προωθώντας αυτόματα τα αντίγραφα για να αντικαταστήσουν τους απρόβλεπτες κυρίους, διατηρώντας την ακεραιότητα του βασικού χώρου, ελαχιστοποιώντας τους κινδύνους απώλειας δεδομένων.
Σύμπλεγμα επικοινωνίας και ανίχνευσης αποτυχίας
Οι κόμβοι του συμπλέγματος Redis επικοινωνούν μέσω ενός ειδικού δυαδικού πρωτοκόλλου που βασίζεται σε TCP που ονομάζεται Redis Cluster Bus. Κάθε κόμβος διατηρεί συνδέσεις με κάθε άλλο κόμβο στο σύμπλεγμα χρησιμοποιώντας αυτό το δίαυλο, επιτρέποντας συνεχείς ελέγχους υγείας και διάδοση του κράτους. Οι κόμβοι στέλνουν περιοδικά πακέτα ping για να επιβεβαιώσουν την επιχειρησιακή κατάσταση των συνομηλίκων τους και να μοιραστούν πληροφορίες σχετικά με την κατάσταση του συμπλέγματος. Αυτή η επικοινωνία χρησιμοποιεί ένα πρωτόκολλο κουτσομπολιού για την αποτελεσματική διάδοση πληροφοριών συμπλέγματος, βοηθώντας στην ανίχνευση αποτυχιών κόμβων.
Οι κόμβοι παρακολουθούν τους συνομηλίκους χρησιμοποιώντας έναν ενεργό μηχανισμό ping. Εάν ένας κόμβος δεν ανταποκρίνεται σε pings μέσα σε μια διαμορφωμένη περίοδο χρονικού ορίου (node_timeout), επισημαίνεται ότι πιθανώς αποτυγχάνει σε κατάσταση PFail. Πρόκειται για μια δοκιμαστική ένδειξη αποτυχίας, που σημαίνει ότι ο κόμβος μπορεί να είναι απρόσιτος ή κάτω, αλλά δεν έχει ακόμη επιβεβαιωθεί. Εάν η κατάσταση PFail παραμένει και επιβεβαιωθεί από την πλειοψηφία των κύριων κόμβων, ο κόμβος σημειώνεται ως αποτυχία, υποδεικνύοντας ότι θεωρείται απρόσιτη ή κάτω από το σύμπλεγμα. Αυτός ο μηχανισμός ανίχνευσης αποτυχίας με βάση τη συναίνεση συμβάλλει στην πρόληψη ψευδών θετικών για τον εντοπισμό των αποτυχημένων κόμβων.
Διαχείριση αποτυχιών κύριου κόμβου
Όταν ένας κύριος κόμβος σηματοδοτείται ως αποτυχία, το Cluster Redis ξεκινά μια διαδικασία αποτυχίας για να προωθήσει ένα από τα αντίγραφά του για να γίνει ο νέος πλοίαρχος. Αυτή η διαδικασία ενεργοποιείται αυτόματα από τον ανιχνευτή αποτυχίας του συμπλέγματος χωρίς διοικητική παρέμβαση. Το προωθούμενο αντίγραφο αναλαμβάνει την ευθύνη να εξυπηρετήσει τις υποδοχές κατακερματισμού που προηγουμένως διαχειρίζεται ο αποτυχημένος κύριος, εξασφαλίζοντας ότι το σύμπλεγμα μπορεί να συνεχίσει να εξυπηρετεί αιτήματα χωρίς χειροκίνητη αναδιάρθρωση.
Η αποτυχία εμφανίζεται μόνο εάν υπάρχει τουλάχιστον ένα αντίγραφο διαθέσιμο και προσβάσιμο για προώθηση. Εάν δεν υπάρχει κατάλληλο αντίγραφο, το σύμπλεγμα εισέρχεται σε κατάσταση σφάλματος όπου θα σταματήσει να δέχεται ερωτήματα για να αποτρέψει την εξυπηρέτηση ασυνεπών δεδομένων. Αυτό υπογραμμίζει τη σημασία της διαμόρφωσης των αντιγράφων για κάθε κύριο για να διατηρήσει την υψηλή διαθεσιμότητα.
Μηχανική και ασφάλεια αποτυχίας
Κατά τη διάρκεια της αποτυχίας, το αντίγραφο περιμένει να συγχρονιστεί πλήρως με τον κύριο αντικαθιστά, εξασφαλίζοντας ότι έχει επεξεργαστεί όλες τις ενημερώσεις εκκρεμείς για να αποφευχθεί η απώλεια δεδομένων. Επιτυγχάνει αυτό με την αντιστοίχιση της αντιστάθμισης αναπαραγωγής με τον κύριο, ώστε να έχει ένα ενημερωμένο σύνολο δεδομένων πριν αναλάβει τον κύριο ρόλο.
Μόλις συγχρονιστεί, το αντίγραφο ζητά μια νέα εποχή διαμόρφωσης από την πλειοψηφία των πλοιάρχων. Η εποχή είναι μια λογική χρονική σήμανση που χρησιμοποιείται για την παρακολούθηση των αλλαγών διαμόρφωσης στο σύμπλεγμα. Μετά τη λήψη συναίνεσης, το ρεπλίκα μεταδίδει την ενημερωμένη διαμόρφωση σε όλους τους κόμβους, ανακοινώνοντας την προαγωγή του στον Master και την υποβάθμιση του παλιού πλοιάρχου σε αντίγραφο ή απομάκρυνση.
Ο παλιός πλοίαρχος, όταν ανακάμπτει, λαμβάνει αυτήν την ενημέρωση διαμόρφωσης και σταματά να εξυπηρετεί τα ερωτήματα ως κύριο. Ανακατευθύνει τα αιτήματα των πελατών στον νέο πλοίαρχο, εξασφαλίζοντας ότι οι πελάτες συνεχίζουν να αλληλεπιδρούν με διαφάνεια με το σύμπλεγμα χωρίς χειροκίνητη παρέμβαση.
Χειρισμός διαμερισμάτων δικτύου και σενάρια διαχωρισμού-εγκεφάλου
Το Redis Cluster χρησιμοποιεί συναίνεση με βάση την πλειοψηφία για να αποφευχθεί τα ζητήματα του διαχωρισμού του εγκεφάλου κατά τη διάρκεια των διαμερισμάτων δικτύου. Ένας πλοίαρχος θα αποτύχει μόνο εάν είναι απρόσιτο από περισσότερους από τους μισούς κυρίους στο σύμπλεγμα. Οι Δάσκαλοι που δεν μπορούν να επικοινωνούν με την πλειοψηφία θα σταματήσουν να δέχονται γράφει, αποτρέποντας τις αποκλίνουσες καταστάσεις δεδομένων μεταξύ των διαμερισμάτων.
Ωστόσο, εάν ένα διαμέρισμα μειοψηφίας περιέχει πελάτες που συνεχίζουν να γράφουν σε έναν κύριο πριν από την αποτυχία, υπάρχει δυνατότητα για απώλεια εγγραφής. Ο Redis μετριάζει αυτόν τον κίνδυνο αρνούμενος να γράφει από την πλευρά της μειοψηφίας μετά από ένα χρονικό όριο και από την πλειοψηφία, αποτυγχάνοντας γρήγορα τον απρόσιτο κύριο.
Παρά τις προφυλάξεις αυτές, οι συγγραφείς μπορούν να χαθούν κατά τη διάρκεια των παραθύρων αποτυχίας, επειδή ο Redis χρησιμοποιεί ασύγχρονη αντιγραφή μεταξύ Masters και Replicas. Δεδομένου ότι οι απαντήσεις για να γράψουν εντολές και ενημερώσεις αναπαραγωγής αποστέλλονται σχεδόν ταυτόχρονα, το παράθυρο για απώλεια γράφει είναι πολύ στενό αλλά όχι αδύνατο.
Επιλογές διαμόρφωσης που επηρεάζουν το χειρισμό αποτυχίας
Το σύμπλεγμα Redis περιλαμβάνει επιλογές διαμόρφωσης που επηρεάζουν τη διαθεσιμότητα και τη συμπεριφορά κατά τη διάρκεια των αποτυχιών του κόμβου:
-`cluster-require-full-coverage` (προεπιλογή Ναι): Το σύμπλεγμα σταματά να δέχεται γράφει εάν κάποιο τμήμα του βασικού χώρου αποκαλύπτεται λόγω αποτυχιών κόμβων, εξασφαλίζοντας ισχυρή συνέπεια των δεδομένων.
-`cluster-allow-reads-when-down` (προεπιλογή no): Ελέγχει αν επιτρέπονται οι ανάγνωση όταν το σύμπλεγμα βρίσκεται σε κατάσταση αποτυχίας. Η ενεργοποίηση αυτού επιτρέπει τις αναγνώσεις από τους κόμβους ακόμη και κατά τη διάρκεια μερικών αποτυχιών, αλλά ενδέχεται να διακινδυνεύσουν τα παλαιά δεδομένα που εξυπηρετούνται.
Αυτές οι ρυθμίσεις επιτρέπουν στους διαχειριστές να εξισορροπούν τη διαθεσιμότητα και τη συνέπεια με βάση τις απαιτήσεις εφαρμογής.
Εγχειρίνη υποστήριξη αποτυχίας
Εκτός από την αυτόματη αποτυχία, το Redis Cluster παρέχει μια εντολή χειροκίνητης αποτυχίας που μπορεί να εκδοθεί σε κόμβους ρεπλίκα. Αυτό είναι χρήσιμο για σενάρια συντήρησης ή δοκιμών όπου ένας διαχειριστής επιθυμεί να ανταλλάξει κύριους ρόλους χωρίς να περιμένει ένα πραγματικό συμβάν αποτυχίας.
Η χειροκίνητη ανακατεύθυνση λειτουργεί εμποδίζοντας τους πελάτες στον τρέχοντα κύριο, περιμένοντας το αντίγραφο να καλύψει πλήρως και στη συνέχεια να προωθήσει το αντίγραφο με μια ομαλή ατομική μετάβαση. Αυτό δεν εξασφαλίζει απώλεια δεδομένων κατά τη διάρκεια της αλλαγής του ρόλου και την ελάχιστη διαταραχή των πελατών.
Περίληψη
Το σύμπλεγμα Redis χειρίζεται τις αποτυχίες του κόμβου κυρίως μέσω ενός συστήματος ανίχνευσης σφαλμάτων και αποτυχίας με βάση τη συνεχή παρακολούθηση μέσω του διαύλου συμπλέγματος Redis και ενός πρωτοκόλλου κουτσομπολιού. Οι κόμβοι ανιχνεύουν απρόσιτες κυρίους και προωθούν αυτόματα τα αντίγραφα μετά από μια διαδικασία συναίνεσης που απαιτεί από την πλειοψηφία των πλοιάρχων να συμφωνήσουν για την αποτυχία. Η αποτυχία έχει σχεδιαστεί για να ελαχιστοποιεί την απώλεια δεδομένων, εξασφαλίζοντας ότι τα αντίγραφα συγχρονίζονται πλήρως πριν από την προώθηση. Τα διαμερίσματα δικτύων διαχειρίζονται μέσω αποφάσεων που βασίζονται σε πλειοψηφία για την πρόληψη των συνθηκών του διαχωρισμού, αν και μπορεί να προκύψει ένα στενό παράθυρο απώλειας εγγραφής λόγω ασύγχρονης αντιγραφής. Οι επιλογές διαμόρφωσης επιτρέπουν τον συντονισμό της διαθεσιμότητας έναντι της συνέπειας κατά τη διάρκεια των αποτυχιών και οι χειροκίνητες εντολές αποτυχίας δίνουν στους χειριστές έλεγχο για συντήρηση.
Αυτή η αρχιτεκτονική επιτρέπει στο Redis cluster να παρέχει υψηλή διαθεσιμότητα και ανοχή στο διαμέρισμα με αυτόματη ανάκαμψη από τις αποτυχίες του κύριου κόμβου, εξασφαλίζοντας ότι το σύμπλεγμα παραμένει λειτουργικό και συνεπές υπό σενάρια αποτυχίας.