Rreth kalimit nga Redis në Redis-cluster

Rreth kalimit nga Redis në Redis-cluster

Duke hyrë në një produkt që ka evoluar për më shumë se një dekadë, nuk është çudi që të takoni teknologji të vjetra. Por çfarë ndodh nëse pas gjashtë muajve duhet të përballoni një ngarkesë që është 10 herë më e lartë, ndërsa kostoja e rënieve rritet qindra herë? Në këtë rast, ju nevojitet një inxhinier i shkëlqyer të ngarkesave të mëdha. Por për shkak të mungesës së një të tilli, problemi më është besuar mua. Në pjesën e parë të artikullit do të tregoj se si kaluam nga Redis në Redis-cluster, ndërsa në pjesën e dytë do të jap këshilla se si të filloni të përdorni klasterin dhe çfarë të keni parasysh gjatë përdorimit.

Zgjedhja e teknologjisë

A është kaq e keqe Redis i veçantë (redis i veçantë) në konfigurimin 1 master dhe N skllevër? Pse e quaj atë një teknologji të vjetëruar?

Jo, Redis nuk është kaq i keq... Megjithatë, ka disa të meta që nuk mund të injorohen.

  • SĂ« pari, Redis nuk mbĂ«shtet mekanizmat e rikuperimit tĂ« fatkeqĂ«sive pas rĂ«nies sĂ« masterit. PĂ«r tĂ« zgjidhur kĂ«tĂ« problem, ne pĂ«rdorĂ«m njĂ« konfigurim me kalimin automatik tĂ« VIP-ve nĂ« njĂ« master tĂ« ri, ndryshimin e rolit tĂ« njĂ«rit prej skllevĂ«rve dhe kalimin e tĂ« tjerĂ«ve. Ky mekanizĂ«m funksionoi, por nuk mund tĂ« quhej njĂ« zgjidhje e besueshme. SĂ« pari, ndodhnin alarmime tĂ« false dhe, sĂ« dyti, ishte njĂ« herĂ«sh, dhe pas alarmimit kĂ«rkoheshin veprime manuale pĂ«r tĂ« ngjitur mekanizmin.

  • SĂ« dyti, prania e vetĂ«m njĂ« masteri sillte problem pĂ«r ndarjen e ngarkesĂ«s. Duhet tĂ« krijonim disa klasterĂ« tĂ« pavarur "1 master dhe N skllevĂ«r", pastaj tĂ« shpĂ«rndanim manualisht bazat mbi kĂ«to makina dhe tĂ« shpresonim qĂ« nesĂ«r ndonjĂ«ra prej bazave nuk do tĂ« pĂ«rshkonte aq shumĂ« sa do tĂ« duhej ta transferonim nĂ« njĂ« instancĂ« tĂ« veçantĂ«.

Cilat janë opsionet?

  • Zgjidhja mĂ« e shtrenjtĂ« dhe e pasur Ă«shtĂ« Redis-Enterprise. Ky Ă«shtĂ« njĂ« zgjidhje e kutisĂ« me mbĂ«shtetje tĂ« plotĂ« teknike. MegjithatĂ«, edhe pse duket e pĂ«rsosur nga pikĂ«pamja teknike, nuk na pĂ«rputhej pĂ«r arsye ideologjike.
  • Redis-cluster. Nga kutia ka mbĂ«shtetje pĂ«r kalimin e fatkeqĂ«sive tĂ« masterit dhe ndarjen e ngarkesĂ«s. NdĂ«rfaqja Ă«shtĂ« pothuajse e njĂ«jtĂ« me versionin e zakonshĂ«m. Duket premtuese, pĂ«r pengesat do tĂ« flasim mĂ« vonĂ«.
  • Tarantool, Memcache, Aerospike dhe tĂ« tjerĂ«. TĂ« gjitha kĂ«to mjete bĂ«jnĂ« pĂ«rafĂ«rsisht tĂ« njĂ«jtĂ«n gjĂ«. Por secili ka dobĂ«sitĂ« e veta. Ne vendosĂ«m tĂ« mos i vendosim tĂ« gjitha vezĂ«t nĂ« njĂ« basket. Memcache dhe Tarantool i pĂ«rdorim pĂ«r detyra tĂ« tjera dhe, duke kaluar pĂ«rpara, do tĂ« them se nĂ« praktikĂ«n tonĂ« kemi pasur mĂ« shumĂ« probleme me to.

Specifikimi i përdorimit

