A Redis Cluster a csomópont hibáit kezeli a meghibásodási észlelés, a replika promóció és a klaszter állapotkezelés kombinációjával, hogy biztosítsa a folyamatos működést és az adatok rendelkezésre állását. Úgy tervezték, hogy néhány csomópont meghibásodásait túlélje azáltal, hogy automatikusan előmozdítja a replikákat a elérhetetlen mesterek helyettesítésére, megőrizve a kulcstér integritását, miközben minimalizálja az adatvesztési kockázatot.
Klaszterkommunikáció és meghibásodás észlelése
A REDIS klasztercsomópontok egy dedikált TCP-alapú bináris protokollon keresztül kommunikálnak, az úgynevezett Redis Cluster Bus. Minden csomópont fenntartja a kapcsolatot a klaszter minden más csomópontjával, amely a busz segítségével folytonos egészségügyi ellenőrzéseket és állapotterjesztést biztosít. A csomópontok rendszeresen küldnek pingcsomagokat, hogy megerősítsék társaik működési állapotát, és megosszák a klaszter állapotáról szóló információkat. Ez a kommunikáció egy pletyka protokollt használ a klaszterinformációk hatékony terjesztésére, segítve a csomópont hibáinak kimutatását.
A csomópontok aktív pingmechanizmus segítségével figyelik a társaikat. Ha egy csomópont nem reagál a pingekre egy konfigurált időtúllépési perióduson belül (NODE_TIMEOUT), akkor azt a PFAIL státusával valószínűleg kudarcot vall. Ez egy óvatos kudarc -jelzés, ami azt jelenti, hogy a csomópont elérhetetlen vagy lefelé fordulhat, de még nem erősítik meg. Ha a PFAIL -állapot továbbra is fennáll, és a mestercsomópontok többsége megerősíti, akkor a csomópontot meghibásodnak, jelezve, hogy azt a klaszter elérhetetlennek vagy lefelé tartja. Ez a konszenzus-alapú meghibásodási detektálási mechanizmus segít megelőzni a hamis pozitív eredményeket a sikertelen csomópontok azonosításában.
A Master Node hibák kezelése
Amikor a mester csomópontot meghibásodnak, az Redis Cluster egy feladatátvételi folyamatot kezdeményez, hogy elősegítse annak egyik másolatát, hogy az új mesterré váljon. Ezt a folyamatot automatikusan kiváltja a klaszter meghibásodási detektora adminisztratív beavatkozás nélkül. Az előléptetett replika átveszi a Hash Slots kiszolgálásának felelősségét, amelyet korábban a sikertelen mester kezelt, biztosítva, hogy a klaszter kézi újrakonfiguráció nélkül folytathassa a kérelmek kiszolgálását.
A feladatátvétel csak akkor fordul elő, ha legalább egy replika áll rendelkezésre, és előmozdítható. Ha nem létezik megfelelő replika, akkor a klaszter hibaállapotba lép, ahol abbahagyja a lekérdezések elfogadását az inkonzisztens adatok kiszolgálásának megakadályozása érdekében. Ez kiemeli annak fontosságát, hogy a replikák minden egyes mester számára konfigurálva vannak a magas rendelkezésre állás fenntartása érdekében.
feladatátvételi mechanika és biztonság
A feladatátvétel során a replika arra vár, hogy teljesen szinkronizáljon az általa helyettesítő mesterrel, biztosítva, hogy az adatveszteség elkerülése érdekében feldolgozza az összes függőben lévő frissítést. Ezt úgy éri el, hogy a replikációs eltolást a Mesterrel illeszti, így naprakész adatkészlettel rendelkezik, mielőtt vállalja a főszerepet.
A szinkronizálás után a replika új konfigurációs korszakot kér a mesterek többségétől. A korszak egy logikai időbélyeg, amelyet a klaszter konfigurációs változásainak nyomon követésére használnak. A konszenzus megszerzése után a replika a frissített konfigurációt továbbítja az összes csomópontnak, bejelenti annak promócióját, hogy elsajátítsák, és a régi mester lerakódjon a replika vagy az eltávolítás céljából.
A régi mester, amikor helyreállítja, megkapja ezt a konfigurációs frissítést, és leállítja a lekérdezések mesterként történő kiszolgálását. Átirányítja az ügyfelek kéréseit az új mesterre, biztosítva, hogy az ügyfelek kézi beavatkozás nélkül átláthatóan folytatják a klaszterrel való interakciót.
A hálózati partíciók és az osztott agy forgatókönyvek kezelése
A Redis Cluster többségi alapú konszenzust alkalmaz a megosztott agyi problémák elkerülésére a hálózati partíciók során. A mesternek csak akkor lesz sikertelen, ha a klaszter mesterek több mint fele elérhetetlen. Azok a mesterek, akik nem tudnak kommunikálni a többséggel, abbahagyják az írások elfogadását, megakadályozzák a partíciók közötti eltérő adatállapotokat.
Ha azonban egy kisebbségi partíció olyan ügyfeleket tartalmaz, amelyek folytatják a mesterhöz való írást a feladatátvétel előtt, akkor van potenciál az írásvesztés. Redis enyhíti ezt a kockázatot azáltal, hogy megtagadja a kisebbségi oldalon az időkorlát és a többség oldalán az írásokat, azáltal, hogy gyorsan kudarcot vall a elérhetetlen mester felett.
Ezen óvintézkedések ellenére az írások elveszhetnek a feladatátvételi ablakok során, mivel a Redis aszinkron replikációt alkalmaz a mesterek és a replikák között. Mivel a parancsok írására vonatkozó válaszok és a replikációs frissítések szinte egyszerre kerülnek elküldésre, az írás elvesztésének ablaka nagyon szűk, de nem lehetetlen.
Konfigurációs beállítások, amelyek befolyásolják a meghibásodást
A Redis Cluster olyan konfigurációs lehetőségeket tartalmaz, amelyek befolyásolják a rendelkezésre állást és a viselkedést a csomópont hibái során:
-`Cluster-Require-Full-Coverage (alapértelmezett igen): A klaszter abbahagyja az írást, ha a kulcstér bármely részét a csomópont hibák miatt fedezik fel, biztosítva az erős adatok következetességét.
-`klaszter-elolvasások--down-down" (alapértelmezett szám): Ellenőrzi, hogy az olvasások megengedettek-e, ha a klaszter kudarc állapotban van. Ennek engedélyezése lehetővé teszi a csomópontokból származó olvasást még a részleges hibák során, de kockáztathatja az elakadt adatokat.
Ezek a beállítások lehetővé teszik az adminisztrátorok számára, hogy az alkalmazáskövetelmények alapján kiegyensúlyozzák a rendelkezésre állást és a konzisztenciát.
Kézi feladatátvételi támogatás
Az automatikus feladatátvételen kívül az Redis Cluster egy kézi feladatátvételi parancsot is biztosít, amelyet a replika csomópontokon lehet kiadni. Ez hasznos karbantartási vagy tesztelési forgatókönyvekhez, amikor az adminisztrátor a főszerepeket cserélni kívánja anélkül, hogy várja meg a tényleges kudarc eseményét.
A kézi feladatátvétel azáltal működik, hogy blokkolja az ügyfeleket az aktuális mesternél, várva, hogy a replika teljes mértékben felzárkózjon, majd a replikát sima atomi átmenetel előmozdítja. Ez nem biztosítja az adatvesztést a szerepváltozás során és az ügyfelek minimális zavarát.
Összegzés
A Redis Cluster a csomópont hibáit elsősorban egy hibaérzékelő és feladatátvételi rendszeren keresztül kezeli, amely a Redis Cluster buszon keresztüli folyamatos megfigyelésen alapul, és egy pletyka protokollon keresztül. A csomópontok észlelik a elérhetetlen mestert, és automatikusan elősegítik a replikákat olyan konszenzusos folyamat után, amely megköveteli, hogy a mesterek többsége megállapodjon a kudarcról. A feladatátvétel célja az adatvesztés minimalizálása azáltal, hogy a replikák teljes mértékben szinkronizálódnak a promóció előtt. A hálózati partíciókat többségi alapú döntésekkel kezelik a megosztott agyi körülmények megelőzésére, bár az írásvesztés szűk ablaka az aszinkron replikáció miatt fordulhat elő. A konfigurációs beállítások lehetővé teszik a rendelkezésre állás hangolását és a következetességet a hibák során, és a kézi feladatátvételi parancsok biztosítják az operátorok karbantartását.
Ez az architektúra lehetővé teszi az Redis Cluster számára, hogy magas rendelkezésre állást és partíciós toleranciát biztosítson a Master Node meghibásodásokból való automatikus visszanyeréssel, biztosítva, hogy a klaszter működőképes maradjon és következetes legyen a meghibásodási forgatókönyvek szerint.