{"id":91846,"date":"2020-08-19T19:41:57","date_gmt":"2020-08-19T17:41:57","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/o-pereezde-s-redis-na-redis-cluster"},"modified":"2020-08-19T19:41:57","modified_gmt":"2020-08-19T17:41:57","slug":"o-pereezde-s-redis-na-redis-cluster","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/o-pereezde-s-redis-na-redis-cluster","title":{"rendered":"\u00dcleminek Rediselt Redis-clusterile","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\u00dcleminek Rediselt Redis-clusterile\" src=\"\/wp-content\/uploads\/2020\/08\/ea8bc47f73ef3b06ccfdf94d323592bf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tuleviku toote puhul, mis on arenenud rohkem kui k\u00fcmme aastat, ei ole sugugi \u00fcllatav kohata vananenud tehnoloogiaid. Kuid mis juhtub, kui kuue kuu p\u00e4rast peate taluma koormust, mis on k\u00fcmme korda suurem, ja t\u00f5usud kulud ulatuvad sadu kordi? Sellisel juhul on teil vaja t\u00f5eliselt head Highload inseneri. Kuid kuna sellist spetsialisti ei olnud, usaldati probleem minu lahendada. Artikli esimeses osas r\u00e4\u00e4gin, kuidas me viisime \u00fcle Redis'elt Redis-klastrisse, ja teises osas annan n\u00f5uandeid, kuidas alustada klastriga t\u00f6\u00f6tamist ja millele t\u00e4helepanu p\u00f6\u00f6rata operatsioonide k\u00e4igus.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"vybor-tehnologii\">Tehnoloogia valik<\/h1>\n<p><\/p>\n<p>Kas eraldiseisev Redis <em>(standalone redis) konfiguratsioonis 1 master ja N sl\u00e4evad on nii halb? Miks ma kutsun seda vananenud tehnoloogiaks?<\/em> Ei, Redis ei ole nii halb... Siiski, on m\u00f5ned puudused, mida ei saa ignoreerida.<\/p>\n<p><\/p>\n<blockquote><p>Esiteks ei toeta Redis meistrite taastumise mehhanisme p\u00e4rast rikkeid. Selle probleemi lahendamiseks kasutasime konfiguratsiooni, kus automaatselt suunati VIP-d uuele meistrile, muutes \u00fche sl\u00e4eva rolli ja l\u00fclitades \u00fclej\u00e4\u00e4nud \u00fcle. See mehhanism t\u00f6\u00f6tas, kuid seda ei saanud usaldusv\u00e4\u00e4rseks lahenduseks nimetada. Esiteks, toimusid valeh\u00e4ired ja teiseks, see oli \u00fche kasutuse jaoks m\u00f5eldud ning peale rakendamist olid vajalikud k\u00e4sitsi toimingud.<\/p><\/blockquote>\n<p><\/p>\n<ul>\n<li>\n<p>Teiseks, \u00fche meistri olemasolu t\u00f5i kaasa shardimise probleeme. Pidi looma mitu s\u00f5ltumatut klastri \"1 meister ja N sl\u00e4evad\", seej\u00e4rel k\u00e4sitsi jagama andmebaase nende masinate vahel ja lootes, et j\u00e4rgmisel p\u00e4eval ei paisu \u00fckski andmebaas nii palju, et see tuleb viia eraldi instantsile.<\/p>\n<p>\n<\/li>\n<li>\n<p>Kalleim ja rikkalik lahendus on Redis-Enterprise. See on kastilahendus koos t\u00e4ieliku tehnilise toega. Kuigi see tundub tehniliselt ideaalsena, ei sobinud see meile ideoloogilistel p\u00f5hjustel.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Millised on variandid?<\/p>\n<p><\/p>\n<ul>\n<li>Redis-cluster. Tootes on meistri automaatne \u00fclehaarde ja shardimise tugi. Liides ei erine peaaegu \u00fcldse tavalise versiooniga. Tundub t\u00f5otav, r\u00e4\u00e4gime varjatud probleemidest hiljem. <\/li>\n<li>Redis-kluster. Kasti tohib olla toetust kapitaalide vahetamiseks ja jagamiseks. Liides ei erine peaaegu \u00fcldse tavalise versioonist. N\u00e4eb paljut\u00f5otav v\u00e4lja, arutame muresid hiljem.<\/li>\n<li>Tarantool, Memcache, Aerospike ja teised. K\u00f5ik need t\u00f6\u00f6riistad teevad umbes sama, kuid iga\u00fchel on oma puudused. Otsustasime, et ei pane k\u00f5iki mune \u00fchte korvi. Memcache ja Tarantool kasutame teiste \u00fclesannete jaoks ning edasiviimiseks v\u00f5in \u00f6elda, et meil on olnud rohkem probleeme nendega.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"specifika-ispolzovaniya\">Kasutuse erip\u00e4ra<\/h1>\n<p><\/p>\n<p>Vaadakem, milliseid \u00fclesandeid oleme ajalooliselt Redis\u2019iga lahendanud ja millist funktsionaalsust oleme kasutanud:<\/p>\n<p><\/p>\n<ul>\n<li>Vahem\u00e4lu enne p\u00e4ringuid kaugteenustele nagu 2GIS | Golang<br \/>\n<blockquote><p>GET SET MGET MSET \"VALI DBA\"\n<\/p><\/blockquote>\n<\/li>\n<li>Vahem\u00e4lu enne MYSQL | PHP<br \/>\n<blockquote><p>GET SET MGET MSET SCAN \"V\u00d5TI MALLI J\u00c4RGI\" \"VALI DBA\"\n<\/p><\/blockquote>\n<\/li>\n<li>Peamine andmem\u00e4lu sessioonide ja autojuhtide koordinaatide teenuse jaoks | Golang<br \/>\n<blockquote><p>GET SET MGET MSET \"VALI DBA\" \"LISA GEO V\u00d5TI\" \"HANGI GEO V\u00d5TI\" SCAN\n<\/p><\/blockquote>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Nagu n\u00e4ete, pole siin mingit k\u00f5rgemat matemaatikat. Mis siis ikkagi on keeruline? Vaatame iga meetodit eraldi.<\/p>\n<p><\/p>\n<p>Meetod<br \/>\nKirjeldus<br \/>\nRedis-klusteri omadused<br \/>\nLahendus<\/p>\n<p>GET SET<br \/>\nKirjutamine\/lugemine v\u00f5tme<\/p>\n<p>MGET MSET<br \/>\nKirjutamine\/lugemine mitmeid v\u00f5tmeid<br \/>\nV\u00f5tmed asuvad erinevates nodides. Valmis raamatukogud suudavad teha Multi-operatsioone vaid \u00fche nodi piires.<br \/>\nAsendage MGET N GET operatsioonide pipelinen.<\/p>\n<p>SELECT DB<br \/>\nVali andmebaas, millega t\u00f6\u00f6tame<br \/>\nEi toeta mitmeid andmebaase.<br \/>\nKoguda k\u00f5ik \u00fchte andmebaasi. Lisada v\u00f5tmete ette eesliite.<\/p>\n<p>SCAN<br \/>\nK\u00e4ia \u00fcle k\u00f5ik v\u00f5tmed andmebaasis.<br \/>\nKuna meil on ainult \u00fcks andmebaas, on kogu klusteris v\u00f5tmete \u00fcle k\u00e4imine liiga kulukas.<br \/>\nS\u00e4ilitada invariant \u00fche v\u00f5tme piires ja teha HSCAN selle v\u00f5tme kohta. V\u00f5i loobuda t\u00e4ielikult.<\/p>\n<p>GEO<br \/>\nGeov\u00f5tme operatsioonid<br \/>\nGeov\u00f5ti ei jagune.<\/p>\n<p>KEY BY PATTERN<br \/>\nOtsige v\u00f5tmeid mustri alusel.<br \/>\nKuna meil on ainult \u00fcks andmebaas, otsime klusteri k\u00f5igi v\u00f5tmete seast. Liiga kulukas.<br \/>\nLoobuge v\u00f5i s\u00e4ilitage invariant, nagu SCAN puhul.<\/p>\n<p><\/p>\n<h1 id=\"redis-vs-redis-cluster\">Redis vs Redis-kluster<\/h1>\n<p><\/p>\n<p>Mida kaotame ja mida saame klusterisse \u00fcleminekul?<\/p>\n<p><\/p>\n<ul>\n<li>Puudused: kaotame mitme andmebaasi funktsionaalsuse. \n<ul>\n<li>Kui soovime hoida \u00fches klusteris loogiliselt mitteseotud andmeid, peame looma eesliiteid. <\/li>\n<li>Kaotame k\u00f5ik 'andmebaasi' operatsioonid, nagu SCAN, DBSIZE, CLEAR DB jms.<\/li>\n<li>Multi-operatsioonid on saanud oluliselt keerulisemaks, kuna v\u00f5ib osutuda vajalikuks p\u00f6\u00f6rduda mitmete nodide poole.<\/li>\n<\/ul>\n<\/li>\n<li>Eelised: \n<ul>\n<li>Veadeta mastreid avariiv\u00f5imekusena.<\/li>\n<li>Redis'i poolelt jagamine.<\/li>\n<li>Andmete \u00fcleviimine nodide vahel atomaarse ja katkestusteta.<\/li>\n<li>V\u00f5imsuste ja koormuste lisamine ja \u00fcmberjaotamine katkestusteta.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><em>Ma arvan, et kui teil ei ole vaja tagada k\u00f5rget t\u00f6\u00f6kindlust, siis ei tasu klastrisse kolida, kuna see v\u00f5ib osutuda keerukaks \u00fclesandeks. Kuid kui valida eraldi versiooni ja klastriversiooni vahel, siis tasub valida klaster, kuna see ei ole halvem ning lisaks vabastab teid osaliselt peavaludest.<\/em><\/p>\n<p><\/p>\n<h1 id=\"podgotovka-k-pereezdu\">Valmistumine kolimiseks<\/h1>\n<p><\/p>\n<p>Alustame kolimise n\u00f5uetest:<\/p>\n<p><\/p>\n<ul>\n<li>See peab olema sujuv. Teenuse t\u00e4ielik peatamine 5 minutiks ei sobi meile.<\/li>\n<li>See peab olema maksimaalselt ohutu ja j\u00e4rkj\u00e4rguline. Soovime teatud kontrolli olukorra \u00fcle. Me ei soovi k\u00f5ike korraga kokku kuhjata ja palvetada, et tagasip\u00f6\u00f6rdumise nupp t\u00f6\u00f6taks.<\/li>\n<li>Minimaalsed andmekadud kolimise ajal. Me m\u00f5istame, et atomaarne kolimine on v\u00e4ga keeruline, seet\u00f5ttu lubame m\u00f5ningat des\u00fcnkroniseerimist tavap\u00e4raste ja klastriliste Redis andmete vahel.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"obsluzhivanie-klastera\">Klastri hooldus<\/h1>\n<p><\/p>\n<p>P\u00e4rast kolimist tuleks m\u00f5elda, kas saame klastrit toetada:<\/p>\n<p><\/p>\n<ul>\n<li>Graafikud. Kasutame Prometheust ja Grafanat protsessorite koormuse, kasutatava m\u00e4lu, klientide arvu, GET, SET, AUTH jms operatsioonide graafikute loomiseks.<\/li>\n<li>Ekspertiseerimine. Kujutage ette, et homsest vastutate te tohutu klastrite eest. Kui see katki l\u00e4heb, ei saa keegi peale teie selle parandada. Kui see hakkab aeglaselt t\u00f6\u00f6tama \u2013 siis tulevad k\u00f5ik teie poole. Kui tuleb lisaressursse lisada v\u00f5i koormust \u00fcmber jaotada \u2013 j\u00e4lle teie juurde. Et mitte 25-aastaseks halliks minna, tuleks selliseid olukordi ette n\u00e4ha ja eelnevalt kontrollida, kuidas tehnoloogia teatud tegevustes k\u00e4itub. R\u00e4\u00e4gime sellest l\u00e4hemalt 'Ekspertiseerimise' osas.<\/li>\n<li>Monitooringud ja teavitamine. Kui klaster katki l\u00e4heb, tahaks sellest esimesena teada. Siin oleme piirdunud teavitamisega, et k\u00f5ik s\u00f5lmed naasevad sama teabe juurde klastrisse. (Jah, see juhtub ka teistmoodi). Teisi probleeme on kiiremini n\u00e4ha Redis klientide teenuste teavituste kaudu.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"pereezd\">Kolimine<\/h1>\n<p><\/p>\n<p>Kuidas me kolime:<\/p>\n<p><\/p>\n<ul>\n<li>Esiteks peate ette valmistama teegi t\u00f6\u00f6tamiseks klastri jaoks. G\u043e versiooni aluseks v\u00f5tsime go-redis'i ja tegime m\u00f5ned muudatused. Rakendasime Multi-meetodid l\u00e4bi pipeline'ide ning parandasime veidi p\u00e4ringute kordamise reegleid. PHP versiooniga tekkis rohkem probleeme, kuid l\u00f5puks otsustasime php-redis'i kasuks. Hiljuti lisasid nad klastri toe ja meie arvates n\u00e4eb see hea v\u00e4lja.<\/li>\n<li>Seej\u00e4rel tuleb klastri v\u00e4lja arendada. See toimub s\u00f5na otseses m\u00f5ttes kahe k\u00e4suga, tuginedes konfiguratsioonifailile. R\u00e4\u00e4gime seadetest allpool l\u00e4hemalt.<\/li>\n<li>Ahnemalt \u00fcleminekuks kasutame dry-mode'i. Kuna meil on kaks versiooni teegist, millel on sama liides (\u00fcks tavalise versiooni jaoks, teine klastri jaoks), pole midagi keerulist teha paketti, mis t\u00f6\u00f6taks \u00fches versioonis ja samal ajal dubleeriks k\u00f5ik p\u00e4ringud klastrisse, v\u00f5rreldes vastuseid ja kirjutades lahknevused logidesse (meie puhul NewRelicisse). Nii, isegi kui klastriversioon laguneb, ei m\u00f5juta see meie tootmist. <\/li>\n<li>Klastri dry-re\u017eiimis v\u00e4lja viies saame rahulikult vaadata vastuste lahknevuse graafikut. Kui veade osakaal liigub aeglaselt, aga kindlalt mingisse v\u00e4ikesele konstandile, siis on k\u00f5ik h\u00e4sti. Miks lahknevusi endiselt esineb? Sest kirjutamine eraldi versioonis toimub veidi varem kui klastris ning mikroviivitus t\u00f5ttu v\u00f5ivad andmed lahkneda. J\u00e4\u00e4nud on vaid vaadata lahknevuste logisid ja kui k\u00f5ik seletamatud need on kirjutamise mitteaatomsuse t\u00f5ttu, siis saame edasi liikuda.<\/li>\n<li>N\u00fc\u00fcd saab dry-mode'i tagasi keerata. Kirjutame ja loeme klastrist, dubleerides eraldi versiooni. Miks? J\u00e4rgmise n\u00e4dala jooksul soovime klastrit j\u00e4lgida. Kui ilmneb, et laadimispikkuse k\u00e4igus on probleeme v\u00f5i oleme midagi arvesse v\u00f5tnud, on meil alati v\u00f5imalus tagasip\u00f6\u00f6rduda vana koodi ja t\u00e4nu dry-mode'ile, kehtivate andmete juurde.<\/li>\n<li>J\u00e4\u00e4nud on dry-mode'i v\u00e4ljal\u00fclitamine ja eraldi versiooni eemaldamine. <\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"ekspertiza\">Ekspertarvamus<\/h1>\n<p><\/p>\n<p>Esiteks, l\u00fchidalt klastri seadistusest.<\/p>\n<p><\/p>\n<p>Esiteks, Redis on key-value andmebaas. V\u00f5tmena kasutatakse k\u00f5iki sorte stringe. V\u00e4\u00e4rtustena v\u00f5ivad olla numbrid, stringid ja t\u00e4isarhitektuurid. Viimaste hulk on suur, kuid \u00fcldise arusaama jaoks pole see oluline.<br \/>\nJ\u00e4rgnev abstraktsiooni tase on slotid (SLOTS). Iga v\u00f5tme kuulub \u00fchte 16 383 slotti. Igas slotis v\u00f5ib olla l\u00f5pmatu arv v\u00f5tmeid. Nii et k\u00f5ik v\u00f5tmed jagunevad 16 383 mitte\u00fchtesse kogusse.<br \/>\n<img decoding=\"async\" alt=\"\u00dcleminek Rediselt Redis-clusterile\" src=\"\/wp-content\/uploads\/2020\/08\/a5e4be23381b42287f693e01d5d59a99.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Klastris peab olema N peanood. Iga noot saab vaadelda eraldi Redis'i instantsina, mis teab k\u00f5igest teistest nootidest klassis. Igal peanoodil on teatud arv slote. Iga slot kuulub ainult \u00fchele peanoodile. K\u00f5ik slotid tuleb jaotada nootide vahel. Kui mingid slotid ei ole jaotatud, ei ole neis hoitavad v\u00f5tmed k\u00e4ttesaadavad. Iga peanoodi on m\u00f5istlik k\u00e4ivitada eraldi loogilisel v\u00f5i f\u00fc\u00fcsilisel masinal. Samuti tasub meeles pidada, et iga noot t\u00f6\u00f6tab ainult \u00fchel tuumal ja kui soovite k\u00e4ivitada mitut Redis'i instantsi \u00fchel loogilisel masinal, siis veenduge, et nad t\u00f6\u00f6taksid erinevatel tuumadel (me ei ole seda proovinud, kuid teoorias k\u00f5ik peaks t\u00f6\u00f6tama). P\u00f5him\u00f5tteliselt tagavad peanoodid tavap\u00e4rase sharding'i ja suurem arvu peanoodide korral saab suurendada kirjutamise ja lugemise p\u00e4ringute mahtu.<\/p>\n<p><\/p>\n<p>P\u00e4rast seda, kui k\u00f5ik v\u00f5tmed on slotides ja slotid on jaotatud peanoodide vahel, saab igale peanoodile lisada suvalise arvu slave-noode. Igas sellises \"master-slave\" paaris t\u00f6\u00f6tab tavaline replikatsioon. Slaved on vajalikud lugemisep\u00e4ringute suurendamiseks ja rikke korral peanoodi vahetamiseks.<br \/>\n<img decoding=\"async\" alt=\"\u00dcleminek Rediselt Redis-clusterile\" src=\"\/wp-content\/uploads\/2020\/08\/90feb7ef9dacb858d5f21edc214df14d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00fc\u00fcd r\u00e4\u00e4gime toimingutest, mida oleks hea osata teha.<\/p>\n<p><\/p>\n<p>Me p\u00f6\u00f6rdume s\u00fcsteemi Redis-CLI kaudu. Kuna Redis'il ei ole \u00fchtset sissep\u00e4\u00e4supunkti, saab j\u00e4rgmisi toiminguid teostada igas noodis. Igal punktis r\u00f5hutan eraldi v\u00f5imalust teostada operatsiooni koormuse all.<\/p>\n<p><\/p>\n<ul>\n<li>Esimene ja k\u00f5ige olulisem, mida me vajame: operatsioon cluster nodes. See tagastab klastri oleku, n\u00e4itab nootide loetelu, nende rolle, slotide jaotust jne. T\u00e4iendavat teavet saab saada cluster info ja cluster slots abil.<\/li>\n<li>Hea oleks hea osata lisada ja eemaldada s\u00f5lmi. Selleks on olemas toimingud cluster meet ja cluster forget. Pange t\u00e4hele, et cluster forget tuleb rakendada K\u00d5IKIDELE s\u00f5lmede, nii meistritele kui ka replikaatele. Cluster meet tuleks aga kutsuda v\u00e4lja vaid \u00fchel s\u00f5lmel. Selline erinevus v\u00f5ib olla segadusttekitav, seega on parem sellest teada, enne kui oma klastrit tootmisse k\u00e4ivitate. S\u00f5lme lisamine toimub turvaliselt ning ei m\u00f5juta klastrite t\u00f6\u00f6d (mis on m\u00f5istetav). Kui aga kavatsete s\u00f5lme klastrist eemaldada, tuleb veenduda, et sellel pole enam slotte (vastasel juhul riskite juurdep\u00e4\u00e4su kaotamisega k\u00f5igile selle s\u00f5lme v\u00f5tmetele). Samuti \u00e4rge eemaldage meistrit, kellel on slave-d, vastasel juhul toimub uue meistri valimise jaoks tarbetu h\u00e4\u00e4letamine. Kui s\u00f5lmedel pole enam slotte, on see v\u00e4ike probleem, kuid miks peaksime piirduma valikute v\u00e4hendamisega, kui saaksime esmalt slave-d eemaldada.<\/li>\n<li>Kui on vaja sundida meistrit ja slave-d vahetama, sobib k\u00e4sk cluster failover. Selle k\u00e4ivitamisel lahingus tuleb m\u00f5ista, et operatsiooni k\u00e4igus ei ole meister saadaval. Tavaliselt toimub vahetus v\u00e4hem kui sekundiga, kuid mitte aatomiliselt. V\u00f5ite arvestada, et osa p\u00e4ringutest meistrile l\u00f5petatakse sel ajal veaga.<\/li>\n<li>Enne s\u00f5lme klastrist eemaldamist ei tohi nendel j\u00e4\u00e4da slotte. Parim on neid \u00fcmber jaotada k\u00e4su cluster reshard abil. Slotte kantakse \u00fchelt meistrilt teisele. Kogu operatsioon v\u00f5ib v\u00f5tta mitu minutit, s\u00f5ltuvalt edastatavate andmete mahust, kuid andmete edastamine on ohutu ega m\u00f5juta klastrite t\u00f6\u00f6d. Seega on k\u00f5ik andmed v\u00f5imalik \u00fcle kanda \u00fchest s\u00f5lmest teise ka koormuse all, ilma et tuleks muretseda nende k\u00e4ttesaadavuse p\u00e4rast. Siiski on siin m\u00f5ned nipid. Esiteks, andmete edastamine toob kaasa teatava koormuse nii vastuv\u00f5tvale kui ka saatvale s\u00f5lmele. Kui vastuv\u00f5ttev s\u00f5lm on juba protsessorilt tugevalt koormatud, siis ei tohiks seda koormata ka uute andmete vastuv\u00f5tmisega. Teiseks, niipea kui saatva meistri juures ei j\u00e4\u00e4 slotte, l\u00e4hevad k\u00f5ik tema orjad kohe meistrile, kuhu need slotid on kantud. Ja probleem on see, et k\u00f5ik need orjad tahavad korraga andmeid s\u00fcnkroniseerida. Teil on veel \u00f5nne, kui see on osaline, mitte t\u00e4ielik s\u00fcnkroniseerimine. Pea seda meeles ja kombineeri slotite \u00fclekandmise ja orjade v\u00e4ljal\u00fclitamise\/\u00fclekandmise operatsioone. V\u00f5i looda, et teil on piisavalt vastupidavust.<\/li>\n<li>Mida teha, kui saate andmete \u00fclekande ajal teada, et olete kuskile slotid kaotanud? Loodan, et see probleem teid ei puuduta, kuid kui siiski, on olemas operatsioon cluster fix. See jagab slotid s\u00f5lmede vahel enam-v\u00e4hem juhuslikult. Soovitan kontrollida selle t\u00f6\u00f6 toimivust, eemaldades eelnevalt klastrist s\u00f5lme, kus slotid on jaotatud. Kuna andmed jaotamata slotidel ei ole nagunii k\u00e4tte saadavad, on liiga hilja muretseda nende slotide k\u00e4ttesaadavuse probleemide p\u00e4rast. Omakorda ei m\u00f5juta operatsioon jagatud slotte.<\/li>\n<li>Teine kasulik operatsioon on monitor. See v\u00f5imaldab reaalajas n\u00e4ha kogu p\u00e4ringute nimekirja, mis l\u00e4hevad s\u00f5lmele. Lisaks on v\u00f5imalik selle p\u00f5hjal teha grep ja v\u00e4lja selgitada, kas vajalik liiklus on olemas.<\/li>\n<\/ul>\n<p><\/p>\n<p>Samuti tasub mainida meistrin\u00f5ude varuakna vahetuse protseduuri. L\u00fchidalt \u00f6eldes, see on olemas ja minu arvates t\u00f6\u00f6tab see suurep\u00e4raselt. Kuid \u00e4rge arvake, et kui t\u00f5mbate toitekaabli v\u00e4lja masina meistrin\u00f5udest, siis Redis vahetub koheselt ja kliendid ei tunne katkestust. Minu kogemuse j\u00e4rgi toimub vahetus m\u00f5ne sekundi jooksul. Selle aja jooksul on osa andmeid kergesti k\u00e4ttesaamatud: tuvastatakse meistrin\u00f5ude katkemine, s\u00f5lmed h\u00e4\u00e4letavad uue eest, orjad vahetavad ja andmed s\u00fcnkroonitakse. Parim viis veenduda, et skeem t\u00f6\u00f6tab, on l\u00e4bi viia kohalikud harjutused. Kinnita klaster oma s\u00fclearvutisse, anna minimaalne koormus, simuleeri kokkuvarisemist (n\u00e4iteks blokeerides pordid), hinda vahetuse kiirus. Minu arvates ainult m\u00e4ngides sellega p\u00e4ev v\u00f5i kaks, saab olla kindel tehnoloogia t\u00f6\u00f6s. V\u00f5i loota, et tarkvara, mida kasutab pool internetist, kindlasti t\u00f6\u00f6tab.<\/p>\n<p><\/p>\n<h1 id=\"konfiguraciya\">Konfiguratsioon<\/h1>\n<p><\/p>\n<p>Sageli on konfiguratsioon esimene asi, mis on vajalik t\u00f6\u00f6 alustamiseks t\u00f6\u00f6riistaga. Ja kui k\u00f5ik t\u00f6\u00f6tab, ei taha konfiguratsiooniga tegeleda. T\u00f5en\u00e4oliselt on vaja teatud pingutust, et sundida end tagasi seadete juurde ja hoolikalt neid l\u00e4bi vaadata. Minu m\u00e4letamist m\u00f6\u00f6da on meil olnud v\u00e4hemalt kaks t\u00f5sist eba\u00f5nnestumist konfiguratsioonist t\u00e4helepanematuse t\u00f5ttu. P\u00f6\u00f6rake erilist t\u00e4helepanu j\u00e4rgmistele punktidele:<\/p>\n<p><\/p>\n<ul>\n<li>timeout 0<br \/>\n<em>Aeg, mille p\u00e4rast suletakse mitteaktiivsed \u00fchendused (sekundites). 0 \u2014 ei sulgeda.<\/em><br \/>\nMeie raamatukogud ei osanud iga\u00fcht \u00f5igesti sulgeda. Selle seadistuse v\u00e4ljal\u00fclitamine paneb meid silmitsi kliendide arvu piirangu probleemiga. Teisest k\u00fcljest, kui selline probleem olemas on, siis automaatne kadunud \u00fchenduste katkestamine varjab selle, ja me v\u00f5ime seda m\u00e4rkamata j\u00e4\u00e4da. Samuti ei tohi seda seadistust sissel\u00fclitamisega kasutada j\u00e4rjepidevate \u00fchenduste puhul.<\/li>\n<li>Save x y &amp; appendonly yes<br \/>\n<em>RDB-snapshooti salvestamine.<\/em><br \/>\nRDB\/AOF probleemid, mida arutame allpool.<\/li>\n<li>stop-writes-on-bgsave-error no &amp; slave-serve-stale-data yes<br \/>\n<em>Kui see on lubatud, siis RDB-snapshooti rikke korral l\u00f5petab meister muudatuse p\u00e4ringute vastuv\u00f5tmise. Kui \u00fchendus meistriga katke, siis orjad v\u00f5ivad j\u00e4tkata p\u00e4ringutele vastamist (jah). V\u00f5i l\u00f5petab (ei).<\/em><br \/>\nMe ei ole rahul olukorraga, kus Redis muutub k\u00f5rvitsaks.<\/li>\n<li>repl-ping-slave-period 5<br \/>\n<em>Selle ajavahemiku jooksul hakkame muretsema selle \u00fcle, et meistriga on midagi valesti ja on aeg failover'i protseduur l\u00e4bi viia.<\/em><br \/>\nPeame k\u00e4sitsi leidma tasakaalu valeh\u00e4irete ja failover'i k\u00e4ivitamise vahel. Meie praktika kohaselt on see 5 sekundit.<\/li>\n<li>repl-backlog-size 1024mb &amp; epl-backlog-ttl 0<br \/>\n<em>Just nii palju andmeid saame me salvestada katkenud koopiate puhvris. Kui puhvripaik l\u00f5petab t\u00f6\u00f6tamise, tuleb t\u00e4ielikult s\u00fcnkroonida.<\/em><br \/>\nPraktika n\u00e4itab, et on parem seada suurem v\u00e4\u00e4rtus. P\u00f5hjusi, miks koopia v\u00f5ib maha j\u00e4\u00e4da, on palju. Kui see j\u00e4\u00e4b maha, siis t\u00f5en\u00e4oliselt suudab teie meister juba raskustega toime tulla ja t\u00e4ielik s\u00fcnkroonimine muutub viimaseks taastumisv\u00f5imaluseks.<\/li>\n<li>maxclients 10000<br \/>\n<em>Maksimaalne samal ajal \u00fchendatud klientide arv.<\/em><br \/>\nMeie kogemuse kohaselt on parem seada k\u00f5rgem v\u00e4\u00e4rtus. Redis suudab suurep\u00e4raselt hallata 10 tuhat \u00fchendust. Ainult veenduge, et s\u00fcsteemis oleks piisavalt sokette. <\/li>\n<li>maxmemory-policy volatile-ttl<br \/>\n<em>Reegel, mille j\u00e4rgi eemaldatakse v\u00f5tmed, kui saavutatakse vaba m\u00e4lu piir.<\/em><br \/>\nSiin on t\u00e4htis mitte niiv\u00f5rd reegel, vaid arusaam, kuidas see protsess toimub. Redisit saab kiita selle eest, et ta suudab h\u00e4sti t\u00f6\u00f6tada m\u00e4lu piiri saavutamisel. <\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"problemy-rdb-i-aof\">RDB ja AOF probleemid<\/h1>\n<p><\/p>\n<p>Kuigi Redis ise salvestab kogu teabe m\u00e4lus, on ka mehhanism andmete salvestamiseks ketta peale. T\u00e4psemalt \u00f6eldes on kolm mehhanismi:<\/p>\n<p><\/p>\n<ul>\n<li>RDB-snapshoot \u2014 k\u00f5ikide andmete t\u00e4ielik koopiatega. Seadetakse konfigureerimise SAVE X Y abil ja loetakse nagu \"Salvesta k\u00f5ikide andmete t\u00e4ielik koopi iga X sekundi j\u00e4rel, kui on v\u00e4hemalt Y v\u00f5tme muudatus.\"<\/li>\n<li>Append-only file \u2014 tehingute loend nende t\u00e4itmise j\u00e4rjekorras. Uued saabunud tehingud kirjutatakse faili iga X sekundi v\u00f5i Y tehingu j\u00e4rel.<\/li>\n<li>RDB ja AOF \u2014 kahe eelmise kombinatsioon.<\/li>\n<\/ul>\n<p><\/p>\n<p>Katalooge k\u00f5igil meetoditel on oma eelised ja puudused, ma ei hakka neid k\u00f5iki loetlema, vaid toome v\u00e4lja m\u00f5ned minu arvates mitte ilmseid punkte.<\/p>\n<p><\/p>\n<p>Esiteks, RDB-snep\u0161oti salvestamiseks tuleb kutsuda FORK. Kui andmeid on palju, v\u00f5ib see peatada kogu Redis'i ajaks paarist millisekundist kuni sekundini. Lisaks peab s\u00fcsteem eraldama m\u00e4lu sellise koopia jaoks, mis t\u00e4hendab, et loogilisel masinal peab olema topeltm\u00e4lu varu: kui Redis'ile on eraldatud 8 GB, siis virtuaalmasinal peab olema saada 16.<\/p>\n<p><\/p>\n<p>Teiseks, on osalise s\u00fcnkroonimisega probleeme. AOF-re\u017eiimis v\u00f5ib slave'i uuesti \u00fchendamisel toimuda t\u00e4ielik s\u00fcnkroonimine, mitte osaline. Miks see nii on, ei suutnud ma aru saada. Kuid sellest on hea meeles pidada.<\/p>\n<p><\/p>\n<p>Need kaks punkti panevad juba m\u00f5tlema, kas on t\u00f5esti vajalik, et need andmed oleksid kettal, kui slave'id juba k\u00f5ike dubleerivad. Andmed v\u00f5ib kaotada ainult juhul, kui k\u00f5ik slave'id eba\u00f5nnestuvad, ja see on probleem, mis sarnaneb 'tulekahjule andmekeskuses'. Kompromissina v\u00f5ib pakkuda, et andmeid hoitakse ainult slave'ides, kuid sel juhul tuleb veenduda, et need slave'id ei muutuks kunagi h\u00e4daolukorra taastamisel masteriks (selle jaoks on olemas slaavi prioriteedi seadistus nende konfiguratsioonis). Iga konkreetse juhtumi puhul m\u00f5tleme, kas on vajalik andmed kettale salvestada, ja enamasti vastame \"ei\".<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Kokkuv\u00f5te<\/h1>\n<p><\/p>\n<p>Kokkuv\u00f5tteks loodan, et suutsin anda \u00fcldise teadlikkuse redis-cluster-i toimimisest neile, kes ei ole sellest kunagi kuulnud, ning p\u00f6\u00f6rata t\u00e4helepanu mitmetele mitte-ilmselgedele aspektidele neile, kes on juba pikka aega seda kasutanud.<br \/>\nAit\u00e4h, et leidsite aega ja nagu tavaliselt, on teemakohased kommentaarid teretulnud.<\/p>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/citymobil\/blog\/515620\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0445\u043e\u0434\u044f \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0435\u0441\u044f\u0442\u043a\u0430 \u043b\u0435\u0442, \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u0432 \u043d\u0435\u043c \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438. \u041d\u043e \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0432 10 \u0440\u0430\u0437 \u0432\u044b\u0448\u0435, \u0430 \u0446\u0435\u043d\u0430 \u043f\u0430\u0434\u0435\u043d\u0438\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f \u0432 \u0441\u043e\u0442\u043d\u0438 \u0440\u0430\u0437? \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043a\u0440\u0443\u0442\u043e\u0439 Highload Engineer. \u041d\u043e \u0437\u0430 \u043d\u0435\u0438\u043c\u0435\u043d\u0438\u0435\u043c \u0433\u043e\u0440\u043d\u0438\u0447\u043d\u043e\u0439 \u0442\u0430\u043a\u043e\u0432\u043e\u0433\u043e, \u0440\u0435\u0448\u0430\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0434\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u043c\u043d\u0435. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91847,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91846","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0445\u043e\u0434\u044f \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/o-pereezde-s-redis-na-redis-cluster\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435 \u0441 Redis \u043d\u0430 Redis-cluster | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0445\u043e\u0434\u044f \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/o-pereezde-s-redis-na-redis-cluster\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-19T17:41:57+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-19T17:41:57+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47\u00dcleminek Redisilt Redis-clusterile | ProHoster","description":"Toodud tootele, mis areneb pidevalt edasi.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/o-pereezde-s-redis-na-redis-cluster","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435 \u0441 Redis \u043d\u0430 Redis-cluster | ProHoster","og:description":"\u041f\u0440\u0438\u0445\u043e\u0434\u044f \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/o-pereezde-s-redis-na-redis-cluster","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-19T17:41:57+00:00","article:modified_time":"2020-08-19T17:41:57+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91846","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:19:41","updated":"2022-10-03 14:54:15","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/91846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=91846"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/91846\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/91847"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=91846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=91846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=91846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}