Le të shikojmë se cilat detyra kemi zgjidhur historikisht me Redis dhe cila funksionalitet kemi përdorur:

  • Cache para kĂ«rkesave ndaj shĂ«rbimeve tĂ« largĂ«ta si 2GIS | Golang

    GET SET MGET MSET "SELECT DB"

  • Cache para MYSQL | PHP

    GET SET MGET MSET SCAN "KEY BY PATTERN" "SELECT DB"

  • Kryesori pĂ«r shĂ«rbimin e punĂ«s me sesionet dhe koordinatat e shoferĂ«ve | Golang

    GET SET MGET MSET "SELECT DB" "ADD GEO KEY" "GET GEO KEY" SCAN

Siç e shihni, nuk ka matematikĂ« tĂ« avancuar. ÇfarĂ« ka atĂ«herĂ« vĂ«shtirĂ«sinĂ«? Le tĂ« analizojmĂ« nĂ« veçanti secilĂ«n metodĂ«.

Sanitizer.replaceElementWithChildren()
Përshkrimi
Karakteristikat e Redis-cluster
Zgjidhja

GET SET
Shkruaj/lexo çelësin

MGET MSET
Shkruaj/lexo disa çelësa
ÇelĂ«sat do tĂ« jenĂ« nĂ« node tĂ« ndryshme. Bibliotekat e gatshme dinĂ« tĂ« bĂ«jnĂ« Multi-operacione vetĂ«m brenda njĂ« node.
Zëvendëso MGET me një pipeline të N GET operacioneve

SELECT DB
Zgjidhni bazën me të cilën do të punojmë
Nuk mbështet disa baza të dhënash
Të gjitha në një bazë. Shtoni prefikse në çelësa

SCAN
Kaloni përmes të gjithëve çelësave në bazë
Pavarësisht se kemi një bazë, kalimi përmes të gjithëve çelësave në kluster është shumë i kushtueshëm.
Mbani invariat brenda një çelësi dhe bëni HSCAN për këtë çelës. Ose hiqni dorë krejtësisht.

GEO
Operacione me gjeokelësin
Gjeokelësi nuk shardohet

KEY BY PATTERN
Kërkoni çelësin sipas modelit
Pavarësisht se kemi një bazë, do të kërkojmë përmes të gjithë çelësave në kluster. Shumë i kushtueshëm.
Hiqni dorë ose mbani invariat, ashtu si në rastin e SCAN.

Redis vs Redis-cluster

ÇfarĂ« humbasim dhe çfarĂ« fitojmĂ« kur kalojmĂ« nĂ« kluster?

  • Disavantazhet: humbasim funksionalitetin e disa bazave.
    • NĂ«se duam tĂ« ruajmĂ« tĂ« dhĂ«na qĂ« nuk lidhen logjikisht nĂ« njĂ« kluster, do tĂ« duhet tĂ« bĂ«jmĂ« ndihma pĂ«rmes prefikseve.
    • Humbasim tĂ« gjitha operacionet "pĂ«r bazĂ«n", si SCAN, DBSIZE, CLEAR DB etj.
    • Multi-operacionet janĂ« bĂ«rĂ« ndjeshĂ«m mĂ« tĂ« komplikuara pĂ«r t'u realizuar, sepse mund tĂ« nevojitet ndihma nga disa node.
  • Avantazhet:
    • QĂ«ndrueshmĂ«ri nĂ« formĂ«n e kalimit tĂ« emergjencĂ«s pĂ«r masterin.
    • Shardimi nĂ« anĂ«n e Redis.
    • Transferimi i tĂ« dhĂ«nave midis node-ve nĂ« mĂ«nyrĂ« atomike dhe pa ndalese.
    • Shtimi dhe shpĂ«rndarja e kapaciteteve dhe ngarkesave pa ndĂ«rprerje.

Do të arrija në përfundimin se nëse nuk keni nevojë të siguroheni për një nivel të lartë qëndrueshmërie, atëherë kalimi në një klaster nuk ia vlen, pasi mund të jetë një detyrë jo triviale. Por nëse fillimisht zgjidhni midis një versioni të veçantë dhe një klasteri, atëherë duhet të zgjidhni klasterin, pasi ai nuk është në asnjë rast më i keq dhe për më tepër do t'ju heqë një pjesë të dhimbjeve të kokës.

Përgatitja për kalim

