
Toodet, mis on arenenud ĂŒle kĂŒmne aasta, pole ĂŒldse ĂŒllatav kohata aegunud tehnoloogiaid. Ent mis juhtub, kui kuue kuu pĂ€rast peate taluma kĂŒmme korda suuremat koormust ja vĂ€ljaminekud kukuvad sadadel kordadel? Sellisel juhul on teil vajalik kĂ”rge koormuse insener. Kuid kuna ei olnud sellist spetsialisti, usaldati probleem minu kĂ€tte. Artikli esimeses osas rÀÀgin, kuidas me ĂŒleminek Rediselt Redis-klastrile teostasime, ja teises osas jagan nĂ€punĂ€iteid, kuidas klastrit kasutada ja millele tĂ€helepanu pöörata töös.
Tehnoloogia valik
Kas eraldi Redis on nii halb? Kas eraldi Redis (standalone redis) konfiguratsioonis 1 meister ja N orja jaoks? Miks ma pean seda aegunud tehnoloogiaks? (standalone redis) konfiguratsioonis 1 master ja N slave'i? Miks ma nimetan seda vananenud tehnoloogiaks?
Ei, Redis ei ole nii halb... Siiski on teatud puudusi, mida ei tohi ignoreerida.
Esiteks, Redis ei toeta meistrite ebaĂ”nnestumise ajal taastumise mehhanisme. Selle probleemi lahendamiseks kasutasime konfigureerimist, mis automaatselt suunab VIP-e uuele meistrile, muutes ĂŒhe orja rolli ja lĂŒlitades ĂŒlejÀÀnud sisse. See mehhanism töötas, kuid seda ei saanud pidada usaldusvÀÀrseks lahenduseks. Esiteks, toimusid valehĂ€dasid ja teiseks, see oli ĂŒhekordne ning sellele jĂ€rgnesid kĂ€sitsi teostatavad toimingud.
Teiseks, ainult ĂŒhe meistri olemasolu tĂ”i kaasa ĆĄardinguprobleemi. Oli vajalik luua mitu sĂ”ltumatut klastrit "1 meister ja N orja", seejĂ€rel jagada andmebaasid nende masinate vahel kĂ€sitsi ja loota, et hommikuks ei paisu ĂŒkski andmebaas nii, et see tuleb viia eraldi instantsi.
Millised on valikud?
- KÔige kallim ja rikkam lahendus on Redis-Enterprise. See on karbilahendus tÀie tehnilise toetusega. Kuigi see nÀeb tehniliselt ideaalne vÀlja, ei sobinud see meile ideoloogilistel pÔhjustel.
- Redis-cluster. Tugineb oli toeks hĂ€daolukordade ĂŒlemineku ja jagamise toetamine. Liides ei erine praktiliselt tavalisest versioonist. See nĂ€eb paljutĂ”otav vĂ€lja, aga rÀÀgime hiljem keerukustest.
- Tarantool, Memcache, Aerospike ja teised. KĂ”ik need tööriistad teevad enamasti sama. Kuid igalĂŒhel on oma puudused. Otsustasime mitte kĂ”ik munad ĂŒhte korvi panna. Memcache ja Tarantool on meil muude ĂŒlesannete jaoks, ja, et ette öelda, on meie kogemuse jĂ€rgi nendega olnud rohkem probleeme.
Kasutamisomadused
Vaadakem, milliseid ĂŒlesandeid oleme ajalooliselt Redisâiga lahendanud ja millist funktsionaalsust kasutanud:
- Cache enne pÀringuid kaugteenustele nagu 2GIS | Golang
GET SET MGET MSET "SELECT DB"
- Cache enne MYSQL | PHP
GET SET MGET MSET SCAN "KEY BY PATTERN" "SELECT DB"
- Peamine salvestuskoht seansside haldamiseks ja juhtide koordinaatide jaoks | Golang
GET SET MGET MSET "SELECT DB" "ADD GEO KEY" "GET GEO KEY" SCAN
Nagu nÀha, pole siin mingit kÔrgemat matemaatikat. Kus siis seisneb keerukus? Vaatame iga meetodi eraldi.
Meetod
Kirjeldus
Redis-clusteri eripÀrad
Lahendus
GET SET
Kirjutada/ette lugeda vÔti
MGET MSET
Kirjutada/ette lugeda mitu vÔtit
VĂ”tmed asuvad erinevates sĂ”lmedes. Valmis raamatukogud oskavad teha Multi-operatsioone ainult ĂŒhe sĂ”lme piires.
Asenda MGET N GET operatsioonide pipeline'iga.
VALI DB
Vali andmebaas, millega töötame.
Ei toeta mitut andmebaasi.
Koguda kĂ”ik ĂŒhte andmebaasi. Lisada vĂ”tmetele prefikseid.
SCAN
KÀia lÀbi kÔik vÔtmed andmebaasis.
Kuna meil on ĂŒks andmebaas, on kĂ”igi vĂ”tmete mööda kĂ€imine klastris liiga kulukas.
Hoidke invariant ĂŒhes vĂ”tmes ja tehke HSCAN selle vĂ”tme jĂ€rgi. VĂ”i loobuge sellest tĂ€ielikult.
GEO
Operatsioonid geovÔtmega.
GeovÔti ei jagune.
KEY BY PATTERN
Otsige vÔtit mustri jÀrgi.
Kuna meil on ĂŒks andmebaas, otsime kĂ”igi vĂ”tmete kaudu klastris. Liiga kulukas.
Loobuda vÔi hoida invariant, nagu SCAN-i puhul.
Redis vs Redis-cluster
Mida me kaotame ja mida me saame klastrisse ĂŒleminekul?
- Puudused: kaotame mitme andmebaasi funktsionaalsuse.
- Kui soovime salvestada ĂŒhte klastrisse loogiliselt mitte seotud andmeid, peame tegema tĂŒlikad lahendused prefiksite nĂ€ol.
- Kaotame kĂ”ik âandmebaasiâ operatsioonid, nagu SCAN, DBSIZE, CLEAR DB jne.
- Mitme operatsiooni teostamine on oluliselt keerulisem, kuna vÔib osutuda vajalikuks pöörduda mitme sÔlmese poole.
- Eelised:
- Vigu kannatavad sĂŒsteemid, mis pakuvad varu juhtimist.
- Shardimine Redis'i kĂŒlgedel.
- Andmete edastamine sÔlmede vahel, atomaarne ja katkestuseta.
- VĂ”imsuse ja koormuse lisamine ja ĂŒmberjaotamine katkestuseta.
JĂ”uaksin jĂ€reldusele, et kui teil ei ole vaja kĂ”rget varu tagamise taset, ei ole klastrisse ĂŒleminek selle vÀÀrt. See vĂ”ib osutuda keeruliseks ĂŒlesandeks. Kuid kui valida eriversiooni ja klastriversiooni vahel, tasub valida klaster, kuna see ei jÀÀ mingisuguses osas alla ja vĂ€hendab teie muret.
Ăleminekuks valmistumine
Alustame ĂŒleminekuks vajalike nĂ”udmistega:
- See peab olema sujuv. TĂ€ielik teenuse seiskamine 5 minutiks ei sobi.
- See peab olema vĂ”imalikult ohutu ja jĂ€rkjĂ€rguline. Soovime omada mingit kontrolli olukorra ĂŒle. Me ei soovi kĂ”ike korraga kokku panna ja lootma jÀÀda tagasivĂ”tmise nupule.
- Minimaalsed andmekadud ĂŒleviimise korral. Me mĂ”istame, et atomaarne ĂŒleminek on vĂ€ga keeruline, seetĂ”ttu lubame teatud desĂŒnkroniseerimist tavaliselt ja klasterdatud Redis'i andmete vahel.
Klastri hooldus
Enne ĂŒleminekut tuleks mĂ”elda, kas me suudame klassit toetada:
- Graafikud. Kasutame tÀitmiseks Prometheust ja Grafanat, et jÀlgida protsessorite koormust, mÀluhulka, klientide arvu, GET, SET, AUTH ja muude operatsioonide arvu.
- Ekspertiis. Kujutage ette, et homme on teie vastutada suur klaster. Kui see rikki lĂ€heb, ei saa keegi, vĂ€lja arvatud teie, seda parandada. Kui see hakkab pidurduma â jooksevad kĂ”ik teie poole. Kui on vaja lisada ressursse vĂ”i koormust ĂŒmber jaotada â taas teie poole. Et vĂ€ltida halli juuste saamist 25-aastasena, on soovitatav arvestada nende olukordadega ja eelnevalt kontrollida, kuidas tehnoloogia erinevates olukordades kĂ€itub. RÀÀgime sellest lĂ€hemalt jaotises âEkspertiisâ.
- Monitooringud ja teavitamine. Kui klaster rikki lÀheb, tahad sellest esimesena teada saada. Siin oleme piirdunud teavitamisega, et kÔik sÔlmed edastavad sama teavet klooni oleku kohta (jah, juhtub ka teisiti). Teisi probleeme on kiiremini mÀrgata Redis'i klientide teenuste teavituste kaudu.
Kolimine
Kuidas me kolime:
- Esiteks tuleb ette valmistada raamatukogu klooniga töötamiseks. GĐŸ versiooni aluseks vĂ”tsime go-redis'i ja muutsime seda veidi vastavalt enda vajadustele. Realiseerisime Multi-meetodid lĂ€bi pipeline'ide ning muutisime ka pĂ€ringute kordamise reegleid. PHP versiooniga tekkis rohkem probleeme, kuid lĂ”puks otsustasime php-redis'i kasuks. Hiljuti on nad kasutusele vĂ”tnud klastritoe ning meie arvates nĂ€eb see hea vĂ€lja.
- SeejĂ€rel tuleb klaster enda ĂŒles seada. See toimub sĂ”na otseses mĂ”ttes kahe kĂ€suga, lĂ€htudes konfiguratsioonifailist. RÀÀgime seadistamisest lĂ€hemalt allpool.
- Aeglase ĂŒlemineku jaoks kasutame dry-reĆŸiimi. Kuna meil on kaks versiooni teegist, millel on sama liides (ĂŒks tavaversioon ja teine klastriversioon), pole midagi keerulist teha mĂ€hist, mis töötaks eraldi versiooniga ja samal ajal dubleeriks kĂ”ik pĂ€ringud klastrisse, vĂ”rdleks vastuseid ja kirjutaks lahknevused logidesse (meie puhul NewRelic). Nii et isegi kui klastriversioon rikke tĂ”ttu avalikustamise ajal puruneb, ei mĂ”juta see meie tootmist.
- Klastri dry-reĆŸiimis vĂ€ljatoomisega saame rahulikult jĂ€lgida vastuste lahknevuste graafikut. Kui vigade osakaal aeglaselt, kuid kindlalt liigub mĂ”ne vĂ€ikese konstantse suunas, siis on kĂ”ik hĂ€sti. Miks lahknevused ikkagi tekivad? Sest eraldi versioonis toimumine toimub veidi varem kui klastris, ja tĂ€nu mikroviivitusele vĂ”ivad andmed lahkuda. JÀÀnud on vaid vaadata lahknevuste logisid, ja kui kĂ”ik need on seletatavad mitteaatomaarsete kirjutamiste kaudu, siis saab edasi liikuda.
- NĂŒĂŒd saab dry-mode'i vahetada tagasi. Kirjutame ja loeme klastrist, ning dubleerime eraldi versioonis. Miks? JĂ€rgmise nĂ€dala jooksul tahame klastrit jĂ€lgida. Kui peaks selguma, et koormuse tipul on probleeme vĂ”i oleme midagi tĂ€helepanuta jĂ€tnud, on meil alati vĂ”imalus erakorraliseks tagasitulekuks vanale koodile ja vĂ€rsketele andmetele dry-mode'i kaudu.
- On jÀÀnud dry-mode vĂ€lja lĂŒlitada ja eraldi versioon lahti vĂ”tta.
EkspertĂŒlevaade
Alustame lĂŒhidalt klastrisseadme kirjeldusest.
Esiteks on Redis key-value salvestus. VĂ”tmetena kasutatakse suvalisi stringe. VÀÀrtusteks vĂ”ivad olla numbrid, stringid ja terviklikud struktuurid. Viimaseid on palju, kuid ĂŒldise ĂŒlesehituse mĂ”istmiseks ei ole see oluline.
JĂ€rgmine tasand abstraktsiooni vĂ”tmete jĂ€rel on slotid (SLOTS). Iga vĂ”ti kuulub ĂŒhte 16 383 slotist. Iga sloti sees vĂ”ib olla lĂ”pmatult vĂ”tmeid. Seega jagunevad kĂ”ik vĂ”tmed 16 383 kattumatu hulga vahel.

