{"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\/cs\/blog\/administrirovanie\/o-pereezde-s-redis-na-redis-cluster","title":{"rendered":"O p\u0159echodu z Redis na Redis-cluster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"O p\u0159echodu z Redis na Redis-cluster\" src=\"\/wp-content\/uploads\/2020\/08\/ea8bc47f73ef3b06ccfdf94d323592bf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pokud se dostanete k produktu, kter\u00fd se vyv\u00edj\u00ed v\u00edce ne\u017e deset let, nen\u00ed p\u0159ekvapen\u00edm, \u017ee se v n\u011bm nach\u00e1zej\u00ed zastaral\u00e9 technologie. Ale co kdy\u017e za p\u016fl roku mus\u00edte zvl\u00e1dnout z\u00e1t\u011b\u017e desetkr\u00e1t vy\u0161\u0161\u00ed a cena v\u00fdpadk\u016f vzroste o stovky procent? V takov\u00e9m p\u0159\u00edpad\u011b pot\u0159ebujete skv\u011bl\u00e9ho in\u017een\u00fdra pro vysokou z\u00e1t\u011b\u017e. Ale proto\u017ee nem\u00e1me \u017e\u00e1dn\u00e9ho takov\u00e9ho odborn\u00edka, sv\u011b\u0159ili jsme \u0159e\u0161en\u00ed probl\u00e9mu mn\u011b. V prvn\u00ed \u010d\u00e1sti \u010dl\u00e1nku se pod\u011bl\u00edm o to, jak jsme migrovali z Redis na Redis-cluster, a ve druh\u00e9 \u010d\u00e1sti poskytnu rady, jak za\u010d\u00edt pou\u017e\u00edvat cluster a na co se zam\u011b\u0159it p\u0159i jeho provozu.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"vybor-tehnologii\">V\u00fdb\u011br technologie<\/h1>\n<p><\/p>\n<p>Je opravdu tak \u0161patn\u00fd <em>samostatn\u00fd Redis<\/em> (standalone redis) v konfiguraci 1 master a N slave? Pro\u010d ho naz\u00fdv\u00e1m zastaralou technologi\u00ed?<\/p>\n<p><\/p>\n<blockquote><p>Ne, Redis nen\u00ed tak \u0161patn\u00fd\u2026 Ale jsou zde n\u011bkter\u00e9 nedostatky, kter\u00e9 nelze ignorovat.<\/p><\/blockquote>\n<p><\/p>\n<ul>\n<li>\n<p>Za prv\u00e9, Redis nepodporuje mechanismy pro havarijn\u00ed obnovu po selh\u00e1n\u00ed hlavn\u00edho serveru. Abychom tento probl\u00e9m vy\u0159e\u0161ili, pou\u017eili jsme konfiguraci s automatick\u00fdm p\u0159epnut\u00edm VIP na nov\u00fd master, zm\u011bnou role jednoho ze slave a p\u0159ep\u00edn\u00e1n\u00edm ostatn\u00edch. Tento mechanismus fungoval, ale nedalo se to nazvat spolehliv\u00fdm \u0159e\u0161en\u00edm. Za prv\u00e9, doch\u00e1zelo k fale\u0161n\u00fdm spou\u0161t\u011bn\u00edm, a za druh\u00e9, bylo to jednor\u00e1zov\u00e9, a po spou\u0161t\u011bn\u00ed byly pot\u0159ebn\u00e9 ru\u010dn\u00ed z\u00e1sahy k op\u011btovn\u00e9mu zprovozn\u011bn\u00ed.<\/p>\n<p>\n<\/li>\n<li>\n<p>Za druh\u00e9, p\u0159\u00edtomnost pouze jednoho masteru vedla k probl\u00e9mu shardingu. Museli jsme vytvo\u0159it n\u011bkolik nez\u00e1visl\u00fdch cluster\u016f \u201e1 master a N slave\u201c, pot\u00e9 ru\u010dn\u011b distribuovat datab\u00e1ze mezi t\u011bmito stroji a doufat, \u017ee z\u00edtra se jedna z datab\u00e1z\u00ed nenafoukne natolik, \u017ee ji bude t\u0159eba p\u0159en\u00e9st na samostatn\u00fd instance.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Jak\u00e9 jsou mo\u017enosti?<\/p>\n<p><\/p>\n<ul>\n<li>Nejdra\u017e\u0161\u00ed a nejbohat\u0161\u00ed \u0159e\u0161en\u00ed \u2014 Redis-Enterprise. To je krabicov\u00e9 \u0159e\u0161en\u00ed s plnou technickou podporou. I kdy\u017e se to zd\u00e1 b\u00fdt ide\u00e1ln\u00ed z technick\u00e9ho hlediska, z ideologick\u00fdch d\u016fvod\u016f n\u00e1m to nevyhovovalo. <\/li>\n<li>Redis-cluster. Z krabice je podporov\u00e1no havarijn\u00ed p\u0159ep\u00edn\u00e1n\u00ed master a sharding. Rozhran\u00ed se skoro neli\u0161\u00ed od b\u011b\u017en\u00e9 verze. Vypad\u00e1 slibn\u011b, o \u00faskal\u00ed budeme mluvit d\u00e1le.<\/li>\n<li>Tarantool, Memcache, Aerospike a dal\u0161\u00ed. V\u0161echny tyto n\u00e1stroje d\u011blaj\u00ed v\u00edcem\u00e9n\u011b to sam\u00e9. Ale ka\u017ed\u00fd z nich m\u00e1 sv\u00e9 nev\u00fdhody. Rozhodli jsme se ned\u00e1vat v\u0161echny vejce do jedn\u00e9 basket, Memcache a Tarantool pou\u017e\u00edv\u00e1me k jin\u00fdm \u00faloh\u00e1m a dop\u0159edu mohu \u0159\u00edci, \u017ee jsme m\u011bli v\u00edce probl\u00e9m\u016f s nimi.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"specifika-ispolzovaniya\">Specifika pou\u017eit\u00ed<\/h1>\n<p><\/p>\n<p>Pod\u00edvejme se, jak\u00e9 \u00fakoly jsme historicky \u0159e\u0161ili pomoc\u00ed Redis a jak\u00e9 funk\u010dnosti jsme vyu\u017e\u00edvali:<\/p>\n<p><\/p>\n<ul>\n<li>Cache p\u0159ed dotazy na vzd\u00e1len\u00e9 slu\u017eby jako 2GIS | Golang<br \/>\n<blockquote><p>GET SET MGET MSET \"VYBRAT DB\"\n<\/p><\/blockquote>\n<\/li>\n<li>Cache p\u0159ed MYSQL | PHP<br \/>\n<blockquote><p>GET SET MGET MSET SCAN \"KL\u00cd\u010c PODLE VZORCE\" \"VYBRAT DB\"\n<\/p><\/blockquote>\n<\/li>\n<li>Hlavn\u00ed \u00falo\u017ei\u0161t\u011b pro slu\u017ebu spr\u00e1vy sezen\u00ed a koordin\u00e1t\u016f \u0159idi\u010d\u016f | Golang<br \/>\n<blockquote><p>GET SET MGET MSET \"VYBRAT DB\" \"P\u0158IDAT GEO KL\u00cd\u010c\" \"Z\u00cdSKAT GEO KL\u00cd\u010c\" SCAN\n<\/p><\/blockquote>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Jak vid\u00edte, \u017e\u00e1dn\u00e1 vy\u0161\u0161\u00ed matematika. V \u010dem je tedy obt\u00ed\u017enost? Poj\u010fme si to podrobn\u011bji rozebrat podle ka\u017ed\u00e9 metody.<\/p>\n<p><\/p>\n<p>Metoda<br \/>\nPopis<br \/>\nVlastnosti Redis-cluster<br \/>\n\u0158e\u0161en\u00ed<\/p>\n<p>GET SET<br \/>\nZapsat\/\u010d\u00edst kl\u00ed\u010d<\/p>\n<p>MGET MSET<br \/>\nZapsat\/\u010d\u00edst n\u011bkolik kl\u00ed\u010d\u016f<br \/>\nKl\u00ed\u010de budou ulo\u017eeny na r\u016fzn\u00fdch uzlech. Hotov\u00e9 knihovny um\u00ed prov\u00e1d\u011bt Multi-operace pouze v r\u00e1mci jednoho uzlu<br \/>\nNahradit MGET pipeline z N GET operac\u00ed<\/p>\n<p>SELECT DB<br \/>\nVybrat datab\u00e1zi, se kterou budeme pracovat<br \/>\nNepodporuje v\u00edce datab\u00e1z\u00ed<br \/>\nUkl\u00e1dat v\u0161e do jedn\u00e9 datab\u00e1ze. P\u0159idat k kl\u00ed\u010d\u016fm prefixy<\/p>\n<p>SCAN<br \/>\nProj\u00edt v\u0161emi kl\u00ed\u010di v datab\u00e1zi<br \/>\nProto\u017ee m\u00e1me jednu datab\u00e1zi, proch\u00e1zet v\u0161emi kl\u00ed\u010di v clusteru je p\u0159\u00edli\u0161 n\u00e1kladn\u00e9<br \/>\nUdr\u017eovat invariant uvnit\u0159 jednoho kl\u00ed\u010de a prov\u00e1d\u011bt HSCAN na tomto kl\u00ed\u010di. Nebo se toho \u00fapln\u011b vzd\u00e1t<\/p>\n<p>GEO<br \/>\nOperace s geokl\u00ed\u010dem<br \/>\nGeokl\u00ed\u010d se ned\u00e1 shardovat<\/p>\n<p>KEY BY PATTERN<br \/>\nHled\u00e1n\u00ed kl\u00ed\u010de podle vzoru<br \/>\nProto\u017ee m\u00e1me jednu datab\u00e1zi, budeme hledat mezi v\u0161emi kl\u00ed\u010di v clusteru. P\u0159\u00edli\u0161 n\u00e1kladn\u00e9<br \/>\nVzd\u00e1t se nebo udr\u017eovat invariant, stejn\u011b jako v p\u0159\u00edpad\u011b SCANu<\/p>\n<p><\/p>\n<h1 id=\"redis-vs-redis-cluster\">Redis vs Redis-cluster<\/h1>\n<p><\/p>\n<p>Co ztr\u00e1c\u00edme a co z\u00edsk\u00e1v\u00e1me p\u0159i p\u0159echodu na cluster?<\/p>\n<p><\/p>\n<ul>\n<li>Nev\u00fdhody: ztr\u00e1c\u00edme funkcionalitu n\u011bkolika datab\u00e1z\u00ed. \n<ul>\n<li>Pokud chceme uchov\u00e1vat v jednom clusteru logicky nesouvisej\u00edc\u00ed data, budeme muset vytv\u00e1\u0159et z\u00e1st\u011bry pomoc\u00ed prefix\u016f. <\/li>\n<li>Ztr\u00e1c\u00edme v\u0161echny operace \"podle datab\u00e1ze\", jako nap\u0159\u00edklad SCAN, DBSIZE, CLEAR DB atd.<\/li>\n<li>Multi-operace se staly v\u00fdrazn\u011b slo\u017eit\u011bj\u0161\u00edmi na implementaci, proto\u017ee m\u016f\u017ee b\u00fdt nutn\u00e9 komunikovat s n\u011bkolika uzly.<\/li>\n<\/ul>\n<\/li>\n<li>V\u00fdhody: \n<ul>\n<li>Odolnost v\u016f\u010di chyb\u00e1m ve form\u011b havarijn\u00edho p\u0159epnut\u00ed mastera.<\/li>\n<li>Shardov\u00e1n\u00ed na stran\u011b Redis.<\/li>\n<li>Atom\u00e1rn\u00ed p\u0159enos dat mezi uzly bez prostoju.<\/li>\n<li>P\u0159id\u00e1n\u00ed a redistribuce v\u00fdkonu a z\u00e1t\u011b\u017e\u00ed bez prostoju.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><em>Mysl\u00edm, \u017ee pokud nepot\u0159ebujete zajistit vysokou \u00farove\u0148 odolnosti proti v\u00fdpadk\u016fm, pak migrace na cluster za to nestoj\u00ed, proto\u017ee to m\u016f\u017ee b\u00fdt slo\u017eit\u00fd \u00fakol. Ale pokud bychom m\u011bli vybrat mezi samostatnou verz\u00ed a clusterem, m\u011bli bychom volit cluster, proto\u017ee nen\u00ed nijak hor\u0161\u00ed a nav\u00edc to z v\u00e1s sn\u00ed\u017e\u00ed \u010d\u00e1st bolesti hlavy.<\/em><\/p>\n<p><\/p>\n<h1 id=\"podgotovka-k-pereezdu\">P\u0159\u00edprava na migraci<\/h1>\n<p><\/p>\n<p>Za\u010dn\u011bme s po\u017eadavky na migraci:<\/p>\n<p><\/p>\n<ul>\n<li>Mus\u00ed b\u00fdt bezprobl\u00e9mov\u00e1. \u00dapln\u00e9 zastaven\u00ed slu\u017eby na 5 minut n\u00e1s neuspokoj\u00ed.<\/li>\n<li>Mus\u00ed b\u00fdt maxim\u00e1ln\u011b bezpe\u010dn\u00e1 a postupn\u00e1. R\u00e1di bychom m\u00edt n\u011bjakou kontrolu nad situac\u00ed. Nechceme v\u0161e hodit najednou a modlit se nad tla\u010d\u00edtkem pro n\u00e1vrat.<\/li>\n<li>Minim\u00e1ln\u00ed ztr\u00e1ty dat b\u011bhem migrace. Ch\u00e1peme, \u017ee atom\u00e1rn\u00ed migrace bude velmi slo\u017eit\u00e1, tak\u017ee p\u0159ipou\u0161t\u00edme ur\u010ditou nesynchronizaci mezi daty v b\u011b\u017en\u00e9m a clusterov\u00e9m Redis.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"obsluzhivanie-klastera\">\u00dadr\u017eba clustera<\/h1>\n<p><\/p>\n<p>T\u011bsn\u011b p\u0159ed samotnou migrac\u00ed bychom se m\u011bli zamyslet nad t\u00edm, zda m\u016f\u017eeme udr\u017eovat cluster:<\/p>\n<p><\/p>\n<ul>\n<li>Grafy. Pou\u017e\u00edv\u00e1me Prometheus a Grafana pro grafy zat\u00ed\u017een\u00ed procesor\u016f, vyu\u017eit\u00ed pam\u011bti, po\u010det klient\u016f, po\u010det operac\u00ed GET, SET, AUTH atd.<\/li>\n<li>Expertn\u00ed znalosti. P\u0159edstavte si, \u017ee z\u00edtra budete m\u00edt na starosti obrovsk\u00fd cluster. Pokud se rozbije, nikdo krom\u011b v\u00e1s ho nebude moci opravit. Pokud za\u010dne zpomalovat \u2014 v\u0161ichni se k v\u00e1m po\u017eenou. Pokud bude pot\u0159eba p\u0159idat zdroje nebo p\u0159erozd\u011blit z\u00e1t\u011b\u017e \u2014 op\u011bt k v\u00e1m. Abychom nezvinuli vlasy ve 25, m\u011bli bychom tyto p\u0159\u00edpady p\u0159edem zv\u00e1\u017eit a ov\u011b\u0159it si, jak se technologie zachov\u00e1 p\u0159i r\u016fzn\u00fdch akc\u00edch. O tom se podrobn\u011bji pobav\u00edme v \u010d\u00e1sti \u201eExpertn\u00ed znalosti\u201c.<\/li>\n<li>Monitoring a upozorn\u011bn\u00ed. Kdy\u017e se cluster rozbije, chceme o tom v\u011bd\u011bt jako prvn\u00ed. Omezili jsme se na upozorn\u011bn\u00ed, \u017ee v\u0161echny uzly vracej\u00ed stejn\u00e9 informace o stavu clustera (ano, m\u016f\u017ee to b\u00fdt i jinak). A ostatn\u00ed probl\u00e9my si m\u016f\u017eeme rychleji v\u0161imnout podle upozorn\u011bn\u00ed klientsk\u00fdch slu\u017eeb Redis.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"pereezd\">Migrace<\/h1>\n<p><\/p>\n<p>Jak budeme migrovat:<\/p>\n<p><\/p>\n<ul>\n<li>Nejd\u0159\u00edve je t\u0159eba p\u0159ipravit knihovnu pro pr\u00e1ci s klastrem. Jako z\u00e1klad pro verzi v G\u043e jsme vzali go-redis a trochu si ji upravili. Implementovali jsme Multi-metody prost\u0159ednictv\u00edm pipeline a tak\u00e9 m\u00edrn\u011b upravili pravidla opakov\u00e1n\u00ed dotaz\u016f. S verz\u00ed pro PHP jsme m\u011bli v\u00edce probl\u00e9m\u016f, ale nakonec jsme se rozhodli pro php-redis. Ned\u00e1vno zavedli podporu klastru a z na\u0161eho pohledu vypad\u00e1 dob\u0159e.<\/li>\n<li>D\u00e1le je t\u0159eba rozvinout samotn\u00fd klastr. To se d\u011bl\u00e1 doslova ve dvou p\u0159\u00edkazech na z\u00e1klad\u011b konfigura\u010dn\u00edho souboru. O nastaven\u00ed podrobn\u011bji diskutujeme n\u00ed\u017ee.<\/li>\n<li>Pro postupn\u00fd p\u0159echod pou\u017e\u00edv\u00e1me dry-mode. Jeliko\u017e m\u00e1me dv\u011b verze knihovny se stejn\u00fdm rozhran\u00edm (jednu pro b\u011b\u017enou verzi, druhou pro klastr), nen\u00ed nic jednodu\u0161\u0161\u00edho ne\u017e vytvo\u0159it wrapper, kter\u00fd bude pracovat s jednotlivou verz\u00ed a z\u00e1rove\u0148 duplikovat v\u0161echny dotazy do klastru, porovn\u00e1vat odpov\u011bdi a zapisovat rozd\u00edly do log\u016f (v na\u0161em p\u0159\u00edpad\u011b do NewRelic). Tak\u017ee i kdy\u017e se p\u0159i spu\u0161t\u011bn\u00ed klastr\u00e1ln\u00ed verze n\u011bco pokaz\u00ed, n\u00e1\u0161 production to neovlivn\u00ed. <\/li>\n<li>P\u0159i spu\u0161t\u011bn\u00ed klastru v dry- re\u017eimu m\u016f\u017eeme klidn\u011b sledovat graf rozd\u00edl\u016f odpov\u011bd\u00ed. Pokud pod\u00edl chyb pomalu, ale jist\u011b sm\u011b\u0159uje k ur\u010dit\u00e9 mal\u00e9 konstant\u011b, znamen\u00e1 to, \u017ee je v\u0161e v po\u0159\u00e1dku. Pro\u010d v\u0161ak rozd\u00edly st\u00e1le existuj\u00ed? Proto\u017ee z\u00e1pis v jednotliv\u00e9 verzi prob\u00edh\u00e1 trochu d\u0159\u00edve ne\u017e v klastru, a d\u00edky mikrologu se mohou \u00fadaje li\u0161it. Zbylo jen pod\u00edvat se na logy rozd\u00edl\u016f, a pokud jsou v\u0161echny vysv\u011btliteln\u00e9 neatomaritou z\u00e1pisu, m\u016f\u017eeme pokra\u010dovat d\u00e1l.<\/li>\n<li>Nyn\u00ed m\u016f\u017eeme p\u0159epnout dry-mode na opa\u010dnou stranu. Budeme zapisovat a \u010d\u00edst z klastru, a duplikovat do jednotliv\u00e9 verze. Pro\u010d? B\u011bhem p\u0159\u00ed\u0161t\u00edho t\u00fddne bychom cht\u011bli sledovat pr\u00e1ci klastru. Pokud se n\u00e1hle zjist\u00ed, \u017ee v max. zat\u00ed\u017een\u00ed jsou n\u011bjak\u00e9 probl\u00e9my, nebo jsme n\u011bco nep\u0159edpokl\u00e1dali, m\u00e1me v\u017edy k dispozici havarijn\u00ed n\u00e1vrat na star\u00fd k\u00f3d a aktu\u00e1ln\u00ed data d\u00edky dry-mode.<\/li>\n<li>Zb\u00fdv\u00e1 pouze vypnout dry-mode a demontovat jednotlivou verzi. <\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"ekspertiza\">Odbornost<\/h1>\n<p><\/p>\n<p>Nejprve stru\u010dn\u011b o za\u0159\u00edzen\u00ed klastru.<\/p>\n<p><\/p>\n<p>Nejd\u0159\u00edve, Redis je key-value \u00falo\u017ei\u0161t\u011b. Jako kl\u00ed\u010d se pou\u017e\u00edvaj\u00ed libovoln\u00e9 \u0159et\u011bzce. Jako hodnoty mohou b\u00fdt pou\u017e\u00edv\u00e1na \u010d\u00edsla, \u0159et\u011bzce a cel\u00e9 struktury. T\u011bch je velk\u00e9 mno\u017estv\u00ed, ale pro pochopen\u00ed obecn\u00e9ho za\u0159\u00edzen\u00ed n\u00e1m to nen\u00ed d\u016fle\u017eit\u00e9.<br \/>\nDal\u0161\u00ed \u00farove\u0148 abstrakce po kl\u00ed\u010d\u00edch jsou sloty (SLOTS). Ka\u017ed\u00fd kl\u00ed\u010d pat\u0159\u00ed do jednoho ze 16 383 slot\u016f. Uvnit\u0159 ka\u017ed\u00e9ho slotu m\u016f\u017ee b\u00fdt libovoln\u00fd po\u010det kl\u00ed\u010d\u016f. Tak\u017ee v\u0161echny kl\u00ed\u010de se d\u011bl\u00ed na 16 383 disjunktn\u00edch mno\u017ein.<br \/>\n<img decoding=\"async\" alt=\"O p\u0159echodu z Redis na Redis-cluster\" src=\"\/wp-content\/uploads\/2020\/08\/a5e4be23381b42287f693e01d5d59a99.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>D\u00e1le mus\u00ed b\u00fdt v clusteru N master nod\u016f. Ka\u017edou nodu lze p\u0159edstavovat jako samostatnou instanci Redis, kter\u00e1 v\u00ed v\u0161e o ostatn\u00edch nodech uvnit\u0159 clusteru. Ka\u017ed\u00e1 master nod obsahuje ur\u010dit\u00e9 mno\u017estv\u00ed slot\u016f. Ka\u017ed\u00fd slot pat\u0159\u00ed pouze jedn\u00e9 master nod\u011b. V\u0161echny sloty je t\u0159eba rozd\u011blit mezi nody. Pokud n\u011bjak\u00e9 sloty nejsou rozd\u011bleny, kl\u00ed\u010de, kter\u00e9 v nich jsou ulo\u017eeny, budou nedostupn\u00e9. Ka\u017edou master nod m\u00e1 smysl spustit na samostatn\u00e9m logick\u00e9m nebo fyzick\u00e9m stroji. Tak\u00e9 je dobr\u00e9 si pamatovat, \u017ee ka\u017ed\u00e1 noda pracuje pouze na jednom j\u00e1dru, a pokud chcete spustit na jednom logick\u00e9m stroji v\u00edce instanc\u00ed Redis, ujist\u011bte se, \u017ee pob\u011b\u017e\u00ed na r\u016fzn\u00fdch j\u00e1drech (to jsme nezkou\u0161eli, ale teoreticky by to m\u011blo fungovat). V podstat\u011b master nody poskytuj\u00ed b\u011b\u017en\u00e9 shardov\u00e1n\u00ed a v\u011bt\u0161\u00ed po\u010det master nod\u016f umo\u017e\u0148uje \u0161k\u00e1lov\u00e1n\u00ed po\u017eadavk\u016f na z\u00e1pis a \u010dten\u00ed.<\/p>\n<p><\/p>\n<p>Jakmile jsou v\u0161echny kl\u00ed\u010de rozd\u011bleny podle slot\u016f a sloty rozlo\u017eeny mezi master nody, lze k ka\u017ed\u00e9 master nod\u011b p\u0159idat libovoln\u00fd po\u010det slave nod\u016f. Uvnit\u0159 ka\u017ed\u00e9ho takov\u00e9ho p\u00e1ru \"master-slave\" bude fungovat standardn\u00ed replikace. Slaves jsou pot\u0159eba pro \u0161k\u00e1lov\u00e1n\u00ed po\u017eadavk\u016f na \u010dten\u00ed a pro v\u00fdpadkov\u00e9 p\u0159ep\u00edn\u00e1n\u00ed v p\u0159\u00edpad\u011b selh\u00e1n\u00ed masteru.<br \/>\n<img decoding=\"async\" alt=\"O p\u0159echodu z Redis na Redis-cluster\" src=\"\/wp-content\/uploads\/2020\/08\/90feb7ef9dacb858d5f21edc214df14d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Te\u010f si pov\u011bzme o operac\u00edch, kter\u00e9 bychom m\u011bli um\u011bt prov\u00e1d\u011bt.<\/p>\n<p><\/p>\n<p>K syst\u00e9mu se budeme obracet pomoc\u00ed Redis-CLI. Vzhledem k tomu, \u017ee Redis nem\u00e1 jedin\u00fd vstupn\u00ed bod, lze prov\u00e1d\u011bt n\u00e1sleduj\u00edc\u00ed operace na libovoln\u00e9 z nod\u016f. V ka\u017ed\u00e9m bod\u011b zvl\u00e1\u0161\u0165 upozor\u0148uji na mo\u017enost proveden\u00ed operace pod z\u00e1t\u011b\u017e\u00ed.<\/p>\n<p><\/p>\n<ul>\n<li>Prvn\u00ed a nejd\u016fle\u017eit\u011bj\u0161\u00ed, co budeme pot\u0159ebovat: operace cluster nodes. Ta vrac\u00ed stav clusteru, ukazuje seznam nod\u016f, jejich role, rozlo\u017een\u00ed slot\u016f atd. Dal\u0161\u00ed informace lze z\u00edskat pomoc\u00ed cluster info a cluster slots.<\/li>\n<li>Bylo by dobr\u00e9 um\u011bt p\u0159id\u00e1vat a odstra\u0148ovat nody. K tomu slou\u017e\u00ed operace cluster meet a cluster forget. V\u0161imn\u011bte si, \u017ee cluster forget je t\u0159eba pou\u017e\u00edt na KA\u017dD\u00c9 nod\u011b, jak na masterech, tak na replik\u00e1ch. Na jedn\u00e9 nod\u011b sta\u010d\u00ed pouze vyvolat cluster meet. Tato odli\u0161nost m\u016f\u017ee b\u00fdt matouc\u00ed, proto je lep\u0161\u00ed se o n\u00ed dozv\u011bd\u011bt p\u0159ed uveden\u00edm clusteru do provozu. P\u0159id\u00e1n\u00ed nody se bezpe\u010dn\u011b prov\u00e1d\u00ed v provozu a nijak neovliv\u0148uje pr\u00e1ci clusteru (co\u017e je logick\u00e9). Pokud se chyst\u00e1te odstranit nodu z clusteru, m\u011bli byste se ujistit, \u017ee na n\u00ed nezbyly sloty (jinak riskujete ztr\u00e1tu p\u0159\u00edstupu ke v\u0161em kl\u00ed\u010d\u016fm na t\u00e9to nod\u011b). Tak\u00e9 neodstra\u0148ujte master, kter\u00fd m\u00e1 slaye, jinak dojde k zbyte\u010dn\u00e9mu hlasov\u00e1n\u00ed o nov\u00e9m masterovi. Pokud na nodech u\u017e sloty nejsou, je to mal\u00fd probl\u00e9m, ale pro\u010d m\u00edt nav\u00edc volby, kdy\u017e lze nejprve odstranit slaye.<\/li>\n<li>Pokud je t\u0159eba n\u00e1sil\u00edm vym\u011bnit master a slave, pak je vhodn\u00fd p\u0159\u00edkaz cluster failover. P\u0159i jeho vyvol\u00e1n\u00ed v provozu je t\u0159eba ch\u00e1pat, \u017ee b\u011bhem prov\u00e1d\u011bn\u00ed operace bude master nedostupn\u00fd. Obvykle p\u0159epnut\u00ed prob\u00edh\u00e1 za m\u00e9n\u011b ne\u017e sekundu, ale nen\u00ed atomick\u00e9. M\u016f\u017eete se spolehnout, \u017ee \u010d\u00e1st po\u017eadavk\u016f na master v tuto chv\u00edli skon\u010d\u00ed chybou.<\/li>\n<li>P\u0159ed odebr\u00e1n\u00edm uzlu z clustera by na n\u011bm nem\u011bly z\u016fstat \u017e\u00e1dn\u00e9 sloty. Je lep\u0161\u00ed je p\u0159erozd\u011blit pomoc\u00ed p\u0159\u00edkazu cluster reshard. Sloty budou p\u0159esunuty z jednoho mastera na druh\u00fd. Cel\u00e1 operace m\u016f\u017ee trvat n\u011bkolik minut, v z\u00e1vislosti na objemu p\u0159en\u00e1\u0161en\u00fdch dat. Av\u0161ak proces p\u0159esunu je bezpe\u010dn\u00fd a nijak neovliv\u0148uje provoz clusteru. T\u00edmto zp\u016fsobem lze v\u0161echny data p\u0159esunout z jednoho uzlu na druh\u00fd p\u0159\u00edmo b\u011bhem zat\u00ed\u017een\u00ed, ani\u017e byste se museli ob\u00e1vat jejich dostupnosti. Existuj\u00ed v\u0161ak ur\u010dit\u00e9 n\u00e1strahy. Za prv\u00e9, p\u0159esun dat znamen\u00e1 ur\u010ditou z\u00e1t\u011b\u017e pro jak uzel p\u0159\u00edjemce, tak odes\u00edlatele. Pokud je uzel p\u0159\u00edjemce ji\u017e siln\u011b zat\u00ed\u017een\u00fd procesorem, nem\u011bli byste ho zat\u011b\u017eovat tak\u00e9 p\u0159\u00edjmem nov\u00fdch dat. Za druh\u00e9, jakmile na masteru odes\u00edlatele nez\u016fstane \u017e\u00e1dn\u00fd slot, v\u0161ichni jeho slave okam\u017eit\u011b p\u0159ejdou k masteru, na kter\u00fd byly tyto sloty p\u0159esunuty. Probl\u00e9m je v tom, \u017ee v\u0161ichni tito slave se cht\u011bj\u00ed synchronizovat najednou. A budete m\u00edt \u0161t\u011bst\u00ed, pokud to bude \u010d\u00e1ste\u010dn\u00e1, a ne pln\u00e1 synchronizace. M\u011bjte to na pam\u011bti a kombinujte operace p\u0159enosu slot\u016f a odpojov\u00e1n\u00ed\/p\u0159esunu slave. Nebo doufejte, \u017ee m\u00e1te dostatek rezervy.<\/li>\n<li>Co d\u011blat, kdy\u017e p\u0159i p\u0159esunu zjist\u00edte, \u017ee jste n\u011bkde ztratili sloty? Douf\u00e1m, \u017ee se v\u00e1s tento probl\u00e9m nedotkne, ale pokud ano, existuje operace cluster fix. Ta n\u011bjak\u00fdm zp\u016fsobem rozpt\u00fdl\u00ed sloty po uzlech n\u00e1hodn\u011b. Doporu\u010duji zkontrolovat jej\u00ed funkci t\u00edm, \u017ee p\u0159edt\u00edm odstran\u00edte z clusteru uzel s rozd\u011blen\u00fdmi sloty. Vzhledem k tomu, \u017ee data v nerozd\u011blen\u00fdch slotech jsou tak jako tak nedostupn\u00e1, je ji\u017e pozd\u011b se ob\u00e1vat probl\u00e9m\u016f s dostupnost\u00ed t\u011bchto slot\u016f. Na druhou stranu operace na rozd\u011blen\u00e9 sloty nebude m\u00edt vliv.<\/li>\n<li>Dal\u0161\u00ed u\u017eite\u010dn\u00e1 operace je monitor. Umo\u017e\u0148uje v re\u00e1ln\u00e9m \u010dase vid\u011bt cel\u00fd seznam dotaz\u016f, kter\u00e9 p\u0159ich\u00e1zej\u00ed na uzel. Co v\u00edc, m\u016f\u017eete ji pou\u017e\u00edt s grepem a zjistit, zda je pot\u0159ebn\u00fd provoz.<\/li>\n<\/ul>\n<p><\/p>\n<p>Tak\u00e9 je t\u0159eba zm\u00ednit postup pro p\u0159epnut\u00ed hlavn\u00edho uzlu v nouzi. Zkr\u00e1tka, tento postup existuje a podle m\u00e9ho n\u00e1zoru funguje skv\u011ble. Nicm\u00e9n\u011b, nem\u011bjte na mysli, \u017ee kdy\u017e vyt\u00e1hnete kabel ze z\u00e1suvky u stroje s hlavn\u00edm uzlem, Redis se okam\u017eit\u011b p\u0159epne a klienti si nev\u0161imnou ztr\u00e1ty. Z m\u00e9 zku\u0161enosti trv\u00e1 p\u0159epnut\u00ed n\u011bkolik sekund. B\u011bhem t\u00e9to doby bude \u010d\u00e1st dat nedostupn\u00e1: dojde k zji\u0161t\u011bn\u00ed nedostupnosti hlavn\u00edho uzlu, uzly hlasuj\u00ed pro nov\u00e9ho, slave se p\u0159epnou a data se synchronizuj\u00ed. Nejlep\u0161\u00ed zp\u016fsob, jak se osobn\u011b ujistit, \u017ee sch\u00e9ma funguje, je prov\u00e9st m\u00edstn\u00ed cvi\u010den\u00ed. Zvy\u0161te si cluster na sv\u00e9m notebooku, dejte mu minim\u00e1ln\u00ed z\u00e1t\u011b\u017e, imitujte p\u00e1d (nap\u0159\u00edklad zablokov\u00e1n\u00edm port\u016f) a zhodno\u0165te rychlost p\u0159epnut\u00ed. Podle m\u011b pouze pohr\u00e1t si t\u00edmto zp\u016fsobem den nebo dva si lze b\u00fdt jisti, \u017ee technologie funguje. Nebo se spolehnout, \u017ee software, kter\u00fd pou\u017e\u00edv\u00e1 polovina internetu, ur\u010dit\u011b funguje.<\/p>\n<p><\/p>\n<h1 id=\"konfiguraciya\">Konfigurace<\/h1>\n<p><\/p>\n<p>\u010casto je konfigurace prvn\u00ed v\u011bc\u00ed, kterou je t\u0159eba vy\u0159e\u0161it p\u0159i pr\u00e1ci s n\u00e1strojem. A kdy\u017e u\u017e v\u0161e funguje, nechce se n\u00e1m s konfigurac\u00ed pohybovat. Je nutn\u00e9 vynalo\u017eit ur\u010dit\u00e9 \u00fasil\u00ed, abychom se donutili vr\u00e1tit se k nastaven\u00edm a d\u016fkladn\u011b je proj\u00edt. Z m\u00e9 pam\u011bti si pamatuji alespo\u0148 dva v\u00e1\u017en\u00e9 probl\u00e9my kv\u016fli nepozornosti k konfiguraci. V\u011bnujte zvl\u00e1\u0161tn\u00ed pozornost n\u00e1sleduj\u00edc\u00edm bod\u016fm:<\/p>\n<p><\/p>\n<ul>\n<li>timeout 0<br \/>\n<em>Doba, po kter\u00e9 se uzav\u00edraj\u00ed neaktivn\u00ed spojen\u00ed (v sekund\u00e1ch). 0 \u2014 neuzav\u00edraj\u00ed se<\/em><br \/>\nNe ka\u017ed\u00e1 na\u0161e knihovna um\u011bla spr\u00e1vn\u011b uzav\u00edrat spojen\u00ed. Vypnut\u00edm tohoto nastaven\u00ed riskujeme p\u0159ekro\u010den\u00ed limitu po\u010dtu klient\u016f. Na druhou stranu, pokud takov\u00fd probl\u00e9m existuje, automatick\u00e9 p\u0159eru\u0161en\u00ed ztracen\u00fdch spojen\u00ed jej zamaskuje, a my si toho nemus\u00edme v\u0161imnout. Krom\u011b toho by toto nastaven\u00ed nem\u011blo b\u00fdt zapnuto p\u0159i pou\u017e\u00edv\u00e1n\u00ed persist-zapojen\u00ed.<\/li>\n<li>Save x y &amp; appendonly yes<br \/>\n<em>Ulo\u017een\u00ed RDB sn\u00edmku.<\/em><br \/>\nProbl\u00e9my RDB\/AOF podrobn\u011b prodiskutujeme n\u00ed\u017ee.<\/li>\n<li>stop-writes-on-bgsave-error no &amp; slave-serve-stale-data yes<br \/>\n<em>Pokud je zapnuto, pak p\u0159i chyb\u011b RDB sn\u00edmku hlavn\u00ed uzel p\u0159estane p\u0159ij\u00edmat po\u017eadavky na zm\u011bnu. Pokud se ztrat\u00ed spojen\u00ed s hlavn\u00edm uzlem, slave m\u016f\u017ee pokra\u010dovat v odpov\u00edd\u00e1n\u00ed na po\u017eadavky (yes). Nebo p\u0159estane odpov\u00eddat (no).<\/em><br \/>\nNesouhlas\u00edme se situac\u00ed, kdy se Redis prom\u011bn\u00ed v d\u00fdni.<\/li>\n<li>repl-ping-slave-period 5<br \/>\n<em>Po tomto \u010dasov\u00e9m \u00faseku za\u010dneme m\u00edt obavy, \u017ee master selhal a je \u010das prov\u00e9st proceduru failoveru.<\/em><br \/>\nBude nutn\u00e9 ru\u010dn\u011b hledat vyv\u00e1\u017een\u00ed mezi fale\u0161n\u00fdmi aktivacemi a spu\u0161t\u011bn\u00edm failoveru. Z na\u0161\u00ed praxe to trv\u00e1 5 sekund.<\/li>\n<li>repl-backlog-size 1024mb &amp; epl-backlog-ttl 0<br \/>\n<em>P\u0159esn\u011b tolik dat m\u016f\u017eeme uchov\u00e1vat v bufferu pro odpojenou repliku. Pokud buffer vy\u010derp\u00e1me, budeme muset zcela synchronizovat.<\/em><br \/>\nPraxe ukazuje, \u017ee je lep\u0161\u00ed nastavit hodnotu vy\u0161\u0161\u00ed. D\u016fvod\u016f, pro\u010d m\u016f\u017ee replika za\u010d\u00edt zaost\u00e1vat, je dostatek. Pokud zaost\u00e1v\u00e1, pravd\u011bpodobn\u011b v\u00e1\u0161 master u\u017e m\u00e1 velk\u00e9 pot\u00ed\u017ee, a \u00fapln\u00e1 synchronizace bude posledn\u00ed kapkou.<\/li>\n<li>maxclients 10000<br \/>\n<em>Maxim\u00e1ln\u00ed po\u010det sou\u010dasn\u00fdch klient\u016f.<\/em><br \/>\nZ na\u0161\u00ed zku\u0161enosti je lep\u0161\u00ed nastavit hodnotu vy\u0161\u0161\u00ed. Redis si skv\u011ble porad\u00ed s 10 tis\u00edci p\u0159ipojen\u00edmi. Jen se ujist\u011bte, \u017ee je v syst\u00e9mu dostatek socket\u016f. <\/li>\n<li>maxmemory-policy volatile-ttl<br \/>\n<em>Pravidlo, podle kter\u00e9ho se kl\u00ed\u010de odstra\u0148uj\u00ed p\u0159i dosa\u017een\u00ed limitu dostupn\u00e9 pam\u011bti.<\/em><br \/>\nZde nen\u00ed d\u016fle\u017eit\u00e9 samo pravidlo, ale pochopen\u00ed, jak to bude prob\u00edhat. Redis lze pochv\u00e1lit za schopnost norm\u00e1ln\u011b fungovat p\u0159i dosa\u017een\u00ed pam\u011b\u0165ov\u00e9ho limitu. <\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"problemy-rdb-i-aof\">Problematika RDB a AOF<\/h1>\n<p><\/p>\n<p>I kdy\u017e Redis uchov\u00e1v\u00e1 v\u0161echny informace v pam\u011bti, existuje tak\u00e9 mechanismus pro ukl\u00e1d\u00e1n\u00ed dat na disk. A konkr\u00e9tn\u011b t\u0159i mechanismy:<\/p>\n<p><\/p>\n<ul>\n<li>RDB-snapshot \u2014 kompletn\u00ed sn\u00edmek v\u0161ech dat. Nastavuje se pomoc\u00ed konfigurace SAVE X Y a \u010dte se jako \u201eUlo\u017eit kompletn\u00ed sn\u00edmek v\u0161ech dat ka\u017ed\u00fdch X sekund, pokud se zm\u011bnilo alespo\u0148 Y kl\u00ed\u010d\u016f.\u201c<\/li>\n<li>Append-only file \u2014 seznam operac\u00ed v po\u0159ad\u00ed jejich prov\u00e1d\u011bn\u00ed. P\u0159id\u00e1v\u00e1 nov\u00e9 p\u0159ich\u00e1zej\u00edc\u00ed operace do souboru ka\u017ed\u00fdch X sekund nebo ka\u017ed\u00fdch Y operac\u00ed.<\/li>\n<li>RDB a AOF \u2014 kombinace dvou p\u0159edchoz\u00edch.<\/li>\n<\/ul>\n<p><\/p>\n<p>V\u0161echny metody maj\u00ed svoje v\u00fdhody a nev\u00fdhody, nebudu je v\u0161echny vyjmenov\u00e1vat, jen upozorn\u00edm na mn\u011b ne zcela z\u0159ejm\u00e9 aspekty.<\/p>\n<p><\/p>\n<p>Za prv\u00e9, pro ulo\u017een\u00ed RDB-sn\u00edmku je t\u0159eba vyvolat FORK. Pokud je dat hodn\u011b, m\u016f\u017ee to zp\u016fsobit zamrznut\u00ed cel\u00e9ho Redis na dobu od n\u011bkolika milisekund do sekundy. Krom\u011b toho mus\u00ed syst\u00e9m vyhradit pam\u011b\u0165 na takov\u00fd sn\u00edmek, co\u017e vede k pot\u0159eb\u011b m\u00edt na logick\u00e9 ma\u0161in\u011b dvojn\u00e1sobek opera\u010dn\u00ed pam\u011bti: pokud je pro Redis vyhrazeno 8 GB, mus\u00ed b\u00fdt na virtu\u00e1ln\u00edm stroji s n\u00edm dostupn\u00fdch 16.<\/p>\n<p><\/p>\n<p>Za druh\u00e9, existuj\u00ed probl\u00e9my s \u010d\u00e1ste\u010dnou synchronizac\u00ed. V re\u017eimu AOF se p\u0159i znovu p\u0159ipojen\u00ed slave m\u00edsto \u010d\u00e1ste\u010dn\u00e9 synchronizace m\u016f\u017ee prov\u00e1d\u011bt \u00fapln\u00e1. Pro\u010d se to tak d\u011bje, nedok\u00e1\u017eu pochopit. Ale stoj\u00ed za to na to pamatovat.<\/p>\n<p><\/p>\n<p>Tyto dva body ji\u017e nut\u00ed zamyslet se nad t\u00edm, zda skute\u010dn\u011b pot\u0159ebujeme tato data na disku, kdy\u017e jsou stejn\u011b v\u0161e duplikov\u00e1no slavy. Ztratit data lze pouze p\u0159i selh\u00e1n\u00ed v\u0161ech slavy, co\u017e je probl\u00e9m \u00farovn\u011b \"po\u017e\u00e1r v datov\u00e9m centru\". Jako kompromis lze navrhnout ukl\u00e1dat data pouze na slavy, ale v tomto p\u0159\u00edpad\u011b je t\u0159eba zajistit, aby se tyto slavy nikdy nestaly masterem p\u0159i havarijn\u00edm obnoven\u00ed (pro to existuje nastaven\u00ed priority slavy v jejich konfiguraci). V ka\u017ed\u00e9m konkr\u00e9tn\u00edm p\u0159\u00edpad\u011b se zam\u00fd\u0161l\u00edme, zda m\u00e1me ukl\u00e1dat data na disk, a v\u011bt\u0161inou odpov\u00edd\u00e1me \"ne\".<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Z\u00e1v\u011br<\/h1>\n<p><\/p>\n<p>Na z\u00e1v\u011br douf\u00e1m, \u017ee jsem dok\u00e1zal poskytnout obecnou p\u0159edstavu o fungov\u00e1n\u00ed redis-clusteru t\u011bm, kdo o n\u011bm nikdy nesly\u0161eli, a tak\u00e9 jsem upozornil na n\u011bjak\u00e9 nep\u0159\u00edli\u0161 z\u0159ejm\u00e9 momenty pro ty, kdo ho pou\u017e\u00edvaj\u00ed ji\u017e dlouho.<br \/>\nD\u011bkuji za v\u00e1\u0161 \u010das a jako obvykle jsou v\u00edt\u00e1ny koment\u00e1\u0159e k t\u00e9matu.<\/p>\n<p>Zdroj: <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.3 - 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\/cs\/blog\/administrirovanie\/o-pereezde-s-redis-na-redis-cluster\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\/cs\/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\udd47O migraci z Redis na Redis-cluster | ProHoster","description":"P\u0159ich\u00e1z\u00edme do produktu, kter\u00fd se vyv\u00edj\u00ed d\u00e9le.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/o-pereezde-s-redis-na-redis-cluster","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/91846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=91846"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/91846\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/91847"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=91846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=91846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=91846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}