Të fillojmë me kërkesat për kalimin:

  • Ai duhet tĂ« jetĂ« pa shqetĂ«sim. NjĂ« ndalim i plotĂ« i shĂ«rbimit pĂ«r 5 minuta nuk na ndihmon.
  • Ai duhet tĂ« jetĂ« maksimalisht i sigurt dhe i gradual. Duam tĂ« kemi njĂ« lloj kontrolli mbi situatĂ«n. Nuk duam tĂ« hedhim gjithçka menjĂ«herĂ« dhe tĂ« lutemi pĂ«r butonin e rikthimit.
  • Humbej tĂ« minimalizuara tĂ« tĂ« dhĂ«nave gjatĂ« kalimit. E kuptojmĂ« qĂ« tĂ« kalosh nĂ« mĂ«nyrĂ« atomike do tĂ« jetĂ« shumĂ« e komplikuar, prandaj lejojmĂ« njĂ« shkĂ«putje tĂ« caktuar midis tĂ« dhĂ«nave nĂ« Redisin e zakonshĂ«m dhe atĂ« klaster.

Mirëmbajtja e klasterit

Para kalimit vlen të mendoni nëse mundemi të mbajmë klasterin:

  • GrafikĂ«t. Ne pĂ«rdorim Prometheus dhe Grafana pĂ«r grafikĂ«t e ngarkesĂ«s sĂ« procesorĂ«ve, kujtesĂ«s sĂ« zĂ«nĂ«, numrit tĂ« klientĂ«ve, numrit tĂ« operacioneve GET, SET, AUTH, etj.
  • Ekspertiza. Imagjinoni se nesĂ«r nĂ«n pĂ«rgjegjĂ«sinĂ« tuaj do tĂ« jetĂ« njĂ« klaster i madh. NĂ«se ai dĂ«shtoi, askush pĂ«rveç jush nuk do ta riparojĂ« atĂ«. NĂ«se fillon tĂ« ngadalĂ«sohet — tĂ« gjithĂ« do vrapojnĂ« tek ju. NĂ«se duhet tĂ« shtoni burime ose tĂ« shpĂ«rndani ngarkesĂ«n — sĂ«rish tek ju. QĂ« tĂ« mos bĂ«heni gri nĂ« 25, Ă«shtĂ« e mençur tĂ« parashikoni kĂ«to raste dhe tĂ« kontrolloni paraprakisht se si do tĂ« sillen teknologjitĂ« nĂ«n veprime tĂ« caktuara. Do flasim pĂ«r kĂ«tĂ« mĂ« nĂ« detaje nĂ« seksionin 'Ekspertiza'.
  • Monitorimet dhe njoftimet. Kur klasteri dĂ«shtoi, dĂ«shirojmĂ« tĂ« dimĂ« tĂ« parĂ«t. KĂ«tu ne e kufizuam njoftimin pĂ«r faktin se tĂ« gjitha nodeve iu kthehen tĂ« njĂ«jtat informata mbi gjendjen e klasterit (po, ndodhin edhe ndryshe). Problemet e tjera janĂ« mĂ« tĂ« shpejta pĂ«r t'u vĂ«nĂ« re nĂ«pĂ«rmjet njoftimeve tĂ« shĂ«rbimeve-klientĂ«ve tĂ« Redis.

Kënaqësi

