Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Cum se defectează eșecurile nodului de mâner al clusterului Redis


Cum se defectează eșecurile nodului de mâner al clusterului Redis


Redis Cluster gestionează defecțiunile nodului printr -o combinație de detectare a eșecului, promovare a replicii și gestionarea statului clusterului pentru a asigura funcționarea continuă și disponibilitatea datelor. Este conceput pentru a supraviețui eșecurilor câtorva noduri prin promovarea automată a replicilor pentru a înlocui stăpânii de neatins, menținând integritatea spațiului cheie, reducând în același timp riscurile de pierdere a datelor.

Comunicarea clusterului și detectarea eșecului

Nodurile de cluster Redis comunică printr-un protocol binar dedicat bazat pe TCP, numit Redis Cluster Bus. Fiecare nod menține conexiuni cu fiecare alt nod din cluster folosind acest autobuz, permițând verificări continue de sănătate și propagare de stat. Nodurile trimit periodic pachete de ping pentru a confirma starea operațională a colegilor lor și pentru a împărtăși informații despre starea clusterului. Această comunicare folosește un protocol de bârfă pentru a disemina eficient informațiile despre cluster, ajutând la detectarea defecțiunilor nodului.

Nodurile monitorizează colegii folosind un mecanism de ping activ. Dacă un nod nu răspunde la Pings într -o perioadă de expirare configurată (node_timeout), acesta este semnalat ca eventual eșec cu un statut PFAIL. Aceasta este o indicație de eșec tentativă, ceea ce înseamnă că nodul ar putea fi de neatins sau în jos, dar nu este încă confirmat. Dacă condiția PFAIL persistă și este confirmată de o majoritate a nodurilor master, nodul este marcat ca eșec, ceea ce indică faptul că este considerat de neatins sau în jos de către cluster. Acest mecanism de detectare a eșecului bazat pe consens ajută la prevenirea falselor pozitive în identificarea nodurilor eșuate.

Manipularea eșecurilor nodului principal

Când un nod principal este semnalat ca eșec, Redis Cluster inițiază un proces de failover pentru a promova una dintre replicile sale pentru a deveni noul maestru. Acest proces este declanșat automat de detectorul de eșec al clusterului fără intervenție administrativă. Replica promovată preia responsabilitatea de a servi sloturile hash gestionate anterior de către maestrul eșuat, asigurându -se că clusterul poate continua să servească cereri fără reconfigurare manuală.

Failover apare numai dacă există cel puțin o replică disponibilă și accesibilă pentru promovare. Dacă nu există o replică adecvată, clusterul intră într -o stare de eroare în care va înceta să accepte întrebările pentru a preveni servirea datelor inconsistente. Acest lucru evidențiază importanța de a avea replici configurate pentru fiecare master pentru a menține o disponibilitate ridicată.

Failover Mechanics and Safety

În timpul failover -ului, replica așteaptă să se sincronizeze complet cu maestrul pe care îl înlocuiește, asigurându -se că a procesat toate actualizările pendinte pentru a evita pierderea de date. Realizează acest lucru prin potrivirea compensării de replicare cu maestrul, astfel încât are un set de date actualizat înainte de a-și asuma rolul principal.

Odată sincronizată, replica solicită o nouă epocă de configurare de la majoritatea maeștrilor. Epoca este un timestamp logic utilizat pentru a urmări modificările de configurare în cluster. După obținerea consensului, replica transmite configurația actualizată la toate nodurile, anunțându -și promovarea către Master și retrogradarea vechiului maestru la replică sau eliminare.

Vechiul maestru, când se recuperează, primește această actualizare a configurației și oprește servirea întrebărilor ca maestru. Redirecționează solicitările clientului către noul maestru, asigurându -se că clienții continuă în mod transparent interacționând cu clusterul fără o intervenție manuală.

Manipularea partițiilor de rețea și a scenariilor de creier împărțit

Redis Cluster folosește un consens bazat pe majoritate pentru a evita problemele de creier împărțit în timpul partițiilor de rețea. Un maestru nu va fi eșuat decât dacă este de neatins de mai mult de jumătate din maeștri din cluster. Stăpânii care nu pot comunica cu majoritatea vor înceta să accepte scrierea, împiedicând stările de date divergente între partiții.

Cu toate acestea, dacă o partiție minoritară conține clienți care continuă să scrie la un maestru înainte de failover, există un potențial de pierdere a scrierii. Redis atenuează acest risc refuzând scrieri pe partea minorității după un interval de timp și pe partea majoritară, eșuând rapid peste stăpânul de neatins.

În ciuda acestor precauții, scrierile pot fi pierdute în timpul ferestrelor de failover, deoarece Redis folosește replicarea asincronă între maeștri și replici. Deoarece răspunsurile pentru a scrie comenzi și actualizări de replicare sunt trimise aproape simultan, fereastra pentru pierderea scrierii este foarte îngustă, dar nu imposibilă.

Opțiuni de configurare care afectează manipularea eșecului

Redis Cluster include opțiuni de configurare care influențează disponibilitatea și comportamentul în timpul defecțiunilor nodului:

-`Cluster-Cerquire-Full-Coverage` (implicit Da): clusterul nu mai acceptă scrierea în cazul în care orice porțiune a spațiului cheie este descoperită din cauza defecțiunilor nodului, asigurând o consistență puternică a datelor.
-`Cluster-Allow-Reads-when-down` (implicit nr): controale dacă citirile sunt permise atunci când clusterul este într-o stare de eșec. Activarea acestui lucru permite citirile din noduri chiar și în timpul eșecurilor parțiale, dar poate risca datele învechite.

Aceste setări permit administratorilor să echilibreze disponibilitatea și consecvența în funcție de cerințele aplicației.

Suport de failover manual

În plus față de failover automat, Redis Cluster oferă o comandă de failover manuală care poate fi emisă pe nodurile de replică. Acest lucru este util pentru scenarii de întreținere sau testare în care un administrator dorește să schimbe rolurile principale fără a aștepta un eveniment de eșec real.

Failover manual funcționează prin blocarea clienților pe actualul master, așteptând ca replica să se prindă pe deplin și apoi promovarea replicii cu o tranziție atomică lină. Acest lucru asigură pierderea de date în timpul schimbării rolului și perturbarea minimă a clienților.

Rezumat

Redis Cluster gestionează defecțiunile nodului în primul rând printr -un sistem de detectare a erorilor și failover bazat pe monitorizarea continuă prin intermediul autobuzului Redis Cluster și un protocol de bârfă. Nodurile detectează stăpâni de neatins și promovează automat replicile după un proces de consens care necesită o majoritate a stăpânilor să fie de acord cu eșecul. Failover este conceput pentru a minimiza pierderea de date, asigurându -se că replicile sunt complet sincronizate înainte de promovare. Partițiile de rețea sunt gestionate prin decizii bazate pe majoritate pentru a preveni condițiile de creier împărțit, deși poate apărea o fereastră restrânsă de pierderi de scriere din cauza replicării asincrone. Opțiunile de configurare permit reglarea disponibilității versus consecvența în timpul defecțiunilor, iar comenzile de failover manuale oferă operatorilor controlul pentru întreținere.

Această arhitectură permite Redis Cluster să ofere o disponibilitate ridicată și toleranță la partiție cu recuperarea automată din eșecurile nodului principal, asigurând că clusterul rămâne operațional și consecvent în scenarii de eșec.