{"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\/de\/blog\/administrirovanie\/o-pereezde-s-redis-na-redis-cluster","title":{"rendered":"\u00dcber den Umzug von Redis zu Redis-Cluster","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\u00dcber den Umzug von Redis zu Redis-Cluster\" src=\"\/wp-content\/uploads\/2020\/08\/ea8bc47f73ef3b06ccfdf94d323592bf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenn man ein Produkt betrachtet, das seit \u00fcber einem Jahrzehnt entwickelt wird, ist es nicht \u00fcberraschend, veraltete Technologien darin zu finden. Aber was, wenn Sie in sechs Monaten eine zehnmal h\u00f6here Last halten m\u00fcssen, w\u00e4hrend die Kosten f\u00fcr Ausf\u00e4lle in die Hunderte steigen? In diesem Fall ben\u00f6tigen Sie einen erfahrenen Highload Engineer. Doch da es keinen gibt, wurde die Probleml\u00f6sung mir anvertraut. Im ersten Teil des Artikels erkl\u00e4re ich, wie wir von Redis auf Redis-Cluster umgestiegen sind, und im zweiten Teil gebe ich Tipps, wie man einen Cluster sinnvoll nutzt und worauf man bei Betrieb und Wartung achten sollte.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"vybor-tehnologii\">Technologieauswahl<\/h1>\n<p><\/p>\n<p>Ist <em>ein separates Redis<\/em> (standalone redis) in einer Konfiguration mit 1 Master und N Slave-Instanzen wirklich so schlecht? Warum bezeichne ich es als veraltete Technologie?<\/p>\n<p><\/p>\n<blockquote><p>Nein, Redis ist nicht so schlecht... Allerdings gibt es einige M\u00e4ngel, die man nicht ignorieren sollte.<\/p><\/blockquote>\n<p><\/p>\n<ul>\n<li>\n<p>Erstens unterst\u00fctzt Redis keine Mechanismen zur Notfallwiederherstellung nach dem Ausfall des Masters. Um dieses Problem zu l\u00f6sen, haben wir eine Konfiguration mit automatischem VIP-Umschalten auf den neuen Master verwendet, indem wir die Rolle eines der Slaves gewechselt und die anderen umgeschaltet haben. Dieser Mechanismus funktionierte, konnte aber nicht als zuverl\u00e4ssige L\u00f6sung bezeichnet werden. Erstens gab es Fehlalarme, und zweitens war es eine einmalige L\u00f6sung, nach der man manuelle Schritte zur R\u00fcckstellung durchf\u00fchren musste.<\/p>\n<p>\n<\/li>\n<li>\n<p>Zweitens f\u00fchrte die Existenz nur eines Masters zu einem Sharding-Problem. Man musste mehrere unabh\u00e4ngige Cluster mit \u201e1 Master und N Slaves\u201c erstellen, dann die Datenbanken manuell auf diese Maschinen verteilen und hoffen, dass morgen eine der Datenbanken nicht so anw\u00e4chst, dass sie auf eine separate Instanz ausgelagert werden muss.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Welche Optionen gibt es?<\/p>\n<p><\/p>\n<ul>\n<li>Die teuerste und umfassendste L\u00f6sung ist Redis-Enterprise. Dies ist eine Boxl\u00f6sung mit vollem technischem Support. Obwohl sie aus technischer Sicht perfekt aussieht, ist sie aus ideologischen Gr\u00fcnden f\u00fcr uns nicht geeignet. <\/li>\n<li>Redis-Cluster. Aus der Box gibt es Unterst\u00fctzung f\u00fcr das Failover von Master und Sharding. Die Benutzeroberfl\u00e4che unterscheidet sich kaum von der normalen Version. Sieht vielversprechend aus, auf die Fallstricke kommen wir sp\u00e4ter zu sprechen.<\/li>\n<li>Tarantool, Memcache, Aerospike und andere. All diese Tools erf\u00fcllen ungef\u00e4hr die gleiche Funktion. Aber jedes hat seine eigenen Nachteile. Wir haben beschlossen, nicht alle Eier in einen Korb zu legen. Memcache und Tarantool nutzen wir f\u00fcr andere Aufgaben, und um vorzugreifen, kann ich sagen, dass wir in der Praxis mehr Probleme mit ihnen hatten.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"specifika-ispolzovaniya\">Spezifik der Nutzung<\/h1>\n<p><\/p>\n<p>Schauen wir uns an, welche Aufgaben wir historisch mit Redis gel\u00f6st haben und welche Funktionalit\u00e4ten wir genutzt haben:<\/p>\n<p><\/p>\n<ul>\n<li>Cache vor Anfragen an externe Dienste wie 2GIS | Golang<br \/>\n<blockquote><p>GET SET MGET MSET &quot;SELECT DB&quot;\n<\/p><\/blockquote>\n<\/li>\n<li>Cache vor 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>Hauptspeicher f\u00fcr den Dienst zur Verwaltung von Sitzungen und Standorten von Fahrern | 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>Wie Sie sehen, ist keine h\u00f6here Mathematik notwendig. Was ist also die Schwierigkeit? Lassen Sie uns jeden Ansatz einzeln betrachten.<\/p>\n<p><\/p>\n<p>Methode<br \/>\nBeschreibung<br \/>\nBesonderheiten von Redis-Cluster<br \/>\nL\u00f6sung<\/p>\n<p>GET SET<br \/>\nSchreiben\/Lesen eines Schl\u00fcssels<\/p>\n<p>MGET MSET<br \/>\nSchreiben\/Lesen mehrerer Schl\u00fcssel<br \/>\nDie Schl\u00fcssel werden auf verschiedenen Knoten liegen. Fertige Bibliotheken k\u00f6nnen Multi-Operationen nur innerhalb eines Knotens durchf\u00fchren.<br \/>\nMGET durch eine Pipeline aus N GET-Operationen ersetzen.<\/p>\n<p>Datenbank ausw\u00e4hlen.<br \/>\nW\u00e4hlen Sie die Datenbank aus, mit der wir arbeiten werden.<br \/>\nUnterst\u00fctzt keine mehreren Datenbanken.<br \/>\nAlles in einer Datenbank speichern. Pr\u00e4fixe zu den Schl\u00fcsseln hinzuf\u00fcgen.<\/p>\n<p>SCAN<br \/>\nAlle Schl\u00fcssel in der Datenbank durchgehen.<br \/>\nDa wir eine Datenbank haben, ist es zu kostspielig, alle Schl\u00fcssel im Cluster zu durchlaufen.<br \/>\nEin Invarianz innerhalb eines Schl\u00fcssels unterst\u00fctzen und HSCAN \u00fcber diesen Schl\u00fcssel durchf\u00fchren. Oder ganz darauf verzichten.<\/p>\n<p>GEO.<br \/>\nOperationen mit geografischen Schl\u00fcsseln.<br \/>\nGeoschl\u00fcssel werden nicht sharded.<\/p>\n<p>KEY BY PATTERN.<br \/>\nSchl\u00fcssel nach Muster suchen.<br \/>\nDa wir eine Datenbank haben, werden wir in allen Schl\u00fcsseln im Cluster suchen. Zu kostspielig.<br \/>\nAufgeben oder Invarianz unterst\u00fctzen, wie im Fall von SCAN.<\/p>\n<p><\/p>\n<h1 id=\"redis-vs-redis-cluster\">Redis vs Redis-Cluster.<\/h1>\n<p><\/p>\n<p>Was verlieren wir und was gewinnen wir bei der Umstellung auf einen Cluster?<\/p>\n<p><\/p>\n<ul>\n<li>Nachteile: Verlust der Funktionalit\u00e4t mehrerer Datenbanken. \n<ul>\n<li>Wenn wir logisch nicht zusammenh\u00e4ngende Daten in einem Cluster speichern m\u00f6chten, m\u00fcssen wir mit Pr\u00e4fixen arbeiten. <\/li>\n<li>Wir verlieren alle Operationen \u201epro Datenbank\u201c, wie SCAN, DBSIZE, CLEAR DB usw.<\/li>\n<li>Multi-Operationen sind erheblich komplexer in der Umsetzung geworden, da m\u00f6glicherweise mehrere Knoten angesprochen werden m\u00fcssen.<\/li>\n<\/ul>\n<\/li>\n<li>Vorteile: \n<ul>\n<li>Ausfallsicherheit in Form von Master-Failover.<\/li>\n<li>Sharding auf der Redis-Seite.<\/li>\n<li>Daten\u00fcbertragung zwischen Knoten atomar und ohne Ausfallzeiten.<\/li>\n<li>Hinzuf\u00fcgen und Umverteilung von Kapazit\u00e4ten und Lasten ohne Ausfallzeiten.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><em>Ich w\u00fcrde schlussfolgern, dass der Umzug zu einem Cluster nicht notwendig ist, wenn Sie kein hohes Ma\u00df an Ausfallsicherheit gew\u00e4hrleisten m\u00fcssen, da dies eine komplexe Aufgabe sein kann. Aber wenn man von Anfang an zwischen einer Einzelversion und einer Cluster-Version w\u00e4hlen muss, sollte man das Cluster w\u00e4hlen, da es nicht schlechter ist und zudem einen Teil des Kopfzerbrechens von Ihnen abnimmt.<\/em><\/p>\n<p><\/p>\n<h1 id=\"podgotovka-k-pereezdu\">Vorbereitung auf den Umzug<\/h1>\n<p><\/p>\n<p>Lassen Sie uns mit den Anforderungen f\u00fcr den Umzug beginnen:<\/p>\n<p><\/p>\n<ul>\n<li>Er muss nahtlos sein. Eine vollst\u00e4ndige Dienstunterbrechung von 5 Minuten ist f\u00fcr uns nicht akzeptabel.<\/li>\n<li>Er sollte so sicher und schrittweise wie m\u00f6glich sein. Wir m\u00f6chten eine gewisse Kontrolle \u00fcber die Situation haben. Wir wollen nicht alles auf einmal umschalten und auf einen R\u00fcckroll-Knopf beten.<\/li>\n<li>Minimale Datenverluste beim Umzug. Wir verstehen, dass ein atomarer Umzug sehr schwierig sein wird, daher erlauben wir eine gewisse Desynchronisation zwischen den Daten in Redis und im Cluster.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"obsluzhivanie-klastera\">Clusterwartung<\/h1>\n<p><\/p>\n<p>Vor dem Umzug sollten wir uns fragen, ob wir das Cluster unterst\u00fctzen k\u00f6nnen:<\/p>\n<p><\/p>\n<ul>\n<li>Diagramme. Wir verwenden Prometheus und Grafana f\u00fcr Diagramme zur CPU-Auslastung, genutzten Speicher, Anzahl der Clients, Anzahl der GET-, SET-, AUTH-Operationen usw.<\/li>\n<li>Expertise. Stellen Sie sich vor, morgen sind Sie verantwortlich f\u00fcr ein riesiges Cluster. Wenn es ausf\u00e4llt, kann es niemand au\u00dfer Ihnen reparieren. Wenn es anf\u00e4ngt, zu haken, laufen alle zu Ihnen. Wenn Ressourcen hinzugef\u00fcgt oder die Last umverteilt werden muss, kommen sie wieder zu Ihnen. Um in den entscheidenden Momenten nicht nerv\u00f6s zu werden, ist es ratsam, solche Szenarien im Voraus zu bedenken und zu testen, wie sich die Technologie bei bestimmten Ma\u00dfnahmen verh\u00e4lt. Lassen Sie uns in dem Abschnitt 'Expertise' n\u00e4her darauf eingehen.<\/li>\n<li>\u00dcberwachungen und Benachrichtigungen. Wenn der Cluster ausf\u00e4llt, m\u00f6chte man als Erster Bescheid wissen. Hier haben wir uns darauf beschr\u00e4nkt, Benachrichtigungen zu senden, wenn alle Knoten die gleichen Informationen \u00fcber den Zustand des Clusters zur\u00fcckgeben (ja, es kann auch anders sein). Andere Probleme lassen sich schneller anhand der Benachrichtigungen der Redis-Clientdienste erkennen.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"pereezd\">Umzug<\/h1>\n<p><\/p>\n<p>Wie wir umziehen werden:<\/p>\n<p><\/p>\n<ul>\n<li>Zun\u00e4chst muss die Bibliothek zur Arbeit mit dem Cluster vorbereitet werden. Als Grundlage f\u00fcr die Version in Go haben wir go-redis genommen und etwas angepasst. Multi-Methoden wurden \u00fcber Pipelines realisiert, und auch die Regeln zur Wiederholung von Anfragen haben wir leicht \u00fcberarbeitet. Bei der Version f\u00fcr PHP gab es mehr Probleme, aber schlie\u00dflich haben wir uns f\u00fcr php-redis entschieden. K\u00fcrzlich wurde die Clusterunterst\u00fctzung integriert, und wir finden, sie sieht gut aus.<\/li>\n<li>Als n\u00e4chstes muss der Cluster selbst eingerichtet werden. Dies geschieht w\u00f6rtlich mit zwei Befehlen auf Basis einer Konfigurationsdatei. Details zur Konfiguration besprechen wir weiter unten.<\/li>\n<li>F\u00fcr einen schrittweisen Umstieg verwenden wir den Dry-Mode. Da wir zwei Versionen der Bibliothek mit identischem Interface haben (eine f\u00fcr die Standardversion, die andere f\u00fcr den Cluster), ist es nicht schwer, eine Wrapper-Funktion zu erstellen, die mit der einzelnen Version arbeitet und gleichzeitig alle Anfragen an den Cluster dupliziert, die Antworten vergleicht und Abweichungen in die Logs (in unserem Fall nach NewRelic) schreibt. So wird selbst, wenn die Cluster-Version w\u00e4hrend des Rollouts ausf\u00e4llt, unsere Produktion nicht betroffen sein. <\/li>\n<li>Bei der Bereitstellung des Clusters im Dry-Mode k\u00f6nnen wir ruhig auf das Diagramm der Antwortabweichungen schauen. Wenn der Fehleranteil langsam, aber sicher zu einer kleinen Konstante tendiert, ist alles in Ordnung. Warum gibt es dennoch Abweichungen? Weil der Eintrag in der einzelnen Version etwas fr\u00fcher erfolgt als im Cluster, und durch die Mikrolaten k\u00f6nnen die Daten voneinander abweichen. Wir m\u00fcssen nur noch die Logs der Abweichungen \u00fcberpr\u00fcfen, und wenn alle erkl\u00e4rbar sind durch die Nicht-Atomarit\u00e4t des Eintrags, k\u00f6nnen wir weitermachen.<\/li>\n<li>Jetzt kann der Dry-Mode umgekehrt werden. Wir werden aus dem Cluster schreiben und lesen und in eine separate Version duplizieren. Warum? In der kommenden Woche m\u00f6chten wir die Leistung des Clusters beobachten. Falls sich herausstellt, dass es bei hoher Last Probleme gibt oder wir etwas \u00fcbersehen haben, haben wir immer einen Notfall-Rollback auf den alten Code und aktuelle Daten dank des Dry-Modes.<\/li>\n<li>Es bleibt nur noch, den Dry-Mode auszuschalten und die separate Version abzubauen. <\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"ekspertiza\">Expertise<\/h1>\n<p><\/p>\n<p>Zun\u00e4chst eine kurze Einf\u00fchrung in die Struktur des Clusters.<\/p>\n<p><\/p>\n<p>Redis ist in erster Linie ein Key-Value-Speicher. Beliebige Strings werden als Schl\u00fcssel verwendet. Als Werte k\u00f6nnen Zahlen, Strings und ganze Strukturen verwendet werden. Letztere sind zahlreich, aber f\u00fcr das allgemeine Verst\u00e4ndnis ist das nicht wichtig.<br \/>\nDie n\u00e4chste Abstraktionsebene nach den Schl\u00fcsseln sind die Slots (SLOTS). Jeder Schl\u00fcssel geh\u00f6rt zu einem der 16.383 Slots. Innerhalb jedes Slots k\u00f6nnen beliebig viele Schl\u00fcssel vorhanden sein. So entstehen 16.383 nicht \u00fcberlappende Mengen von Schl\u00fcsseln.<br \/>\n<img decoding=\"async\" alt=\"\u00dcber den Umzug von Redis zu Redis-Cluster\" src=\"\/wp-content\/uploads\/2020\/08\/a5e4be23381b42287f693e01d5d59a99.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Im Cluster m\u00fcssen N Master-Knoten vorhanden sein. Jeden Knoten kann man als eine separate Redis-Instanz betrachten, die alles \u00fcber die anderen Knoten im Cluster wei\u00df. Jeder Master-Knoten enth\u00e4lt eine bestimmte Anzahl von Slots. Jeder Slot geh\u00f6rt nur zu einem Master-Knoten. Alle Slots m\u00fcssen auf die Knoten verteilt werden. Wenn einige Slots nicht zugeteilt sind, sind die darin gespeicherten Schl\u00fcssel nicht verf\u00fcgbar. Es ist sinnvoll, jeden Master-Knoten auf einer separaten logischen oder physischen Maschine zu betreiben. Zudem ist zu beachten, dass jeder Knoten nur auf einem Kern arbeitet. Wenn Sie mehrere Redis-Instanzen auf einer logischen Maschine ausf\u00fchren m\u00f6chten, stellen Sie sicher, dass sie auf unterschiedlichen Kernen laufen (wir haben das nicht getestet, aber theoretisch sollte alles funktionieren). Im Wesentlichen bieten Master-Knoten ein normales Sharding, und eine gr\u00f6\u00dfere Anzahl von Master-Knoten erm\u00f6glicht die Skalierung von Lese- und Schreibanfragen.<\/p>\n<p><\/p>\n<p>Nachdem alle Schl\u00fcssel auf die Slots verteilt und die Slots auf die Master-Nodes verteilt sind, kann jeder Master-Node eine beliebige Anzahl von Slave-Nodes hinzugef\u00fcgt werden. Innerhalb jeder solchen \u201eMaster-Slave\u201c-Verbindung wird die normale Replikation arbeiten. Slaves sind f\u00fcr das Skalieren von Leseanfragen und f\u00fcr das Failover im Falle eines Ausfalls des Masters erforderlich.<br \/>\n<img decoding=\"async\" alt=\"\u00dcber den Umzug von Redis zu Redis-Cluster\" src=\"\/wp-content\/uploads\/2020\/08\/90feb7ef9dacb858d5f21edc214df14d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jetzt sprechen wir \u00fcber die Operationen, die wir besser beherrschen sollten.<\/p>\n<p><\/p>\n<p>Wir werden \u00fcber Redis-CLI auf das System zugreifen. Da Redis keinen einheitlichen Einstiegspunkt hat, k\u00f6nnen die folgenden Operationen auf jeder der Nodes ausgef\u00fchrt werden. In jedem Punkt weise ich speziell auf die M\u00f6glichkeit hin, die Operation unter Last auszuf\u00fchren.<\/p>\n<p><\/p>\n<ul>\n<li>Das Erste und Haupts\u00e4chliche, was wir ben\u00f6tigen: die Operation cluster nodes. Sie gibt den Zustand des Clusters zur\u00fcck, zeigt die Liste der Nodes, ihre Rollen, die Verteilung der Slots usw. Weitere Informationen k\u00f6nnen \u00fcber cluster info und cluster slots abgerufen werden.<\/li>\n<li>Es w\u00e4re gut, Nodes hinzuf\u00fcgen und entfernen zu k\u00f6nnen. Daf\u00fcr gibt es die Operationen cluster meet und cluster forget. Beachten Sie, dass cluster forget auf JEDER Node, sowohl auf Master- als auch auf Replica-Nodes, angewandt werden muss. W\u00e4hrend f\u00fcr cluster meet nur ein Aufruf auf einer Node erforderlich ist. Diese Unterscheidung kann verwirrend sein, deshalb ist es besser, diese Informationen zu kennen, bevor Sie den Cluster in Betrieb nehmen. Das Hinzuf\u00fcgen einer Node erfolgt sicher im Betrieb und hat keinen Einfluss auf die Funktionsweise des Clusters (was logisch ist). Wenn Sie jedoch eine Node aus dem Cluster entfernen m\u00f6chten, sollten Sie sicherstellen, dass auf ihr keine Slots mehr vorhanden sind (ansonsten riskieren Sie den Verlust des Zugriffs auf alle Schl\u00fcssel auf dieser Node). Entfernen Sie au\u00dferdem nicht den Master, der Slave-Nodes hat, da sonst eine unn\u00f6tige Wahl f\u00fcr einen neuen Master stattfinden w\u00fcrde. Wenn auf den Nodes bereits keine Slots mehr vorhanden sind, ist das kein gro\u00dfes Problem, aber warum sollten wir unn\u00f6tige Entscheidungen treffen, wenn wir zuerst die Slaves entfernen k\u00f6nnen?<\/li>\n<li>Wenn Sie Master und Slave zwangsweise umschalten m\u00fcssen, verwenden Sie den Befehl cluster failover. Bei der Ausf\u00fchrung sollten Sie beachten, dass der Master w\u00e4hrend der Operation nicht verf\u00fcgbar ist. Normalerweise erfolgt der Wechsel in weniger als einer Sekunde, aber nicht atomar. Sie k\u00f6nnen davon ausgehen, dass w\u00e4hrend dieser Zeit einige Anfragen an den Master mit einem Fehler enden.<\/li>\n<li>Bevor Sie eine Node aus dem Cluster entfernen, d\u00fcrfen keine Slots mehr vorhanden sein. Es ist besser, sie mit dem Befehl cluster reshard neu zu verteilen. Die Slots werden von einem Master auf einen anderen verschoben. Der gesamte Vorgang kann einige Minuten in Anspruch nehmen, abh\u00e4ngig vom Umfang der zu \u00fcbertragenden Daten; der Transferprozess ist jedoch sicher und beeintr\u00e4chtigt die Funktionalit\u00e4t des Clusters nicht. So k\u00f6nnen alle Daten unter Last von einer Node auf eine andere \u00fcbertragen werden, ohne sich um ihre Verf\u00fcgbarkeit sorgen zu m\u00fcssen. Es gibt jedoch einige Feinheiten. Erstens ist der Datentransfer mit einer gewissen Belastung f\u00fcr die empfangende und sendende Node verbunden. Wenn die empfangende Node bereits stark ausgelastet ist, sollten Sie sie nicht zus\u00e4tzlich mit neuen Daten belasten. Zweitens, sobald auf dem sendenden Master kein Slot mehr vorhanden ist, gehen alle seine Slaves sofort zu dem Master, auf den diese Slots \u00fcbertragen wurden. Das Problem ist, dass all diese Slaves gleichzeitig versuchen werden, die Daten zu synchronisieren. Gl\u00fccklicherweise wird es sich dabei m\u00f6glicherweise um eine partielle und nicht um eine vollst\u00e4ndige Synchronisation handeln. Ber\u00fccksichtigen Sie dies und kombinieren Sie die Operationen der Slot\u00fcbertragung und der Deaktivierung\/Verschiebung von Slaves. Oder hoffen Sie, dass Sie \u00fcber gen\u00fcgend Spielraum verf\u00fcgen.<\/li>\n<li>Was tun, wenn Sie beim Transfer feststellen, dass einige Slots verloren gegangen sind? Ich hoffe, dieses Problem wird Ihnen nicht begegnen, aber falls doch, gibt es den Cluster-Fix. Dieser verteilt die Slots mehr oder weniger zuf\u00e4llig auf die Nodes. Ich empfehle, seine Funktion zu \u00fcberpr\u00fcfen, nachdem Sie die Node mit den verteilten Slots aus dem Cluster entfernt haben. Da die Daten in den nicht verteilten Slots ohnehin nicht verf\u00fcgbar sind, ist es zu sp\u00e4t, sich um die Verf\u00fcgbarkeit dieser Slots Sorgen zu machen. Die Operation wird sich hingegen nicht auf die verteilten Slots auswirken.<\/li>\n<li>Eine weitere n\u00fctzliche Operation ist monitor. Sie erm\u00f6glicht es, in Echtzeit die gesamte Liste der Anfragen zu sehen, die an die Node gesendet werden. Dar\u00fcber hinaus k\u00f6nnen Sie mit ihr einen Grep-Befehl ausf\u00fchren und herausfinden, ob der ben\u00f6tigte Traffic vorhanden ist.<\/li>\n<\/ul>\n<p><\/p>\n<p>Es ist auch erw\u00e4hnenswert, dass es einen Failover-Prozess f\u00fcr den Master gibt. Kurz gesagt, er existiert und meiner Meinung nach funktioniert er hervorragend. Man sollte jedoch nicht denken, dass Redis sofort umschaltet und die Clients den Verlust nicht bemerken, wenn man den Stecker aus der Steckdose zieht. Aus meiner Erfahrung dauert der Umschaltprozess einige Sekunden. W\u00e4hrend dieser Zeit sind Teile der Daten nicht verf\u00fcgbar: der Master wird als nicht erreichbar erkannt, die Noden stimmen \u00fcber einen neuen ab, die Slaves schalten um, die Daten werden synchronisiert. Der beste Weg, um sicherzustellen, dass das System funktioniert, ist, lokale \u00dcbungen durchzuf\u00fchren. Starten Sie einen Cluster auf Ihrem Laptop, geben Sie eine minimale Last, simulieren Sie einen Ausfall (zum Beispiel durch Blockieren der Ports), bewerten Sie die Umschaltgeschwindigkeit. Meiner Meinung nach kann man nur durch ein- bis zweit\u00e4giges Ausprobieren sicher sein, dass die Technologie funktioniert \u2014 oder man hofft einfach, dass die Software, die die H\u00e4lfte des Internets nutzt, auf jeden Fall zuverl\u00e4ssig ist.<\/p>\n<p><\/p>\n<h1 id=\"konfiguraciya\">Konfiguration<\/h1>\n<p><\/p>\n<p>Oft ist die Konfiguration das Erste, was man braucht, um mit dem Tool zu beginnen. Und wenn alles funktioniert, m\u00f6chte man die Konfiguration nicht mehr anfassen. Es erfordert bestimmte Anstrengungen, um sich dazu zu bringen, zu den Einstellungen zur\u00fcckzukehren und sie gr\u00fcndlich zu durchforsten. In meiner Erinnerung hatten wir mindestens zwei schwere Fehler wegen mangelnder Aufmerksamkeit f\u00fcr die Konfiguration. Achten Sie besonders auf die folgenden Punkte:<\/p>\n<p><\/p>\n<ul>\n<li>timeout 0<br \/>\n<em>Die Zeit, nach der inaktive Verbindungen geschlossen werden (in Sekunden). 0 \u2014 keine Schlie\u00dfung.<\/em><br \/>\nNicht jede unserer Bibliotheken konnte Verbindungen korrekt schlie\u00dfen. Wenn diese Einstellung deaktiviert ist, riskieren wir, die maximale Anzahl an Clients zu erreichen. Andererseits, falls es ein solches Problem gibt, k\u00f6nnte der automatische Abbruch verlorener Verbindungen es maskieren, sodass wir es m\u00f6glicherweise nicht bemerken. Au\u00dferdem sollte diese Einstellung bei Verwendung von persistierenden Verbindungen nicht aktiviert werden.<\/li>\n<li>Save x y &amp; appendonly yes<br \/>\n<em>Speicherung des RDB-Snapshots.<\/em><br \/>\nDie Probleme mit RDB\/AOF werden wir gleich ausf\u00fchrlich besprechen.<\/li>\n<li>stop-writes-on-bgsave-error no &amp; slave-serve-stale-data yes<br \/>\n<em>Wenn aktiviert, wird der Master bei einem RDB-Snapshot-Fehler keine \u00c4nderungsanfragen mehr annehmen. Wenn die Verbindung zum Master unterbrochen wird, kann der Slave weiterhin Anfragen beantworten (ja). Oder er wird aufh\u00f6ren zu antworten (nein).<\/em><br \/>\nWir m\u00f6chten nicht, dass Redis zum K\u00fcrbis wird.<\/li>\n<li>repl-ping-slave-period 5<br \/>\n<em>Nach diesem Zeitraum beginnen wir uns Sorgen zu machen, dass der Master ausgefallen ist und es Zeit f\u00fcr einen Failover ist.<\/em><br \/>\nWir m\u00fcssen manuell das Gleichgewicht zwischen Fehlalarmen und dem Start von Failover finden. Aus unserer Erfahrung sind das 5 Sekunden.<\/li>\n<li>repl-backlog-size 1024mb &amp; epl-backlog-ttl 0<br \/>\n<em>So viele Daten k\u00f6nnen wir im Puffer f\u00fcr einen ausgefallenen Slave speichern. Wenn der Puffer voll ist, muss eine vollst\u00e4ndige Synchronisation erfolgen.<\/em><br \/>\nDie Praxis zeigt, dass es besser ist, einen h\u00f6heren Wert zu w\u00e4hlen. Es gibt viele Gr\u00fcnde, warum ein Slave hinterherhinken kann. Wenn er hinterherhinkt, hat Ihr Master wahrscheinlich schon M\u00fche, und eine vollst\u00e4ndige Synchronisation wird der letzte Tropfen sein.<\/li>\n<li>maxclients 10000<br \/>\n<em>Maximale Anzahl gleichzeitiger Clients.<\/em><br \/>\nNach unseren Erfahrungen ist es besser, einen h\u00f6heren Wert festzulegen. Redis bew\u00e4ltigt problemlos 10.000 Verbindungen. Stellen Sie nur sicher, dass im System gen\u00fcgend Sockets verf\u00fcgbar sind. <\/li>\n<li>maxmemory-policy volatile-ttl<br \/>\n<em>Regel, nach der Schl\u00fcssel beim Erreichen des verf\u00fcgbaren Speicherkapazit\u00e4tslimits gel\u00f6scht werden.<\/em><br \/>\nHier ist nicht so wichtig, welche Regel gilt, sondern das Verst\u00e4ndnis, wie dies geschehen wird. Redis verdient Lob daf\u00fcr, dass es auch bei Erreichen des Speicherkapazit\u00e4tslimits zuverl\u00e4ssig arbeitet. <\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"problemy-rdb-i-aof\">Probleme mit RDB und AOF<\/h1>\n<p><\/p>\n<p>Obwohl Redis alle Informationen im Arbeitsspeicher speichert, gibt es auch einen Mechanismus zur Datenspeicherung auf der Festplatte. Genauer gesagt, drei Mechanismen:<\/p>\n<p><\/p>\n<ul>\n<li>RDB-Snapshot \u2014 eine vollst\u00e4ndige Kopie aller Daten. Wird mit der Konfiguration SAVE X Y festgelegt und liest sich als 'Speichern Sie alle Daten alle X Sekunden, wenn mindestens Y Schl\u00fcssel ge\u00e4ndert wurden.'<\/li>\n<li>Append-Only-File \u2014 eine Liste von Operationen in der Reihenfolge ihrer Ausf\u00fchrung. F\u00fcgt neue eingehende Operationen alle X Sekunden oder alle Y Operationen in die Datei ein.<\/li>\n<li>RDB und AOF \u2014 die Kombination der beiden vorhergehenden Methoden.<\/li>\n<\/ul>\n<p><\/p>\n<p>Alle Methoden haben ihre eigenen Vor- und Nachteile; ich werde nicht alle aufz\u00e4hlen, sondern lediglich auf einige, meiner Meinung nach, weniger offensichtliche Punkte hinweisen.<\/p>\n<p><\/p>\n<p>Zun\u00e4chst erfordert das Erstellen eines RDB-Snapshots den Aufruf von FORK. Wenn viele Daten vorhanden sind, kann dies Redis f\u00fcr einen Zeitraum von mehreren Millisekunden bis zu einer Sekunde blockieren. Au\u00dferdem ben\u00f6tigt das System Arbeitsspeicher f\u00fcr einen solchen Snapshot, was bedeutet, dass die logische Maschine einen doppelt so hohen Arbeitsspeicherbedarf haben muss: Wenn Redis mit 8 GB konfiguriert ist, sollten auf der virtuellen Maschine 16 GB verf\u00fcgbar sein.<\/p>\n<p><\/p>\n<p>Zweitens gibt es Probleme mit der teilweisen Synchronisierung. Im AOF-Modus kann bei der Wiederverbindung eines Slaves anstelle der partiellen Synchronisierung eine vollst\u00e4ndige Synchronisierung durchgef\u00fchrt werden. Warum das passiert, konnte ich nicht herausfinden. Aber man sollte daran denken.<\/p>\n<p><\/p>\n<p>Diese beiden Punkte lassen bereits dar\u00fcber nachdenken, ob wir diese Daten auf der Festplatte \u00fcberhaupt ben\u00f6tigen, wenn sie ohnehin von den Slaves dupliziert werden. Daten k\u00f6nnen nur dann verloren gehen, wenn alle Slaves ausfallen, und das ist ein Problem der Kategorie \"Brand im Rechenzentrum\". Als Kompromiss k\u00f6nnte man vorschlagen, die Daten nur auf den Slaves zu speichern, aber in diesem Fall muss sichergestellt werden, dass diese Slaves niemals zum Master werden, wenn eine Notfallwiederherstellung erforderlich ist (hierf\u00fcr gibt es die Einstellung der Priorit\u00e4t der Slaves in ihrer Konfiguration). Wir denken in jedem konkreten Fall dar\u00fcber nach, ob es notwendig ist, Daten auf der Festplatte zu speichern, und antworten meistens mit \"nein\".<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Fazit<\/h1>\n<p><\/p>\n<p>Abschlie\u00dfend hoffe ich, dass ich einen allgemeinen \u00dcberblick \u00fcber die Funktionsweise von redis-cluster geben konnte f\u00fcr diejenigen, die noch nie davon geh\u00f6rt haben, sowie auf einige nicht sofort offensichtliche Aspekte aufmerksam gemacht habe f\u00fcr diejenigen, die es schon lange nutzen.<br \/>\nVielen Dank f\u00fcr Ihre Zeit, und wie immer sind Kommentare zum Thema willkommen.<\/p>\n<p>Quelle: <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 4.9.10 - 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 \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\" \/>\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\/de\/blog\/administrirovanie\/o-pereezde-s-redis-na-redis-cluster\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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 \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/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\u00dcber den Umstieg von Redis auf Redis-Cluster | ProHoster","description":"Bei einem Produkt, das sich \u00fcber mehr als ein Jahrzehnt weiterentwickelt, ist es wenig \u00fcberraschend, dass veraltete Technologien darin zu finden sind. Aber was passiert, wenn Sie in sechs Monaten eine Last von zehnmal mehr tragen m\u00fcssen und die Kosten f\u00fcr Ausf\u00e4lle sich um das Hundertfache erh\u00f6hen? In diesem Fall ben\u00f6tigen Sie einen kompetenten Highload Engineer. Da es jedoch keinen solchen Spezialisten gab, wurde mir die Verantwortung \u00fcbertragen, das Problem zu l\u00f6sen. Im ersten","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/o-pereezde-s-redis-na-redis-cluster","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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 \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","og:url":"https:\/\/prohoster.info\/de\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/91846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=91846"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/91846\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/91847"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=91846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=91846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=91846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}