Si do të kalojmë:

  • SĂ« pari, nevojitet tĂ« pĂ«rgatisim bibliotekĂ«n pĂ«r punĂ«n me klasterin. Si bazĂ« pĂ«r versionin nĂ« GĐŸ, morĂ«m go-redis dhe bĂ«mĂ« disa ndryshime pĂ«r ne. Realizuam metodat Multi pĂ«rmes pipeline-ve, si dhe ndryshuam disi rregullat pĂ«r pĂ«rsĂ«ritjen e kĂ«rkesave. Me versionin pĂ«r PHP, kishim mĂ« shumĂ« probleme, por nĂ« fund vendosĂ«m pĂ«r php-redis. SĂ« fundmi, ata implementuan mbĂ«shtetje pĂ«r klasterin, dhe sipas mendimit tonĂ«, ai duket mirĂ«.
  • MĂ« pas, duhet tĂ« vendosim vetĂ« klasterin. Kjo bĂ«het praktikisht me dy komanda mbi bazĂ«n e skedarit tĂ« konfigurimit. MĂ« shumĂ« rreth konfigurimit do tĂ« diskutojmĂ« mĂ« poshtĂ«.
  • PĂ«r njĂ« migrim tĂ« ngadaltĂ«, ne pĂ«rdorim dry-mode. MeqenĂ«se kemi dy versione tĂ« bibliotekĂ«s me njĂ« ndĂ«rfaqe identike (njĂ« pĂ«r versionin normal, tjetĂ«r pĂ«r klasterin), nuk Ă«shtĂ« e vĂ«shtirĂ« tĂ« krijojmĂ« njĂ« mbĂ«shtjellĂ«s qĂ« do tĂ« punojĂ« me versionin e veçantĂ« dhe njĂ«kohĂ«sisht tĂ« dublonte tĂ« gjitha kĂ«rkesat nĂ« klaster, tĂ« krahasojĂ« pĂ«rgjigjet dhe tĂ« shkruajĂ« shkaqet e mospĂ«rputhjeve nĂ« log (nĂ« rastin tonĂ« nĂ« NewRelic). KĂ«shtu, madje edhe nĂ«se gjatĂ« aktivizimit versioni klaster dĂ«shton, prodhimi ynĂ« nuk do tĂ« preket.
  • Pasi aktivizuam klasterin nĂ« dry-mode, mund tĂ« shohim qetĂ«sisht grafikĂ« tĂ« mospĂ«rputhjeve tĂ« pĂ«rgjigjeve. NĂ«se pĂ«rqindja e gabimeve po lĂ«viz ngadalĂ«, por me siguri drejt njĂ« konstante tĂ« vogĂ«l, atĂ«herĂ« gjithçka Ă«shtĂ« nĂ« rregull. Pse ka ende mospĂ«rputhje? Sepse shkrimi nĂ« versionin e veçantĂ« ndodh pak mĂ« herĂ«t se nĂ« klaster, dhe pĂ«r shkak tĂ« mikrologĂ«ve, tĂ« dhĂ«nat mund tĂ« jenĂ« tĂ« ndryshme. Duhet vetĂ«m tĂ« shohim logĂ«t e mospĂ«rputhjeve dhe nĂ«se tĂ« gjitha ato janĂ« tĂ« shpjegueshme nga mosaplikimi i shkrimit, atĂ«herĂ« mund tĂ« ecim pĂ«rpara.
  • Tani mund tĂ« kthejmĂ« dry-mode nĂ« anĂ«n e kundĂ«rt. Do tĂ« shkruajmĂ« dhe lexojmĂ« nga klasteri, ndĂ«rsa do tĂ« dublonim nĂ« versionin e veçantĂ«. Pse? GjatĂ« javĂ«s tjetĂ«r dĂ«shirojmĂ« tĂ« vĂ«zhgojmĂ« punĂ«n e klasterit. NĂ«se ndonjĂ«herĂ« zbulojmĂ« se nĂ« kulmin e ngarkesĂ«s ka probleme, ose kemi harruar ndonjĂ« aspekt, gjithmonĂ« kemi njĂ« rikthim emergjent nĂ« kodin e vjetĂ«r dhe tĂ« dhĂ«na aktuale falĂ« dry-mode.
  • Tani na mbetet tĂ« çaktivizojmĂ« dry-mode dhe tĂ« çmontojmĂ« versionin e veçantĂ«.

Ekspertiza

Së pari, një përmbledhje e strukturës së klasterit.

Së pari, Redis është një magazinë key-value. Si çelës përdoren vargje të caktuara. Si vlera mund të përdoren numra, vargje dhe struktura të plota. Këto të fundit janë shumë të shumta, por për të kuptuar strukturën e përgjithshme, kjo nuk është e rëndësishme.
Niveli i ardhshĂ«m pas çelĂ«save janĂ« slots (SLOTS). Çdo çelĂ«s i pĂ«rket njĂ« prej 16,383 slots. Brenda çdo slot-i mund tĂ« ketĂ« sa tĂ« doni çelĂ«sa. Pra, tĂ« gjithĂ« çelĂ«sat ndahen nĂ« 16,383 grupe tĂ« pa pĂ«rplase.
Rreth kalimit nga Redis në Redis-cluster