SeejĂ€rel peab klastris olema N master-sĂ”lme. Iga sĂ”lm on nagu eraldi Redis-juhtum, mis teab kĂ”ike teistest sĂ”lmedest klastris. Iga master-sĂ”lm sisaldab teatud arvu sadamaid. Iga sadam kuulub ainult ĂŒhele master-sĂ”lmele. KĂ”iki sadamaid tuleb jaotada sĂ”lmede vahel. Kui mĂ”ni sadam jÀÀb jaotamata, siis pole nende sisu kĂ€tte saadav. Iga master-sĂ”lme on mĂ”istlik kĂ€ivitada eraldi loogilisel vĂ”i fĂŒĂŒsilisel masinal. Samuti tuleb meeles pidada, et iga sĂ”lm töötab ainult ĂŒhel tuumal ja kui soovite kĂ€ivitada mitu Redis-juhtumit ĂŒhel loogilisel masinal, veenduge, et need töötaksid erinevatel tuumadel (me ei ole seda proovinud, kuid teoorias peaks kĂ”ik toimima). Fondamendis tagavad master-sĂ”lmed tavalise ĆĄardimise ning suurem master-sĂ”lmede arv vĂ”imaldab skaleerida kirjutamis- ja lugemispĂ€ringuid.
Kui kĂ”ik vĂ”tmed on jaotatud slotide vahel ja slotid on jaotatud peanoodide vahel, saab igale peanoodile lisada suvalise arvu orjanoodid. Igas sellises âmeistri-orjaâ ĂŒhenduses töötab tavapĂ€rane replikatsioon. Orjad on vajalikud lugemislehtede taotluste skaleerimiseks ja hĂ€daolukordades peanoodi rikke korral.

