Redis klastri käitleb sõlme tõrkeid tõrke tuvastamise, koopiate reklaamimise ja klastri olekuhalduse kombinatsiooni kaudu, et tagada jätkuv töö ja andmete kättesaadavus. Selle eesmärk on mõne sõlme tõrkeid ellu jääda, reklaamides automaatselt koopiaid, mis asendavad kättesaamatuid meistreid, säilitades võtmeruumi terviklikkuse, minimeerides samal ajal andmekaotuse riske.
klastri suhtlus ja ebaõnnestumiste tuvastamine
Redis klastri sõlmed suhtlevad spetsiaalse TCP-põhise binaarprotokolli kaudu, mida nimetatakse Redis klastri siini. Iga sõlm hoiab selle siini abil ühendusi iga teise klastri sõlmega, võimaldades pidevat tervisekontrolli ja riiklikku levikut. Sõlmed saadavad perioodiliselt pingipakette, et kinnitada oma eakaaslaste tööstaatust ja jagada teavet klastri oleku kohta. See suhtlus kasutab klastri teabe tõhusaks levitamiseks kuulujuttude protokolli, aidates sõlmede tõrgete tuvastamisel.
Sõlmed jälgivad eakaaslasi aktiivse pingimehhanismi abil. Kui sõlm ei reageeri konfigureeritud ajaperioodil (Node_timeout) Pingutele, siis märgitakse see kui PFAIL -i oleku korral ebaõnnestuda. See on esialgne tõrkenäitaja, mis tähendab, et sõlm võib olla kättesaamatu või allapoole, kuid seda pole veel kinnitatud. Kui PFAIL -i seisund püsib ja seda kinnitab enamus meistersõlmesid, märgitakse sõlm ebaõnnestununa, mis näitab, et seda peetakse klastri kättesaamatuks või allapoole. See konsensuspõhine rikke tuvastamise mehhanism aitab vältida valepositiivseid tulemusi ebaõnnestunud sõlmede tuvastamisel.
Masterõlme ebaõnnestumiste käitlemine
Kui meistersõlm märgitakse ebaõnnestumisena, algatab Redis Cluster tõrkeoverprotsessi, et edendada ühte oma koopiat, et saada uueks meistriks. Selle protsessi käivitab automaatselt klastri tõrkeandur ilma haldussekkumiseta. Edendatud koopia võtab vastutuse ebaõnnestunud meistri hallatava räsipesade teenimise eest, tagades, et klaster saaks jätkata päringute serveerimist ilma käsitsi ümberkonfigureerimiseta.
Ebaõnnestumine toimub ainult siis, kui on olemas vähemalt üks koopia ja reklaamimiseks kättesaadav. Kui sobivat koopiat pole, siseneb klaster tõrkeseisundisse, kus see lõpetab päringute vastuvõtmise, et vältida ebajärjekindlaid andmeid. See rõhutab, kui oluline on koopiad, mis on konfigureeritud iga meistri jaoks, et säilitada kõrge kättesaadavus.
Ebaõnnestumise mehaanika ja ohutus
Ebaõnnestumise ajal ootab koopia täielikku sünkroonimist selle asendamisega, tagades, et see on andmete kadumise vältimiseks töödelda kõiki ootel värskendusi. See saavutab selle, sobitades replikatsiooni nihke meistriga, nii et sellel on enne põhirolli eeldamist ajakohane andmestik.
Pärast sünkroonimist taotleb replica enamuse meistritelt uut konfiguratsiooni ajastut. Epoch on loogiline ajatempel, mida kasutatakse klastri konfiguratsiooni muudatuste jälgimiseks. Pärast konsensuse saamist edastab koopia värskendatud konfiguratsiooni kõigile sõlmedele, teatades selle edutamisest meistrile ja vanameistri lammutamisest replicale või eemaldamiseks.
Vana kapten saab selle taastumisel selle konfiguratsiooni värskenduse ja lõpetab päringute pakkumise meistrina. See suunab kliendi taotlused uuele meistrile, tagades, et kliendid jätkaksid klastriga läbipaistvalt suhtlemist ilma käsitsi sekkumiseta.
Võrgu sektsioonide ja jagatud aju stsenaariumide käitlemine
Redis Cluster kasutab enamuspõhist konsensust, et vältida aju sektsioonide ajal jagatud aju probleeme. Meister ebaõnnestub üle ainult siis, kui see on kättesaamatu enam kui pooled klastris olevatest meistritest. Magistrid, kes ei saa enamusega suhelda, lõpetavad kirjutiste aktsepteerimise, takistades erinevaid andmesideseisundeid vaheseinte vahel.
Kui vähemuse partitsioon sisaldab kliente, kes jätkavad enne tõrkeoveri kirjutamist, on potentsiaal kirjutamiskahjum. Redis leevendab seda riski, keeldudes vähemuse poolel pärast aegumist ja enamuse poolel, ebaõnnestudes kiiresti kättesaamatu meistri üle.
Vaatamata nendele ettevaatusabinõudele võib kirjutised kaduda tõrkeoviandiakeste ajal, kuna Redis kasutab magistri- ja koopiate vahelist asünkroonset replikatsiooni. Kuna käskude kirjutamise ja replikatsiooniuuenduste kirjutamise vastuseid saadetakse peaaegu samaaegselt, on kirjutiste kaotamise aken väga kitsas, kuid mitte võimatu.
Konfiguratsiooni valikud, mis mõjutavad tõrkekäitlemist
Redis klaster sisaldab konfiguratsioonivõimalusi, mis mõjutavad saadavust ja käitumist sõlme tõrgete ajal:
-`Cluster-Require-Full-Coverage` (vaikimisi jah): klaster lõpetab kirjutamise aktsepteerimise, kui sõlmede tõrgete tõttu avastatakse mõni võtmeruumi osa, tagades tugeva andmete järjepidevuse.
-`Cluster-Low-lugejad-WHEN-Down` (vaikimisi nr): kontrollib, kas loetud on lubatud, kui klaster on tõrkeseisundis. Selle võimaldamine võimaldab lugeda sõlmedest isegi osaliste tõrgete ajal, kuid võib riskida aegunud andmete esitamisega.
Need sätted võimaldavad administraatoritel tasakaalustada kättesaadavust ja järjepidevust rakenduse nõuete põhjal.
Käsitsi tõrkesiirde tugi
Lisaks automaatsele tõrkeoverile pakub Redis Cluster käsitsi tõrkeoveri käsku, mida saab välja anda replica sõlmedel. See on kasulik hooldus- või testimisstsenaariumide jaoks, kus administraator soovib magistrirolle vahetada ilma tegelikku rikke sündmust ootamata.
Käsitsi tõrkesiir töötab, blokeerides kliente praegusel meistril, oodates, kuni koopia täielikult järele jõuab, ja reklaamides seejärel koopia sujuva aatomi üleminekuga. See ei taga rollimuutuse ajal andmete kaotust ja klientide minimaalset häireid.
Kokkuvõte
Redis klastri käitleb sõlme tõrkeid peamiselt rikete tuvastamise ja tõrkesiirde süsteemi kaudu, mis põhineb pideval jälgimisel Redis klastri siini ja kuulujuttude protokolli kaudu. Sõlmed tuvastavad kättesaamatud meistrid ja propageerivad koopiaid automaatselt pärast konsensusprotsessi, milles nõutakse enamiku meistrite ebaõnnestumises kokku leppida. Failover on loodud andmete kadu minimeerimiseks, tagades koopiate enne reklaamimise täielikult sünkroonimise. Võrgusektsioone hallatakse enamuspõhiste otsuste kaudu jagatud aju tingimuste vältimiseks, ehkki asünkroonse replikatsiooni tõttu võib tekkida kitsas kirjutamise kadu. Konfiguratsiooni suvandid võimaldavad tõrke ajal saadavuse ja järjepidevuse häälestamist ja käsitsi tõrkevormi käsud annavad operaatoritele hoolduse kontrolli.
See arhitektuur võimaldab ReDIS -klastril tagada kõrge kättesaadavuse ja partitsiooni tolerantsi koos automaatsete sõlmede ebaõnnestumistest automaatse taastumisega, tagades klastri tööks ja järjepidevaks tõrkestsenaariumide korral.