NĂ« cluster duhet tĂ« ketĂ« N master-nodes. Çdo node mund tĂ« paraqitet si njĂ« instancĂ« e veçantĂ« Redis, e cila di gjithçka pĂ«r nodet e tjera brenda cluster-it. Çdo master-node pĂ«rmban njĂ« numĂ«r slots. Çdo slot i pĂ«rket vetĂ«m njĂ« master-node. TĂ« gjitha slots duhet tĂ« shpĂ«rndahen midis nodave. NĂ«se disa slots nuk janĂ« shpĂ«rndarĂ«, atĂ«herĂ« çelĂ«sat qĂ« ruhen nĂ« to do tĂ« jenĂ« tĂ« paarritshĂ«m. ËshtĂ« e arsyeshme tĂ« bĂ«ni çdo master-node tĂ« funksionojĂ« nĂ« njĂ« makinĂ« logjike ose fizike tĂ« veçantĂ«. Gjithashtu, duhet tĂ« mbani nĂ« mend se çdo node funksionon vetĂ«m nĂ« njĂ« bĂ«rthamĂ«, dhe nĂ«se dĂ«shironi tĂ« ekzekutoni disa instanca Redis nĂ« njĂ« makinĂ« logjike, sigurohuni qĂ« ato tĂ« funksionojnĂ« nĂ« bĂ«rthema tĂ« ndryshme (ne nuk e kemi provuar kĂ«tĂ«, por teorikisht gjithçka duhet tĂ« funksionojĂ«). NĂ« thelb, master-nodet sigurojnĂ« shardim tĂ« zakonshĂ«m, dhe mĂ« shumĂ« master-nodes lejojnĂ« tĂ« shkallĂ«zoni kĂ«rkesat pĂ«r shkrim dhe lexim.

Pasi që të gjithë çelësat janë shpërndarë në slots dhe slots janë shpërndarë në master-nodes, mund të shtoni një numër të pakufizuar slayv-nodet në çdo master-node. Brenda çdo lidhjeje të tillë "master-slave" do të funksionojë replikimi i zakonshëm. Slayvët janë të nevojshëm për të shkallëzuar kërkesat për lexim dhe për kalimin në rast dështimi të masterit.
Rreth kalimit nga Redis në Redis-cluster

Tani le të flasim për operacione që do të ishte mirë të dimë të bëjmë.

