{"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\/sv\/blog\/administrirovanie\/o-pereezde-s-redis-na-redis-cluster","title":{"rendered":"Om \u00f6verg\u00e5ngen fr\u00e5n Redis till Redis-cluster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Om \u00f6verg\u00e5ngen fr\u00e5n Redis till Redis-cluster\" src=\"\/wp-content\/uploads\/2020\/08\/ea8bc47f73ef3b06ccfdf94d323592bf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e4r man arbetar med en produkt som har utvecklats i mer \u00e4n ett decennium \u00e4r det inte f\u00f6rv\u00e5nande att man st\u00f6ter p\u00e5 f\u00f6r\u00e5ldrad teknik. Men vad h\u00e4nder om ni om sex m\u00e5nader m\u00e5ste hantera en belastning som \u00e4r tio g\u00e5nger h\u00f6gre, och kostnaden f\u00f6r driftstopp \u00f6kar hundra g\u00e5nger? I s\u00e5 fall beh\u00f6ver ni en duktig Highload Engineer. Men i avsaknad av en s\u00e5dan, fick jag ta p\u00e5 mig ansvaret f\u00f6r att l\u00f6sa problemet. I den f\u00f6rsta delen av artikeln kommer jag att ber\u00e4tta om v\u00e5r \u00f6verg\u00e5ng fr\u00e5n Redis till Redis-cluster, och i den andra delen kommer jag att ge tips om hur man b\u00f6rjar anv\u00e4nda klustret och vad man ska t\u00e4nka p\u00e5 vid drift.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"vybor-tehnologii\">Val av teknik<\/h1>\n<p><\/p>\n<p>\u00c4r det s\u00e5 d\u00e5ligt <em>separat Redis<\/em> (standalone redis) med en konfiguration av 1 master och N slavar? Varf\u00f6r kallar jag det f\u00f6r f\u00f6r\u00e5ldrad teknik?<\/p>\n<p><\/p>\n<blockquote><p>Nej, Redis \u00e4r inte s\u00e5 d\u00e5ligt... Men det finns vissa brister som inte kan ignoreras.<\/p><\/blockquote>\n<p><\/p>\n<ul>\n<li>\n<p>F\u00f6r det f\u00f6rsta st\u00f6djer inte Redis mekanismer f\u00f6r katastrof\u00e5terst\u00e4llning efter att master har fallit. F\u00f6r att l\u00f6sa detta problem anv\u00e4nde vi en konfiguration med automatisk omdirigering av VIP till den nya mastern, f\u00f6r\u00e4ndring av rollen av en av slavarna och omkoppling av de andra. Denna mekanism fungerade, men man kan inte kalla den ett p\u00e5litligt l\u00f6sning. F\u00f6r det f\u00f6rsta skedde falska larm, och f\u00f6r det andra var den eng\u00e5ngsl\u00f6sning, och efter utl\u00f6st incident kr\u00e4vdes manuella \u00e5tg\u00e4rder f\u00f6r att \u00e5terst\u00e4lla systemet.<\/p>\n<p>\n<\/li>\n<li>\n<p>F\u00f6r det andra orsakade det att det bara fanns en master problem med sharding. Man var tvungen att skapa flera oberoende kluster \"1 master och N slavar\", sedan manuellt f\u00f6rdela databaserna \u00f6ver dessa maskiner och hoppas att ingen databas n\u00e4sta dag skulle v\u00e4xa s\u00e5 mycket att den m\u00e5ste flyttas till en separat instans.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Vilka alternativ finns?<\/p>\n<p><\/p>\n<ul>\n<li>Det dyraste och mest omfattande alternativet \u00e4r Redis-Enterprise. Detta \u00e4r en f\u00e4rdig l\u00f6sning med full teknisk support. Trots att det verkar perfekt ur tekniskt perspektiv passade det oss inte av ideologiska sk\u00e4l. <\/li>\n<li>Redis-cluster. Det finns inbyggt st\u00f6d f\u00f6r katastrof\u00e5terkoppling av master och sharding. Gr\u00e4nssnittet skiljer sig n\u00e4stan inte fr\u00e5n den vanliga versionen. Det ser lovande ut, vi kommer att diskutera fallgroparna senare.<\/li>\n<li>Tarantool, Memcache, Aerospike och andra. Alla dessa verktyg g\u00f6r ungef\u00e4r samma sak. Men var och en har sina brister. Vi har valt att inte l\u00e4gga alla \u00e4gg i en korg. Memcache och Tarantool anv\u00e4nder vi f\u00f6r andra uppgifter, och f\u00f6r att f\u00f6rutse, har vi haft fler problem med dem i v\u00e5r praktik.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"specifika-ispolzovaniya\">Anv\u00e4ndningsspecifika<\/h1>\n<p><\/p>\n<p>L\u00e5t oss titta p\u00e5 vilka uppgifter vi historiskt har l\u00f6st med Redis och vilken funktionalitet vi har anv\u00e4nt:<\/p>\n<p><\/p>\n<ul>\n<li>Cache inf\u00f6r f\u00f6rfr\u00e5gningar till externa tj\u00e4nster som 2GIS | Golang<br \/>\n<blockquote><p>GET SET MGET MSET &quot;SELECT DB&quot;\n<\/p><\/blockquote>\n<\/li>\n<li>Cache inf\u00f6r MYSQL | PHP<br \/>\n<blockquote><p>GET SET MGET MSET SCAN &quot;KEY BY PATTERN&quot; &quot;SELECT DB&quot;\n<\/p><\/blockquote>\n<\/li>\n<li>Huvudlagring f\u00f6r tj\u00e4nsten som arbetar med sessioner och koordinatorer f\u00f6r f\u00f6rare | Golang<br \/>\n<blockquote><p>GET SET MGET MSET &quot;SELECT DB&quot; &quot;ADD GEO KEY&quot; &quot;GET GEO KEY&quot; SCAN\n<\/p><\/blockquote>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Som ni ser, ingen avancerad matematik. Vad \u00e4r d\u00e5 sv\u00e5righeten? L\u00e5t oss g\u00e5 igenom varje metod separat.<\/p>\n<p><\/p>\n<p>Metod<br \/>\nBeskrivning<br \/>\nEgenskaper f\u00f6r Redis-kluster<br \/>\nL\u00f6sning<\/p>\n<p>GET SET<br \/>\nSkriva\/l\u00e4sa en nyckel<\/p>\n<p>MGET MSET<br \/>\nSkriva\/l\u00e4sa flera nycklar<br \/>\nNycklarna kommer att ligga p\u00e5 olika noder. F\u00e4rdiga bibliotek kan g\u00f6ra multi-operationer endast inom en nods gr\u00e4nser.<br \/>\nErs\u00e4tt MGET med pipeline av N GET operationer<\/p>\n<p>V\u00c4LJ DB<br \/>\nV\u00e4lja databasen som vi ska arbeta med<br \/>\nSt\u00f6der inte flera databaser<br \/>\nL\u00e4gg allt i en databas. L\u00e4gg till prefix till nycklarna.<\/p>\n<p>SCAN<br \/>\nG\u00e5 igenom alla nycklar i databasen<br \/>\nEftersom vi har en databas, \u00e4r det f\u00f6r kostsamt att g\u00e5 igenom alla nycklar i klustret.<br \/>\nUppr\u00e4tth\u00e5lla invariant inom en nyckel och g\u00f6ra HSCAN p\u00e5 denna nyckel. Eller helt avst\u00e5.<\/p>\n<p>GEO<br \/>\nOperationer med geo-nyckeln<br \/>\nGeo-nyckeln kan inte shardas<\/p>\n<p>NYCKEL EFTER M\u00d6NSTER<br \/>\nS\u00f6ka efter nyckel efter m\u00f6nster<br \/>\nEftersom vi har en databas, kommer vi att s\u00f6ka bland alla nycklar i klustret. F\u00f6r kostsamt.<br \/>\nAvst\u00e5 eller uppr\u00e4tth\u00e5lla invariant, som i fallet med SCAN.<\/p>\n<p><\/p>\n<h1 id=\"redis-vs-redis-cluster\">Redis vs Redis-kluster<\/h1>\n<p><\/p>\n<p>Vad f\u00f6rlorar vi och vad f\u00e5r vi genom att g\u00e5 \u00f6ver till kluster?<\/p>\n<p><\/p>\n<ul>\n<li>Nackdelar: vi f\u00f6rlorar funktionaliteten hos flera databaser. \n<ul>\n<li>Om vi vill lagra logiskt orelaterade data i ett kluster, m\u00e5ste vi g\u00f6ra l\u00f6sningar i form av prefix. <\/li>\n<li>Vi f\u00f6rlorar alla operationer \u00abper databas\u00bb, som SCAN, DBSIZE, CLEAR DB, etc.<\/li>\n<li>Multi-operationer har blivit betydligt sv\u00e5rare att genomf\u00f6ra, eftersom det kan kr\u00e4vas att man kontaktar flera noder.<\/li>\n<\/ul>\n<\/li>\n<li>F\u00f6rdelar: \n<ul>\n<li>H\u00f6g tillg\u00e4nglighet i form av n\u00f6dfunktionering av master.<\/li>\n<li>Sharding p\u00e5 Redis-sidan.<\/li>\n<li>\u00d6verf\u00f6ring av data mellan noder atom\u00e4rt och utan driftstopp.<\/li>\n<li>Tillfoga och omf\u00f6rdela resurser och belastningar utan driftstopp.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><em>Jag skulle dra slutsatsen att om du inte beh\u00f6ver s\u00e4kerst\u00e4lla en h\u00f6g niv\u00e5 av drifts\u00e4kerhet s\u00e5 \u00e4r det inte v\u00e4rt att flytta till ett kluster, eftersom det kan vara en icke-trivial uppgift. Men om man fr\u00e5n b\u00f6rjan v\u00e4ljer mellan en separat version och ett kluster, s\u00e5 b\u00f6r man v\u00e4lja kluster, eftersom det inte \u00e4r s\u00e4mre och dessutom avlastar en del av huvudv\u00e4rken.<\/em><\/p>\n<p><\/p>\n<h1 id=\"podgotovka-k-pereezdu\">F\u00f6rberedelse f\u00f6r flytt<\/h1>\n<p><\/p>\n<p>L\u00e5t oss b\u00f6rja med kraven f\u00f6r flytten:<\/p>\n<p><\/p>\n<ul>\n<li>Den b\u00f6r vara s\u00f6ml\u00f6s. En total stopp av servicen i 5 minuter \u00e4r oacceptabelt f\u00f6r oss.<\/li>\n<li>Den b\u00f6r vara s\u00e5 s\u00e4ker och gradvis som m\u00f6jligt. Vi vill ha viss kontroll \u00f6ver situationen. Att bara k\u00f6ra allt p\u00e5 en g\u00e5ng och be en b\u00f6n till \u00e5terst\u00e4llningsknappen \u00e4r inte n\u00e5got vi \u00f6nskar.<\/li>\n<li>Minimala datarf\u00f6rluster vid flytt. Vi f\u00f6rst\u00e5r att det blir mycket sv\u00e5rt att flytta atom\u00e4rt, s\u00e5 vi accepterar viss desynkronisering mellan data i vanlig och kluster Redis.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"obsluzhivanie-klastera\">Underh\u00e5ll av klustret<\/h1>\n<p><\/p>\n<p>Innan sj\u00e4lva flytten b\u00f6r vi t\u00e4nka p\u00e5 om vi kan underh\u00e5lla klustret:<\/p>\n<p><\/p>\n<ul>\n<li>Diagram. Vi anv\u00e4nder Prometheus och Grafana f\u00f6r att visa belastningen p\u00e5 processorer, anv\u00e4nda minne, antal kunder, antal operationer GET, SET, AUTH, etc.<\/li>\n<li>Expertis. F\u00f6rest\u00e4ll dig att det stora klustret kommer att vara ditt ansvar i morgon. Om det g\u00e5r s\u00f6nder kan ingen, f\u00f6rutom du, laga det. Om det b\u00f6rjar lagga kommer alla att komma till dig. Om resurser m\u00e5ste l\u00e4ggas till eller belastningen omf\u00f6rdelas \u2014 \u00e5terigen till dig. F\u00f6r att inte bli gr\u00e5h\u00e5rig vid 25 b\u00f6r man f\u00f6rutse dessa scenarier och testa i f\u00f6rv\u00e4g hur teknologin kommer att bete sig vid olika \u00e5tg\u00e4rder. Vi kommer att prata mer om detta i avsnittet \"Expertis\".<\/li>\n<li>\u00d6vervakning och notifieringar. N\u00e4r klustret g\u00e5r s\u00f6nder vill man veta det f\u00f6rst. H\u00e4r har vi n\u00f6jt oss med att notifiera att alla noder returnerar samma information om klustrets tillst\u00e5nd (ja, det kan vara annorlunda). Andra problem m\u00e4rks snabbare genom notifieringar fr\u00e5n Redis-klienttj\u00e4nster.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"pereezd\">Flytt<\/h1>\n<p><\/p>\n<p>Hur vi ska flytta:<\/p>\n<p><\/p>\n<ul>\n<li>F\u00f6rst m\u00e5ste vi f\u00f6rbereda biblioteket f\u00f6r att arbeta med klustret. Som grund f\u00f6r G\u043e-versionen anv\u00e4nde vi go-redis och gjorde n\u00e5gra justeringar. Vi implementerade Multi-metoder genom pipelines och justerade \u00e4ven reglerna f\u00f6r beg\u00e4rnings\u00e5terupprepning. Med PHP-versionen st\u00f6tte vi p\u00e5 fler problem, men i slut\u00e4ndan valde vi php-redis. Nyligen introducerade de klusterst\u00f6d, vilket vi anser ser bra ut.<\/li>\n<li>D\u00e4refter m\u00e5ste vi distribuera sj\u00e4lva klustret. Detta g\u00f6rs bokstavligen med tv\u00e5 kommandon baserat p\u00e5 konfigurationsfilen. Vi kommer att diskutera inst\u00e4llningen mer nedan.<\/li>\n<li>F\u00f6r en gradvis \u00f6verg\u00e5ng anv\u00e4nder vi dry-mode. Eftersom vi har tv\u00e5 versioner av biblioteket med identiskt gr\u00e4nssnitt (en f\u00f6r den vanliga versionen och en f\u00f6r klustret), \u00e4r det enkelt att skapa en wrapper som arbetar med den separata versionen och samtidigt duplicera alla beg\u00e4rningar till klustret, j\u00e4mf\u00f6ra svaren och logga avvikelserna (i v\u00e5rt fall i NewRelic). P\u00e5 s\u00e5 s\u00e4tt, \u00e4ven om kluster-versionen skulle g\u00e5 s\u00f6nder vid utrullningen, p\u00e5verkas v\u00e5r produktion inte. <\/li>\n<li>Genom att rulla ut klustret i dry-l\u00e4ge kan vi lugnt titta p\u00e5 diagrammet \u00f6ver svarens avvikelser. Om andelen fel l\u00e5ngsamt men s\u00e4kert r\u00f6r sig mot n\u00e5gon liten konstant, d\u00e5 \u00e4r allt bra. Varf\u00f6r finns det avvikelser \u00e4nd\u00e5? F\u00f6r att inl\u00e4sning i den separata versionen sker n\u00e5got tidigare \u00e4n i klustret, och p\u00e5 grund av mikrolag kan data skilja sig \u00e5t. Det \u00e5terst\u00e5r bara att kolla loggarna \u00f6ver avvikelserna, och om de alla \u00e4r f\u00f6rklarliga genom icke-atom\u00e4r inl\u00e4sning, kan vi g\u00e5 vidare.<\/li>\n<li>Nu kan vi v\u00e4xla dry-mode tillbaka. Vi kommer att l\u00e4sa och skriva fr\u00e5n klustret, och duplicera i den separata versionen. Varf\u00f6r? Under den kommande veckan vill vi observera klustrets arbete. Om det visar sig att det finns problem vid h\u00f6g belastning, eller om vi missade n\u00e5got, har vi alltid en n\u00f6dkoppling till den gamla koden och aktuella data tack vare dry-mode.<\/li>\n<li>Det \u00e5terst\u00e5r att st\u00e4nga av dry-mode och demontera den separata versionen. <\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"ekspertiza\">Expertis<\/h1>\n<p><\/p>\n<p>F\u00f6rst en kort \u00f6versikt av klusterets uppbyggnad.<\/p>\n<p><\/p>\n<p>F\u00f6rst och fr\u00e4mst \u00e4r Redis en key-value-lagring. Valfria str\u00e4ngar anv\u00e4nds som nycklar. V\u00e4rdena kan vara nummer, str\u00e4ngar och hela datastrukturer. Det finns m\u00e5nga av de senare, men f\u00f6r att f\u00f6rst\u00e5 den allm\u00e4nna uppbyggnaden \u00e4r detta inte viktigt.<br \/>\nDen n\u00e4sta abstraheringsniv\u00e5n efter nycklarna \u00e4r slots (SLOTS). Varje nyckel tillh\u00f6r en av 16 383 slots. Inom varje slot kan det finnas hur m\u00e5nga nycklar som helst. S\u00e5ledes delas alla nycklar in i 16 383 icke-\u00f6verlappande m\u00e4ngder.<br \/>\n<img decoding=\"async\" alt=\"Om \u00f6verg\u00e5ngen fr\u00e5n Redis till Redis-cluster\" src=\"\/wp-content\/uploads\/2020\/08\/a5e4be23381b42287f693e01d5d59a99.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vidare m\u00e5ste det finnas N master-noder i klustret. Varje nod kan representeras som en separat Redis-instans som vet allt om de andra noderna inom klustret. Varje master-nod inneh\u00e5ller ett visst antal slots. Varje slot tillh\u00f6r endast en master-nod. Alla slots m\u00e5ste f\u00f6rdelas mellan noderna. Om n\u00e5gra slots inte f\u00f6rdelas, kommer nycklarna som lagras i dem att vara otillg\u00e4ngliga. Det \u00e4r meningsfullt att k\u00f6ra varje master-nod p\u00e5 en separat logisk eller fysisk maskin. Det \u00e4r ocks\u00e5 v\u00e4rt att komma ih\u00e5g att varje nod arbetar endast p\u00e5 en k\u00e4rna, och om du vill k\u00f6ra flera instanser av Redis p\u00e5 en logisk maskin, se till att de k\u00f6rs p\u00e5 olika k\u00e4rnor (vi har inte provat detta, men i teorin ska allt fungera). I grund och botten s\u00e4kerst\u00e4ller master-noder vanlig sharding, och fler master-noder g\u00f6r det m\u00f6jligt att skala skriv- och l\u00e4sfr\u00e5gor.<\/p>\n<p><\/p>\n<p>Efter att alla nycklar har f\u00f6rdelats \u00f6ver slots och slots har spridits \u00f6ver master-noder, kan ett godtyckligt antal slave-noder l\u00e4ggas till varje master-nod. Inom varje s\u00e5dan \"master-slave\"-koppling kommer normal replikering att ske. Slavar beh\u00f6vs f\u00f6r att skala l\u00e4sf\u00f6rfr\u00e5gningar och f\u00f6r failover i h\u00e4ndelse av att master-noden g\u00e5r ner.<br \/>\n<img decoding=\"async\" alt=\"Om \u00f6verg\u00e5ngen fr\u00e5n Redis till Redis-cluster\" src=\"\/wp-content\/uploads\/2020\/08\/90feb7ef9dacb858d5f21edc214df14d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nu ska vi prata om operationer som vi b\u00f6r kunna utf\u00f6ra.<\/p>\n<p><\/p>\n<p>Vi kommer att interagera med systemet via Redis-CLI. Eftersom Redis inte har en enda ing\u00e5ngspunkt kan f\u00f6ljande operationer utf\u00f6ras p\u00e5 vilken nod som helst. I varje punkt p\u00e5pekar jag s\u00e4rskilt m\u00f6jligheten att utf\u00f6ra operationen under belastning.<\/p>\n<p><\/p>\n<ul>\n<li>Det f\u00f6rsta och viktigaste vi beh\u00f6ver \u00e4r operationen cluster nodes. Den returnerar status f\u00f6r klustret, visar listan \u00f6ver noder, deras roller, f\u00f6rdelning av slots etc. Ytterligare information kan erh\u00e5llas med cluster info och cluster slots.<\/li>\n<li>Det vore bra att kunna l\u00e4gga till och ta bort noder. F\u00f6r detta finns operationerna cluster meet och cluster forget. Observera att cluster forget m\u00e5ste till\u00e4mpas p\u00e5 VARJE nod, b\u00e5de p\u00e5 master- och replika-noder. Cluster meet beh\u00f6ver d\u00e4remot endast anropas p\u00e5 en nod. Denna skillnad kan vara f\u00f6rvirrande, s\u00e5 det \u00e4r b\u00e4st att l\u00e4ra sig om den innan man s\u00e4tter klustret i drift. Att l\u00e4gga till en nod g\u00f6rs s\u00e4kert under drift och p\u00e5verkar inte klustrets funktion (vilket \u00e4r logiskt). Om du planerar att ta bort en nod fr\u00e5n klustret, se till att det inte finns n\u00e5gra slots kvar (annars riskerar du att f\u00f6rlora \u00e5tkomsten till alla nycklar p\u00e5 den noden). Ta heller inte bort en master som har slavar, eftersom det annars kommer utf\u00f6ras on\u00f6dig r\u00f6stning f\u00f6r en ny master. Om det redan inte finns n\u00e5gra slots p\u00e5 noderna \u00e4r det ett litet problem, men varf\u00f6r ha on\u00f6diga val n\u00e4r man f\u00f6rst kan ta bort slavarna.<\/li>\n<li>Om det \u00e4r n\u00f6dv\u00e4ndigt att tv\u00e5ngsm\u00e4ssigt byta plats p\u00e5 master och slav, d\u00e5 \u00e4r kommandot cluster failover l\u00e4mpligt. N\u00e4r du anropar det under drift, m\u00e5ste man f\u00f6rst\u00e5 att under operationens utf\u00f6rande kommer mastern att vara otillg\u00e4nglig. Vanligtvis sker bytet p\u00e5 mindre \u00e4n en sekund, men det \u00e4r inte atom\u00e4rt. Du kan r\u00e4kna med att vissa f\u00f6rfr\u00e5gningar till mastern kommer att sluta med fel under den tiden.<\/li>\n<li>Innan du tar bort en nod fr\u00e5n klustret f\u00e5r det inte finnas n\u00e5gra slots kvar p\u00e5 den. Det \u00e4r b\u00e4ttre att omf\u00f6rdela dem med hj\u00e4lp av kommandot cluster reshard. Slots kommer att flyttas fr\u00e5n en master till en annan. Hela operationen kan ta flera minuter, beroende p\u00e5 m\u00e4ngden data som flyttas, men \u00f6verf\u00f6ringsprocessen \u00e4r s\u00e4ker och p\u00e5verkar inte klustrets funktion. P\u00e5 s\u00e5 s\u00e4tt kan alla data flyttas fr\u00e5n en nod till en annan under belastning utan att oroa sig f\u00f6r deras tillg\u00e4nglighet. Men det finns vissa nyanser. F\u00f6r det f\u00f6rsta \u00e4r datatransfer kopplad till viss belastning p\u00e5 b\u00e5de mottagnings- och avs\u00e4ndarnoden. Om mottagningsnoden redan \u00e4r kraftigt belastad p\u00e5 processorn, b\u00f6r du inte belasta den med nya data ocks\u00e5. F\u00f6r det andra, s\u00e5 snart det inte finns n\u00e5gra slots kvar p\u00e5 avs\u00e4ndarmastern, kommer alla dess slavar omedelbart att \u00f6verg\u00e5 till den master dit dessa slots har flyttats. Problemet \u00e4r att alla dessa slavar samtidigt kommer att vilja synkronisera data. Och du f\u00e5r tur om detta blir delvis, snarare \u00e4n fullst\u00e4ndig synkronisering. T\u00e4nk p\u00e5 detta och kombinera operationerna f\u00f6r att flytta slots och st\u00e4nga\/\u00f6verf\u00f6ra slavar. Eller hoppas att du har tillr\u00e4ckligt med marginal.<\/li>\n<li>Vad ska man g\u00f6ra om du vid \u00f6verf\u00f6ringen uppt\u00e4cker att du f\u00f6rlorat n\u00e5gra slots? Jag hoppas att detta problem inte drabbar dig, men om det skulle h\u00e4nda finns operationen cluster fix. Den kommer mer eller mindre att slumpm\u00e4ssigt f\u00f6rdela slots mellan noderna. Jag rekommenderar att du kontrollerar dess funktion efter att ha tagit bort en nod med f\u00f6rdelade slots fr\u00e5n klustret. Eftersom data i de odistribuerade slots redan \u00e4r otillg\u00e4ngliga \u00e4r det f\u00f6r sent att oroa sig f\u00f6r tillg\u00e4ngligheten av dessa slots. Samtidigt kommer operationen inte att p\u00e5verka de distribuerade slots.<\/li>\n<li>En annan anv\u00e4ndbar operation \u00e4r monitor. Den l\u00e5ter dig se en lista \u00f6ver alla f\u00f6rfr\u00e5gningar som g\u00f6rs till noden i realtid. Dessutom kan du g\u00f6ra en grep p\u00e5 den och ta reda p\u00e5 om det finns \u00f6nskad trafik.<\/li>\n<\/ul>\n<p><\/p>\n<p>Det \u00e4r ocks\u00e5 v\u00e4rt att n\u00e4mna proceduren f\u00f6r failover av master-noden. Kort sagt, den finns, och i min mening fungerar den utm\u00e4rkt. Men man ska inte tro att om man drar ut kontakten ur v\u00e4ggen p\u00e5 en maskin med master-nod, s\u00e5 kommer Redis omedelbart att byta och klienterna inte kommer att m\u00e4rka n\u00e5gon nedtid. Utifr\u00e5n min erfarenhet tar det n\u00e5gra sekunder f\u00f6r bytet att ske. Under denna tid kommer en del data att vara otillg\u00e4nglig: otillg\u00e4ngligheten hos master uppt\u00e4ckts, noderna r\u00f6star p\u00e5 en ny, slavar byts, data synkroniseras. Det b\u00e4sta s\u00e4ttet att sj\u00e4lv s\u00e4kerst\u00e4lla att systemet fungerar \u00e4r att genomf\u00f6ra en lokal \u00f6vning. S\u00e4tt upp en kluster p\u00e5 din laptop, ge en minimal belastning, simulera ett fall (till exempel genom att blockera portar), och bed\u00f6m bytestiden. Enligt min \u00e5sikt, bara genom att leka med detta i ett par dagar kan man vara s\u00e4ker p\u00e5 att teknologin fungerar. Alternativt kan man hoppas att mjukvaran som anv\u00e4nds av h\u00e4lften av internet s\u00e4kert fungerar.<\/p>\n<p><\/p>\n<h1 id=\"konfiguraciya\">Konfiguration<\/h1>\n<p><\/p>\n<p>Vanligtvis \u00e4r konfigurationen det f\u00f6rsta som beh\u00f6vs f\u00f6r att b\u00f6rja arbeta med verktyget. N\u00e4r allt fungerar vill man inte g\u00e4rna r\u00f6ra konfigurationen. Det kr\u00e4vs en del anstr\u00e4ngningar f\u00f6r att tvinga sig sj\u00e4lv att g\u00e5 tillbaka till inst\u00e4llningarna och noggrant g\u00e5 igenom dem. Enligt min minne har vi haft minst tv\u00e5 allvarliga misstag p\u00e5 grund av bristande uppm\u00e4rksamhet kring konfigurationen. Var s\u00e4rskilt uppm\u00e4rksam p\u00e5 f\u00f6ljande punkter:<\/p>\n<p><\/p>\n<ul>\n<li>timeout 0<br \/>\n<em>Tiden efter vilken inaktiva anslutningar st\u00e4ngs (i sekunder). 0 - ingen st\u00e4ngs.<\/em><br \/>\nInte varje bibliotek vi anv\u00e4nder kunde st\u00e4nga anslutningar korrekt. Genom att st\u00e4nga av den h\u00e4r inst\u00e4llningen riskerar vi att n\u00e5 gr\u00e4nsen f\u00f6r antalet klienter. \u00c5 andra sidan, om det finns ett s\u00e5dant problem, s\u00e5 d\u00f6ljer den automatiska nedkopplingen av f\u00f6rlorade anslutningar det, och vi kanske inte l\u00e4gger m\u00e4rke till det. Dessutom b\u00f6r denna inst\u00e4llning inte aktiveras vid anv\u00e4ndning av persistenta anslutningar.<\/li>\n<li>Save x y &amp; appendonly yes<br \/>\n<em>Spara RDB-snapshot.<\/em><br \/>\nVi kommer att diskutera RDB\/AOF-problemen mer ing\u00e5ende nedan.<\/li>\n<li>stop-writes-on-bgsave-error no &amp; slave-serve-stale-data yes<br \/>\n<em>Om det \u00e4r aktiverat, kommer master att sluta ta emot beg\u00e4rningar p\u00e5 f\u00f6r\u00e4ndringar vid ett fel p\u00e5 RDB-snapshotet. Om anslutningen till master f\u00f6rloras kan slav forts\u00e4tta att svara p\u00e5 beg\u00e4rningar (yes). Eller sluta svara (no).<\/em><br \/>\nVi \u00e4r inte n\u00f6jda med att Redis f\u00f6rvandlas till en pumpa.<\/li>\n<li>repl-ping-slave-period 5<br \/>\n<em>Efter denna tidsperiod kommer vi att b\u00f6rja oroa oss f\u00f6r att m\u00e4staren har g\u00e5tt s\u00f6nder och att det \u00e4r dags att genomf\u00f6ra en failover.<\/em><br \/>\nVi m\u00e5ste manuellt hitta balansen mellan falska larm och failover. I v\u00e5r erfarenhet \u00e4r detta 5 sekunder.<\/li>\n<li>repl-backlog-size 1024mb &amp; epl-backlog-ttl 0<br \/>\n<em>S\u00e5 mycket data kan vi lagra i bufferten f\u00f6r en misslyckad replik. Om bufferten tar slut, m\u00e5ste vi synkronisera helt.<\/em><br \/>\nErfarenheten visar att det \u00e4r b\u00e4ttre att s\u00e4tta ett h\u00f6gre v\u00e4rde. Det finns m\u00e5nga anledningar till varf\u00f6r en replik kan b\u00f6rja halka efter. Om den halkar efter, s\u00e5 \u00e4r det sannolikt att din m\u00e4stare redan har sv\u00e5rt att hantera, och fullst\u00e4ndig synkronisering blir den sista droppen.<\/li>\n<li>maxclients 10000<br \/>\n<em>Det maximala antalet samtidiga klienter.<\/em><br \/>\nEnligt v\u00e5r erfarenhet \u00e4r det b\u00e4ttre att s\u00e4tta ett h\u00f6gre v\u00e4rde. Redis klarar sig utm\u00e4rkt med 10 000 anslutningar. Se bara till att det finns tillr\u00e4ckligt med sockets i systemet. <\/li>\n<li>maxmemory-policy volatile-ttl<br \/>\n<em>Regeln f\u00f6r hur nycklar tas bort n\u00e4r minnesgr\u00e4nsen n\u00e5s.<\/em><br \/>\nDet viktiga h\u00e4r \u00e4r inte sj\u00e4lva regeln, utan f\u00f6rst\u00e5elsen f\u00f6r hur detta kommer att ske. Redis kan ber\u00f6mmas f\u00f6r sin f\u00f6rm\u00e5ga att fungera som det ska n\u00e4r minnesgr\u00e4nsen n\u00e5s. <\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"problemy-rdb-i-aof\">Problem med RDB och AOF<\/h1>\n<p><\/p>\n<p>\u00c4ven om Redis sj\u00e4lv lagrar all information i RAM, finns det \u00e4ven mekanismer f\u00f6r att spara data p\u00e5 disk. Specifikt finns det tre mekanismer:<\/p>\n<p><\/p>\n<ul>\n<li>RDB-snapshot \u2014 en komplett avbildning av all data. St\u00e4lls in med hj\u00e4lp av konfigurationen SAVE X Y och l\u00e4ses som \"Spara en fullst\u00e4ndig snapshot av all data var X sekunder, om minst Y nycklar har \u00e4ndrats.\"<\/li>\n<li>Append-only file \u2014 en lista \u00f6ver operationer i den ordning de genomf\u00f6rdes. L\u00e4gger till nya inkommande operationer i filen var X sekunder eller efter var Y operationer.<\/li>\n<li>RDB och AOF \u2014 en kombination av de tv\u00e5 tidigare.<\/li>\n<\/ul>\n<p><\/p>\n<p>Alla metoder har sina f\u00f6rdelar och nackdelar, jag kommer inte att lista dem alla, utan endast p\u00e5peka de som, enligt mig, inte \u00e4r s\u00e5 uppenbara.<\/p>\n<p><\/p>\n<p>F\u00f6r det f\u00f6rsta, att spara en RDB-snapshot kr\u00e4ver att FORK anropas. Om det finns mycket data kan detta frysa hela Redis under en period fr\u00e5n n\u00e5gra millisekunder till en sekund. Dessutom beh\u00f6ver systemet reservera minne f\u00f6r en s\u00e5dan snapshot, vilket leder till behovet av att h\u00e5lla ett dubbelt lager av RAM p\u00e5 den logiska maskinen: om 8 GB tilldelas Redis, m\u00e5ste det finnas 16 GB tillg\u00e4ngligt p\u00e5 virtuella maskinen.<\/p>\n<p><\/p>\n<p>F\u00f6r det andra finns det problem med partiell synkronisering. I AOF-l\u00e4ge kan en fullst\u00e4ndig synkronisering ske ist\u00e4llet f\u00f6r partiell vid \u00e5teranslutning av slaven. Jag kunde inte f\u00f6rst\u00e5 varf\u00f6r detta h\u00e4nder, men det \u00e4r v\u00e4rt att komma ih\u00e5g.<\/p>\n<p><\/p>\n<p>Dessa tv\u00e5 punkter f\u00e5r en att fundera p\u00e5 om vi verkligen beh\u00f6ver dessa data p\u00e5 disk, om de redan dupliceras av slavarna. Data kan endast g\u00e5 f\u00f6rlorade om alla slavar g\u00e5r s\u00f6nder, vilket \u00e4r ett problem p\u00e5 niv\u00e5 \"brand i datacentret\". Som en kompromiss kan man f\u00f6resl\u00e5 att endast spara data p\u00e5 slavarna, men i s\u00e5 fall m\u00e5ste man s\u00e4kerst\u00e4lla att dessa slavar aldrig blir master vid en katastrof\u00e5terst\u00e4llning (f\u00f6r detta finns det inst\u00e4llningar f\u00f6r slavarnas prioritet i deras konfiguration). Vi \u00f6verv\u00e4ger i varje enskilt fall om det \u00e4r n\u00f6dv\u00e4ndigt att spara data p\u00e5 disk, och oftast svarar vi \"nej\".<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Slutsats<\/h1>\n<p><\/p>\n<p>Som avslutning hoppas jag att jag har kunnat ge en allm\u00e4n \u00f6versikt av hur redis-cluster fungerar till de som aldrig har h\u00f6rt talas om det, och att jag \u00e4ven har uppm\u00e4rksammat vissa oklara punkter f\u00f6r de som har anv\u00e4nt det l\u00e4nge.<br \/>\nTack f\u00f6r er tid, och som vanligt \u00e4r kommentarer i \u00e4mnet alltid v\u00e4lkomna.<\/p>\n<p>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/o-pereezde-s-redis-na-redis-cluster\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47Om att flytta fr\u00e5n Redis till Redis-cluster | ProHoster","description":"N\u00e4r man kommer till en produkt som utvecklas mer.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/o-pereezde-s-redis-na-redis-cluster","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/91846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=91846"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/91846\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/91847"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=91846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=91846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=91846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}