NĂŒĂŒd rÀÀgime toimingutest, mida oleks hea osata teha.
Me pöördume sĂŒsteemi poole Redis-CLI kaudu. Kuna Redis'il ei ole ĂŒhte sisenemispunkti, saab jĂ€rgmisi toiminguid sooritada ĂŒkskĂ”ik millisel noodil. Igas punktis toon eraldi vĂ€lja vĂ”imaluse sooritada toiming koormuse all.
- Esimene ja kÔige olulisem, mida vajame: toiming cluster nodes. See tagastab klastrite oleku, nÀitab loetelu nootidest, nende rolle, slotide jaotust jne. TÀiendavat teavet saab cluster info ja cluster slots abil.
- Oluline on osata sĂ”lme lisada ja eemaldada. Selleks on operatsioonid cluster meet ja cluster forget. Pange tĂ€hele, et cluster forget tuleb rakendada IGAS sĂ”lmes, nii master-sĂ”lmedes kui ka replikates. Cluster meet tuleb kutsuda vĂ€lja vaid ĂŒhes sĂ”lmes. See erinevus vĂ”ib olla hĂ€iriv, seega on parem sellest enne klasteri kasutusele vĂ”tmist teada saada. SĂ”lme lisamine toimub ohutult ja ei mĂ”juta klasteri tööd (mis on mĂ”istetav). Kui kavatsete eemaldada sĂ”lme klastrist, peate veenduma, et seal ei ole enam slote (vastasel juhul riskite kaotada ligipÀÀsu kĂ”igile vĂ”tmetele sellele sĂ”lmele). Samuti Ă€rge eemaldage masterit, kellel on slĂ€bivad sĂ”lmed, muidu kĂ€ivitub ebavajalik hÀÀletus uue masteri valimiseks. Kui sĂ”lmedes ei ole enam slote, siis see on vĂ€ike probleem, kuid miks peaksime valima lisaks, kui saame kĂ”igepealt eemaldada slĂ€bivad sĂ”lmed.
- Kui peate sundima master'i ja slave'i vahetama, sobib kÀsk cluster failover. Seda kÀivitades tuleb arvestada, et operatsiooni ajal on master kÀttesaamatu. Tavaline vahetus toimub vÀhem kui sekundiga, kuid see ei ole aatomaarne. VÔite eeldada, et osa pÀringutest masterile sellel ajal ebaÔnnestub.
- Enne sĂ”lme eemaldamist klastrist ei tohi seal olla ĂŒhtegi sloti. Parim on nende ĂŒleandmine kĂ€sklusega cluster reshard. Slotid kantakse ĂŒhe meistri juurest teise. Kogu operatsioon vĂ”ib vĂ”tta mitu minutit, sĂ”ltuvalt edastatavate andmete mahust, kuid ĂŒlekanne on ohutu ja ei mĂ”juta klastrite töö. Nii on kĂ”ik andmed vĂ”imalik ĂŒhelt sĂ”lmelt teisele ĂŒle kanda ka koormuse all, kartmata nende kĂ€ttesaadavust. Siiski on mĂ”ned nĂŒansid. Esiteks on andmete edastamine seotud teatud koormusega nii saatja- kui ka vastuvĂ”tva sĂ”lme jaoks. Kui vastuvĂ”ttev sĂ”lm on juba protsessori poolest tugevalt koormatud, siis ei tasu seda veel uute andmete vastuvĂ”tmisega ĂŒle koormata. Teiseks, niipea kui saatva meistri stint jÀÀb tĂŒhjaks, lĂ€hevad kĂ”ik tema slĂ€ivid kohe meesterile, kuhu need slotid on kantud. Probleem on selles, et kĂ”ik need slĂ€ivid tahavad korraga andmeid sĂŒnkroniseerida. Ja teil on vedanud, kui see on osaline, mitte tĂ€ielik sĂŒnkroniseerimine. Arvestage sellega ja kombineerige slotide edastamise ja slave'ide vĂ€ljajĂ€tmise/ĂŒlekanne operatsioone. VĂ”i lootke, et teil on piisavalt paindlikkust.
- Mida teha, kui mÀrkate, et transportimise kÀigus on mÔni slot kaduma lÀinud? Loodan, et selle probleemiga te ei puutu, kuid igaks juhuks on olemas operatsioon cluster fix. See jaotab slotid node'ide vahel juhuslikus jÀrjekorras. Soovitan kontrollida selle toimimist, eemaldades eelnevalt klastrist node, kus slotid on jagatud. Kuna jagamata slotid ei ole nagunii kergesti kÀttesaadavad, on hilja muretseda nende kÀttesaadavuse probleemide pÀrast. Omakorda ei mÔjuta see jagatud slote.
- Veel ĂŒks kasulik operatsioon on monitor. See vĂ”imaldab reaalajas nĂ€ha kogu nimekirja pĂ€ringutest, mis suunatakse node'ile. Veelgi enam, selle abil saab kasutada grep'i, et teada saada, kas vajalik liiklus on kohal.
Samuti on oluline mainida meistrinoodi hĂ€daolukorra vahetamise protseduuri. LĂŒhiĂŒlevaates, see on olemas ja minu arvates töötab see suurepĂ€raselt. Kuid Ă€rge arvestage, et kui tĂ”mbate juhi pistikust vĂ€lja, vahetab Redis kohe ning kliendid ei mĂ€rka katkestust. Minu praktikas toimub vahetamine mitme sekundi jooksul. Selle aja jooksul on osa andmeid kĂ€ttesaamatud: meistri kĂ€ttesaamatuse tuvastamine, nodide hÀÀletamine uue mÀÀramiseks, slave'id vahetuvad ja andmed sĂŒnkroonitakse. Parim viis enda veendumiseks, et sĂŒsteem töötab, on lĂ€bi viia kohalikud harjutused. Seadke klaster ĂŒles oma sĂŒlearvutis, andke sellele minimaalne koormus, simuleerige kokkuvarisemist (nĂ€iteks blokeerides pordid) ja hinnake vahetamise kiirus. Minu arvates, alles pĂ€rast paaripĂ€evast katsetamist on vĂ”imalik kindel olla tehnoloogia toimimises. VĂ”i loodate, et tarkvara, mida kasutab pool internetist, töötab kindlasti.
Konfiguratsioon
Tihti on konfiguratsioon see, millega alustamiseks kĂ”igepealt tegelema peab. Kui kĂ”ik töötab, ei taha enam konfiguratsiooniga ega selle seadistustega tegeleda. On vajalik, et ennast sundida tagasi seadete juurde naasma ja need hoolikalt ĂŒle vaatama. Minu mĂ€lestustes on olnud vĂ€hemalt kaks tĂ”sist viga, mis tulenesid konfiguratsioonile tĂ€helepanu mitte pööramisest. Pöörake erilist tĂ€helepanu jĂ€rgmistele punktidele:
- timeout 0
Aeg, mille jooksul suletakse mitteaktiivsed ĂŒhendused (sekundites). 0 â ei sulgeda.
Meie iga teek ei osanud Ă”igesti ĂŒhendusi sulgeda. Selle seadistuse vĂ€ljalĂŒlitamisega riskime, et jĂ”uame kliendilimiidini. Teisest kĂŒljest, kui selline probleem esineb, siis kaotatud ĂŒhenduste automaatne katkestamine maskeerib selle ja me ei pruugi seda mĂ€rgata. Samuti ei peaks seda seadistust lubama, kui kasutate pĂŒsivaid ĂŒhendusi. - Save x y & appendonly yes
RDB-snapshooti salvestamine.
RDB/AOF probleemidest rÀÀgime allpool ĂŒksikasjalikult. - stop-writes-on-bgsave-error no & slave-serve-stale-data yes
Kui see on sisse lĂŒlitatud, lĂ”petab master RDB-snapshoti rikke korral muudatuste vastuvĂ”tmise. Kui masteriga ĂŒhendus katkevad, vĂ”ib slave siiski vastata pĂ€ringutele (jah). VĂ”i lĂ”petab see vastamise (ei).
Me ei ole rahul olukorraga, kus Redis muutub kÔrvitsaks. - repl-ping-slave-period 5
Selle aja jooksul hakkame muretsema, et master on katkenud ja on aeg failover-protseduur lÀbi viia.
Peame kĂ€sitsi leidma tasakaalu valehĂ€irete ja failoverâi kĂ€ivitamise vahel. Meie praktika kohaselt on see 5 sekundit. - repl-backlog-size 1024mb & epl-backlog-ttl 0
Just nii palju andmeid saame sĂ€ilitada katkise repliika puhvrisse. Kui puhver lĂ”ppeb, siis peab tĂ€ielikult sĂŒnkroonima.
Praktika nĂ€itab, et parem on seada suurem vÀÀrtus. PĂ”hjuseid, miks repliik vĂ”ib maha jÀÀda, on kĂŒllaga. Kui see jÀÀb maha, siis on tĂ”enĂ€oliselt teie masteril juba raskusi, ja tĂ€iendav sĂŒnkroonimine on viimane tilk. - maxclients 10000
Maksimaalne samaaegsete klientide arv.
Meie kogemuse pĂ”hjal on parem seada vÀÀrtus suuremaks. Redis suudab suurepĂ€raselt hakkama saada 10 000 ĂŒhendusega. Lihtsalt veenduge, et sĂŒsteemis on piisavalt sokette. - maxmemory-policy volatile-ttl
Reegel, mille kohaselt kustutatakse vÔtmed, kui saadaval oleva mÀlu piirmÀÀr on tÀidetud.
Siin on oluline mitte ainult reegel, vaid ka arusaam, kuidas see toimub. Redisit vÔib kiita selle eest, et see suudab piiratud mÀlu ulatuses tÔhusalt töötada.
RDB ja AOF probleemid
Kuigi Redis hoiab kogu teabe mÀlus, on olemas ka andmete salvestamise mehhanism. TÀpsemalt: kolm mehhanismi:
- RDB-snapshots â tĂ€ielik koopia kĂ”igist andmetest. Seatakse konfigureerimisega SAVE X Y ja seda loetakse kui "Salvesta kĂ”igi andmete tĂ€iskope igal X sekundil, kui vĂ€hemalt Y vĂ”tme on muudetud".
- Append-only fail â tehingute loend nende tĂ€itmise jĂ€rjekorras. Lisab uusi saabunud tehinguid faili iga X sekundi vĂ”i iga Y tehingu jĂ€rel.
- RDB ja AOF â kahe eelmise kombinatsioon.
KÔigil meetoditel on oma eelised ja puudused, ma ei hakka neid kÔiki loetlema, vaid juhin tÀhelepanu ainult mulle tunduvatele vÀhem ilmsetele hetkedele.
Esiteks, RDB-snapshoti sĂ€ilitamiseks on vajalik kutsuda FORK vĂ€lja. Kui andmeid on palju, vĂ”ib see kogu Redis'e mĂ”ne millisekundi kuni ĂŒhe sekundi jooksul riputada. Lisaks vajab sĂŒsteem sellise snapshoti jaoks mĂ€lu eraldamist, mis toob endaga kaasa vajaduse hoida loogilisel masinal kahekordne mĂ€lureserv: kui Redis'ele on eraldatud 8 GB, siis peaks virtuaalmasinal olema saadaval 16 GB.
Teiseks, osalise sĂŒnkroniseerimisega on probleeme. AOF-reĆŸiimis, kui slave'i uuesti ĂŒhendatakse, vĂ”ib osalise sĂŒnkroniseerimise asemel toimuda tĂ€ielik. Miks see nii juhtub, ei suutnud ma aru saada. Kuid sellest tasub siiski meeles pidada.
Need to consider whether we really need this data on disk, especially since it is already duplicated by the slaves. Data can only be lost if all slaves fail, which is a problem of 'fire in the data center' level. As a compromise, we could suggest saving data only on the slaves, but in this case, we need to ensure that these slaves never become masters during a disaster recovery (there's a priority setting for slaves in their configuration). We evaluate the necessity of saving data on disk on a case-by-case basis, and most often conclude 'no.'
KokkuvÔte
In conclusion, I hope I was able to provide a general understanding of how redis-cluster works for those who have never heard of it, and also pointed out some less obvious aspects for those who have been using it for a while.
Thank you for your time, and as usual, comments on the topic are welcome.
Allikas: habr.com