Ne do të drejtohemi në sistem përmes Redis-CLI. Meqenëse Redis nuk ka një pikë hyrëse të vetme, operacionet e mëposhtme mund të kryhen në çdo nga nodat. Në çdo pikë do të theksoj mundësinë e kryerjes së operacionit nën ngarkesë.

  • E para dhe mĂ« e rĂ«ndĂ«sishmja qĂ« na nevojitet: operacioni cluster nodes. Ai kthen gjendjen e cluster-it, tregon listĂ«n e nodave, rolet e tyre, shpĂ«rndarjen e slots etj. Informacione shtesĂ« mund tĂ« merren duke pĂ«rdorur cluster info dhe cluster slots.
  • Do tĂ« ishte mirĂ« tĂ« ishim nĂ« gjendje tĂ« shtonim dhe hiqnim nodet. PĂ«r kĂ«tĂ« qĂ«llim, ekzistojnĂ« operacionet cluster meet dhe cluster forget. Kini parasysh se cluster forget duhet tĂ« aplikohet pĂ«r ÇDO nod, si pĂ«r masterat ashtu edhe pĂ«r replikat. NdĂ«rsa pĂ«r cluster meet Ă«shtĂ« e mjaftueshme tĂ« thirret vetĂ«m nĂ« njĂ« nod. Kjo ndryshim mund tĂ« jetĂ« dekurajues, prandaj Ă«shtĂ« mĂ« mirĂ« tĂ« informoheni pĂ«r tĂ« para se tĂ« filloni pĂ«rdorimin e klasterit. Shtimi i njĂ« node bĂ«het nĂ« siguri gjatĂ« operimit dhe nuk ndikon nĂ« funksionimin e klasterit (çka ka kuptim). NĂ«se planifikoni tĂ« hiqni njĂ« nod nga klasteri, duhet tĂ« siguroheni qĂ« nuk ka mbetur asnjĂ« slot mbi tĂ« (pĂ«rndryshe rrezikoni tĂ« humbni qasjen nĂ« tĂ« gjitha çelĂ«sat mbi kĂ«tĂ« nod). Gjithashtu, mos e fshini masterin qĂ« ka slave, pĂ«rndryshe do tĂ« kryhet njĂ« votim i panevojshĂ«m pĂ«r njĂ« master tĂ« ri. NĂ«se nĂ« nodet nuk ka mĂ« slot, atĂ«herĂ« kjo Ă«shtĂ« njĂ« problem i vogĂ«l, por pse tĂ« kemi zgjedhje tĂ« panevojshme nĂ«se mund ta hiqnim fillimisht slave.
  • NĂ«se Ă«shtĂ« e nevojshme tĂ« detyrohet ndĂ«rrimi i vendit mes master dhe slave, komanda e duhur Ă«shtĂ« cluster failover. Duke e thirrur kĂ«tĂ« nĂ« veprim, duhet tĂ« kuptoni se gjatĂ« kryerjes sĂ« operacionit, masteri do tĂ« jetĂ« i paarritshĂ«m. Zakonisht, ndĂ«rrimi ndodh pĂ«r mĂ« pak se njĂ« sekond, por nuk Ă«shtĂ« atomar. Mund tĂ« jeni tĂ« sigurt se njĂ« pjesĂ« e kĂ«rkesave ndaj masterit gjatĂ« kĂ«saj kohe do tĂ« pĂ«rfundojnĂ« me gabim.
  • Para hequr njĂ« nodĂ« nga klasteri, nuk duhet tĂ« mbeten slotĂ« nĂ« tĂ«. ËshtĂ« mĂ« mirĂ« t'i ri-shpĂ«rndani ato duke pĂ«rdorur komandĂ«n cluster reshard. SlotĂ«t do tĂ« transferohen nga njĂ« master nĂ« njĂ« tjetĂ«r. E gjithĂ« operacioni mund tĂ« zgjasĂ« disa minuta, kjo varet nga sasia e tĂ« dhĂ«nave qĂ« po transferohen, megjithatĂ« procesi i transferimit Ă«shtĂ« i sigurt dhe nuk ndikon aspak nĂ« punĂ«n e klasterit. KĂ«shtu, tĂ« dhĂ«nat mund tĂ« transferohen nga njĂ« nodĂ« nĂ« njĂ« tjetĂ«r nĂ«n ngarkesĂ«, pa u shqetĂ«suar pĂ«r disponueshmĂ«rinĂ« e tyre. MegjithatĂ«, ka edhe nuanca. SĂ« pari, transferimi i tĂ« dhĂ«nave Ă«shtĂ« i lidhur me njĂ« ngarkesĂ« tĂ« caktuar nĂ« nodĂ«n qĂ« merr dhe nĂ« nodĂ«n qĂ« dĂ«rgon. NĂ«se nodĂ« e pranuese Ă«shtĂ« tashmĂ« shumĂ« e ngarkuar me procesor, atĂ«herĂ« nuk duhet ta ngarkoni edhe mĂ« tej duke pranuar tĂ« dhĂ«na tĂ« reja. SĂ« dyti, sapo nĂ« masterin dĂ«rgues tĂ« mos ketĂ« mbetur asnjĂ« slot, tĂ« gjithĂ« slave-t e tij menjĂ«herĂ« do tĂ« kalojnĂ« tek masteri nĂ« tĂ« cilin ato slotĂ« janĂ« transferuar. Dhe problemi Ă«shtĂ« se tĂ« gjithĂ« kĂ«ta slave menjĂ«herĂ« do tĂ« duan tĂ« sinkronizojnĂ« tĂ« dhĂ«nat. Dhe do tĂ« keni fat nĂ«se kjo do tĂ« jetĂ« njĂ« sinkronizim i pjesshĂ«m dhe jo i plotĂ«. Merrni parasysh kĂ«tĂ«, dhe kombinoni operacionet e transferimit tĂ« slotĂ«ve dhe çaktivizimin/transferimin e slave-ve. Ose shpresoni se keni njĂ« rezervĂ« tĂ« mjaftueshme.
  • ÇfarĂ« tĂ« bĂ«ni nĂ«se gjatĂ« transferimit keni zbuluar se keni humbur slotĂ«t? Shpresoj se kjo problem nuk do t'ju preke, por nĂ«se ndodh, ekziston operacioni cluster fix. Ai do t'i shpĂ«rndajĂ« slotĂ«t nĂ« nodĂ« nĂ« njĂ« rend tĂ« rastĂ«sishĂ«m. Rekomandoj tĂ« kontrolloni punĂ«n e tij, duke e fshirĂ« paraprakisht njĂ« nodĂ« nga klasteri me slotĂ« tĂ« shpĂ«rndara. Duke qenĂ« se tĂ« dhĂ«nat nĂ« slotĂ«t e pa-shpĂ«rndara nuk janĂ« tĂ« arritshme, Ă«shtĂ« tepĂ«r vonĂ« tĂ« shqetĂ«soheni pĂ«r problemet me disponueshmĂ«rinĂ« e kĂ«tyre slotĂ«ve. Nga ana tjetĂ«r, operacioni nuk do tĂ« ndikohet nga slotĂ«t e shpĂ«rndara.
  • NjĂ« operacion tjetĂ«r i dobishĂ«m Ă«shtĂ« monitor. Ai lejon tĂ« shihni nĂ« kohĂ« reale tĂ« gjithĂ« listĂ«n e kĂ«rkesave qĂ« po i drejtohen nodĂ«s. MĂ« shumĂ« se kaq, pĂ«rmes tij mund tĂ« bĂ«ni grep dhe tĂ« zjidhni nĂ«se ka trafik tĂ« nevojshĂ«m.

Po ashtu, është e rëndësishme të përmendet procedura e kalimit të fatkeqësisë së master-it. Nëse flasim shkurt, ajo ekziston dhe, sipas mendimit tim, funksionon mjaft mirë. Megjithatë, mos mendoni se nëse tërhiqni kabllon nga priza në makinë me master-nod, Redis do të kalojë menjëherë dhe klientët nuk do ta ndjejnë humbjen. Nga përvoja ime, kalimi ndodh brenda disa sekondash. Gjatë kësaj kohe, një pjesë e të dhënave do të jetë e paqasshme: zbulohet mungesa e master-it, nodet votojnë për një të ri, slave-t kalohen, të dhënat sinkronizohen. Mënyra më e mirë për t'u siguruar vetë se skema funksionon është të organizoni stërvitje lokale. Ngritni një klaster në laptopin tuaj, jepni një ngarkesë minimale, simuloni një rënie (për shembull, duke bllokuar portet), vlerësoni shpejtësinë e kalimit. Sipas mendimit tim, vetëm duke luajtur në këtë mënyrë për një ose dy ditë, mund të jesh i sigurt për funksionimin e teknologjisë. Ose, mund të shpresoni se softueri që përdoret nga gjysma e internetit padyshim funksionon.

Konfigurimi

Shpesh, konfigurimi është gjëja e parë që nevojitet për të filluar punën me mjetin. Dhe kur gjithçka fillon të funksionojë, nuk dëshiron ta prekësh konfigurimin. Kërkohen përpjekje të caktuara për t'u detyruar të kthehesh në cilësime dhe t'i shqyrtosh ato me kujdes. Nga sa mbaj mend, kemi pasur të paktën dy dështime serioze për shkak të pamundësisë për të treguar kujdes ndaj konfigurimit. Kushtoni vëmendje të veçantë pikave të mëposhtme:

  • timeout 0
    Koha gjatë së cilës mbyllen lidhjet e pasive (në sekonda). 0 - nuk mbyllen
    Nuk çdo libërtonë tonë dinte t'i mbyllte lidhjet në mënyrë të saktë. Duke çaktivizuar këtë cilësim, rrezikojmë të bëjmë një limit në numrin e klientëve. Nga ana tjetër, nëse ka një problem të tillë, ndalja automatike e lidhjeve të humbura do ta maskojë atë, dhe mund të mos e vërejmë. Për më tepër, mos e aktivizoni këtë cilësim kur përdorni lidhje persistente.
  • Save x y & appendonly yes
    Ruajtja e snapshot-it RDB.
    Problemet RDB/AOF do t'i diskutojmë në detaje më poshtë.
  • stop-writes-on-bgsave-error no & slave-serve-stale-data yes
    Nëse është aktivizuar, atëherë në rastin e dështimit të snapshot-it RDB, master-i do të ndalojë pranimin e kërkesave për ndryshime. Nëse humbet lidhja me master-in, ato slave mund të vazhdojnë të përgjigjen ndaj kërkesave (po). Ose do të ndalojnë përgjigjen (jo)
    Nuk na pëlqen situata në të cilën Redis transformohet në një përrallë.
  • repl-ping-slave-period 5
    Pas këtij intervali, ne do të shqetësohemi se mjeshtri është prishur dhe është koha për ta kryer procedurën e kalimit në sistem të dytë.
    Do të duhet të gjejmë manualisht ekuilibrin midis alarmeve të rreme dhe aktivizimit të kalimit në sistem të dytë. Në praktikën tonë, kjo është 5 sekonda.
  • repl-backlog-size 1024mb & epl-backlog-ttl 0
    Saktësisht aq të dhëna mund të ruajmë në tampon për replikën që ka humbur lidhjen. Nëse tamponi përfundon, do të jetë e nevojshme të sinkronizohemi plotësisht.
    Praktika tregon se është më mirë të vendosni një vlerë më të madhe. Shkaku për të cilin një replikë mund të fillojë të mbetet pas është mjaft i rëndë. Nëse ajo vonohet, gjasat janë se mjeshtri juaj tashmë po përballet me vështirësi, dhe sinkronizimi i plotë do të jetë pika e fundit.
  • maxclients 10000
    Numri maksimal i klientëve në një kohë të vetme.
    Nga përvoja jonë, është më mirë të vendosni një vlerë më të madhe. Redis e menaxhon mirë me 10,000 lidhje. Thjesht sigurohuni që sistemi të ketë mjaft sokete.
  • maxmemory-policy volatile-ttl
    Rregulli sipas të cilit fshihen çelësat kur arrihet kufiri i memories së disponueshme.
    Këtu është e rëndësishme jo rregulli vetë, por kuptimi se si do të ndodhë kjo. Redis është për t'u lavdëruar për aftësinë e tij për të punuar normalisht kur arrihet kufiri i memories.

Problemet RDB dhe AOF

Megjithëse Redis vetë ruan të gjitha informacionet në memorien RAM, gjithashtu ka një mekanizëm për ruajtjen e të dhënave në disk. Më saktësisht, tre mekanizma:

  • RDB-snapshot — njĂ« kopje e plotĂ« e tĂ« dhĂ«nave. Caktohet pĂ«rmes konfigurimit SAVE X Y dhe lexohet si "Ruaj njĂ« kopje tĂ« plotĂ« tĂ« tĂ« dhĂ«nave çdo X sekonda, nĂ«se Ă«shtĂ« ndryshuar tĂ« paktĂ«n Y çelĂ«sa."
  • Skeda e zakonshme — njĂ« listĂ« e operacioneve sipas rendit tĂ« ekzekutimit. Shton operacionet e reja nĂ« skedĂ« çdo X sekonda ose çdo Y operacione.
  • RDB dhe AOF — njĂ« kombinim i dy mekanizmave tĂ« mĂ«parshĂ«m.

Të gjitha metodat kanë avantazhet dhe disavantazhet e tyre, nuk do t'i rendis të gjitha, vetëm do të veçoj disa pika që nuk janë aq të dukshme, sipas mendimit tim.

Së pari, për të ruajtur një snapshot RDB, është e nevojshme të thërrisni FORK. Nëse ka shumë të dhëna, kjo mund të ngadalësojë tërë Redis për një periudhë prej disa milisekondash deri në një sekondë. Për më tepër, sistemi kërkon të alokojë memorien për një snapshot të tillë, gjë që çon në nevojën për të mbajtur një rezerva të dyfishtë të memorjes RAM: nëse Redis alokohet 8 GB, atëherë në makinë virtuale me të duhet të jetë e disponueshme 16.

Në të dytën, ka probleme me sinkronizimin e pjesshëm. Në modin AOF, gjatë ripërputhjes së skllavëve mund të realizohet një sinkronizim i plotë në vend të një sinkronizimi të pjesshëm. Pse ndodh kjo, nuk kam mundur ta kuptoj. Por duhet ta mbani mend këtë.

Këto dy pika tashmë na bëjnë të mendojmë nëse na duhen vërtet këto të dhëna në disk, nëse gjithsesi janë të kopjuara nga skllavët. Mund të humbasim të dhëna vetëm në rast të dështimit të të gjitha skllavëve, dhe kjo është një problem i nivelit "zjarri në DC". Si një kompromis, mund të propozohet që të ruajmë të dhënat vetëm në skllavë, por në këtë rast duhet të sigurohemi që këta skllavë kurrë të mos bëhen mjeshtër gjatë rikuperimit emergjent (për këtë ka një cilësim të prioriteteve të skllavëve në konfigurimin e tyre). Për veten, në çdo rast konkret mendojmë nëse duhet të ruajmë të dhëna në disk, dhe shpesh përgjigjja është "jo".

Përfundim

Në përfundim, shpresoj të kem dhënë një pasqyrë të përgjithshme për funksionimin e redis-cluster-it atyre që nuk e kanë dëgjuar fare për të, dhe gjithashtu të kem theksuar disa çështje të paqarta për ata që e përdorin prej kohësh.
Faleminderit për kohën tuaj dhe, si zakonisht, komentet rreth temës janë të mirëpritura.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster