❝Sentinel zielt hauptsächlich auf Lösungen für Einzelknotenausfälle ab, die nicht automatisch wiederhergestellt werden können. Dieser Artikel verwendet den offiziell bereitgestellten Redis-Cluster Am Ende des Artikels gibt es etwas, das Sie möchten. Richten Sie den SSH-Hintergrund ein! Artikel gemäß dieser Roadmap Ich habe einige Wissenspunkte gefunden, die noch nicht hinzugefügt wurden, und freue mich darauf, Sie im Kommentarbereich zu sehen.❞
Dann müssen wir den Master-Slave einer einzelnen Maschine in einen Viele-zu-Viele-Modus ändern und alle Masterknoten werden miteinander verbunden, um miteinander zu kommunizieren. Diese Methode kann nicht nur den Speicher einer einzelnen Maschine gemeinsam nutzen, sondern auch Anfragen verteilen und die Verfügbarkeit des Systems verbessern.
Wie im Bild gezeigt: Wenn eine große Anzahl von Schreibanforderungen vorliegt, werden Anweisungen nicht mehr an einen einzelnen Masterknoten gesendet, sondern die Anweisungen werden an verschiedene Masterknoten verteilt, um den Speicher gemeinsam zu nutzen und eine große Anzahl zu vermeiden von Anfragen.
Wie werden also Anweisungen weitergeleitet und gespeichert? Wir müssen mehr über die Cluster-Speicherstruktur herausfinden.
Wie ist der Satz zur Verbesserung der Systemverfügbarkeit zu verstehen? Schauen wir uns das Bild unten an, die Auswirkungen auf das System wird nicht so groß sein.
Zu diesem Zeitpunkt wird jemand fragen: Wie funktioniert der Cluster, wenn Master1 ausfällt? Diese Frage wird im folgenden Failover für Sie beantwortet. Und dieses Problem wird im Hauptkapitel ausführlich erläutert
16384
Kopien, jeder Host speichert einen Teil. Hier muss beachtet werden, dass die Nummer, die ich jedem Redis-Speicherplatz gegeben habe, einem kleinen Speicherplatz entspricht (
Der Fachbegriff "Hash-Slot"
), man kann darunter die Zahl innerhalb eines Gebäudes verstehen, und ein Gebäude ist der gesamte Lagerraum davon Redis. Die Nummer jedes Hauses entspricht einem Speicherplatz. Dieser Speicherplatz verfügt über einen bestimmten Bereich zum Speichern des entsprechenden Schlüssels, was nach der Aufnahme des Modells im obigen Bild nicht der Fall ist.
Nun stellt sich die Frage: Was sollen wir tun, wenn wir eine Maschine hinzufügen oder entfernen? Schauen Sie sich Bilder an, um zu sprechen, und versuchen Sie, keine Worte zu verwenden, wenn Sie Bilder zur Erklärung verwenden können.
Nach dem Hinzufügen einer neuen Maschine werden der neuen Maschine bestimmte Slots aus den anderen drei Speicherplätzen zugewiesen. Hier können Sie einstellen, wie viele Slots Sie in die neue Maschine einbauen möchten.
In ähnlicher Weise werden nach dem Reduzieren einer Maschine die entfernten Slots anderen vorhandenen Maschinen neu zugewiesen. Genau wie beim Hinzufügen eines neuen Knotens können Sie den Node-Empfangsslot angeben.
Das sogenannte Hinzufügen eines Knotens oder Entfernen eines Knotens besteht darin, den Speicherort des Slots zu ändern. Nachdem wir die Speicherstruktur des Clusters verstanden haben, müssen wir eine weitere Frage klären: Wie gestaltet man die interne Kommunikation des Clusters? Ein Wert kommt, ein Schlüssel wird erhalten, woher kommen die Daten, und wir werden uns diese Frage weiter unten ansehen.
Jeder Knoten im Cluster sendet in einem bestimmten Zeitraum Ping-Nachrichten an andere Knoten, und andere Knoten geben Pong als Antwort zurück. Nach einer gewissen Zeit kennen alle Knoten die Slot-Informationen aller Knoten im Cluster.
Wie in der Abbildung unten gezeigt, werden die 16384 Hash-Slots bei drei Knoten in drei Teile unterteilt.
Sie lauten 0-5500, 5501-11000 bzw. 11001-16384
Wie verarbeitet der Cluster die Anfrage, wenn ein Benutzer eine Schlüsselanforderung initiiert?
Das schwarze Kästchen im Bild unten stellt die Slot-Informationen aller Knoten im Cluster dar und enthält viele weitere Informationen.
Wie in der Abbildung gezeigt, initiiert der Benutzer eine Schlüsselanforderung, Redis berechnet nach Erhalt die Steckplatzposition des Schlüssels und findet den entsprechenden Knoten basierend auf der Steckplatzposition.
Wenn sich der Zugriffssteckplatz auf dem Knoten selbst befindet Dann werden die dem Schlüssel entsprechenden Daten direkt zurückgegeben.
Andernfalls wird ein verschobener Umleitungsfehler beantwortet und der richtige Knoten wird an den Client zurückgegeben.
Dann den Tastaturbefehl erneut senden
Einfach bezahlen Achtung Klicken Sie einfach auf die Konfigurationsinformationen im Kreis
sed 's/6380 /g' 6379-redis.conf > 6380-redis.conf
执行命令wget https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.1.tar.gz
wget https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.1.tar.gz
解压:tar -xvzf ruby-2.7.1.tar.gz
根据自己下载的版本来解压
安装:./configure | make | make install
这三个指令一气呵成。
查看ruby和gem版本:ruby -v
tar -xvzf ruby-2.7.1.tar.gz
Beschreibung:./configure | machen | make install
这三个指令一气呵成.🎜🎜查看ruby和gem版本:ruby -v
🎜Der Ausführungsbefehl des Clusters ist in /usr/local/redis/src/redis-trib.rb
/usr/local/redis/src/redis-trib.rb
注意如果需要直接使用redis-trib.rb
命令,需要ln到bin目录下,否则就必须使用./redis-trib.rb
的方式。
如果按照步骤走,这里会出现一个错误执行
gem install redis
很不幸的是在这里也会出现错误。随后需要安装
yum install zlib-devel
和yum install openssl-devel
redis-trib.rb
, muss in das bin-Verzeichnis verschoben werden, andernfalls müssen Sie ./redis -trib.rb
way. 🎜🎜Wenn Sie die Schritte befolgen, wird hier ein Fehler angezeigtyum install openssl-devel
🎜安装完成后,在/ruby-2.7 .1/ext/openssl
und /ruby-2.7.1/ext/zlib
分别执行ruby extconf.rb
并且执行make | make install
/ruby-2.7.1/ext/openssl
和 /ruby-2.7.1/ext/zlib
分别执行ruby extconf.rb
并且执行make | make install
然后在执行gem install redis
就OK这时在回头来执行
./redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
「信息解读」
创建集群,并且给6个节点分配哈希槽,后三个节点配置为前三个节点的从节点显示每个节点的哈希槽信息和节点ID,最后一步需要输入
yes
然后在执行
gem install redis
就OK这时在回头来执行
显示每个节点的哈希槽信息和节点ID,最后一步需要输入
yes
来到data目录下查看配置文件的变化
「查看主机点的运行日志」
Die hier gegebenen Hauptinformationen beziehen sich auf den geänderten Clusterstatus: ok Der Clusterstatus ist normal
Beim direkten Festlegen der Daten wird ein Fehler gemeldet und der Steckplatz angezeigt Die Position nach der Konvertierung des Namensschlüssels ist 5798 und es werden die IP-Adresse und die Portnummer angegeben. Sie müssen den Befehl verwenden
redis-cli -c
Beim Festlegen des Werts werden Sie aufgefordert, zum Steckplatz 5798 umzuleiten.Der nächste Schritt besteht darin, die Daten abzurufen, und der Knoten wird automatisch umgeschaltet. 5. Failover 9.
6379 meldet, dass die Verbindung 6383 verloren gegangen ist und markiert sie als fehlgeschlagen, was darauf hinweist, dass sie nicht verfügbar ist. Zu diesem Zeitpunkt funktioniert der Cluster noch normal.
「Zusammenfassung: Offline-Slave-Knoten haben keinen Einfluss auf den Cluster」Wenn Port 6383 online geht, löschen alle Knoten die Fehlermarkierung
Schalten Sie den Master-Knoten 6379 manuell offline und überprüfen Sie die Protokollinformationen des Slave-Knotens 6383. Zu diesem Zeitpunkt stellt der 6383-Knoten insgesamt zehnmal weiterhin eine Verbindung zu 6379 her. Warum dann 10 Mal!
Es basiert auf den von uns konfigurierten Parameterncluster- Knoten – Dies wird durch Timeout 10 bestimmt. Hier ist eine Nachricht für uns: Stellen Sie einmal pro Sekunde eine Verbindung her, bis die Zeit abgelaufen ist, und starten Sie das Failover.
Zu diesem Zeitpunkt war 6383 bei der Failover-Wahl erfolgreich, und der Slave drehte sich um und wurde zum Masterknoten. Überprüfen Sie zu diesem Zeitpunkt die Knoteninformationen des Clusters, Befehl
cluster nodes
. cluster-node-timeout 10
来决定的,这里给我们一个信息就是一秒连接一次
直到时间到期后,开始故障转移。
这时6383在故障转移选举中胜任,翻身奴隶把歌唱,成为了主节点。此时在查看一下集群的节点信息,命令
cluster nodes
„6379 ursprünglicher Masterknoten geht online“
Und die Knoteninformationen ändern sich ebenfalls. Zu diesem Zeitpunkt wechselt 6379 zum Slave-Knoten von 6383.
Führen Sie den neuen Befehl in den neuen beiden Ports 6385 und 6386 aus./redis-trib.rb add-node 127.0.0.1:6379
, was hier gesendet wird ist meet message./redis-trib.rb add-node 127.0.0.1:6385 127.0.0.1:6379
,这里发送的就是meet消息
执行add-node命令,第一个参数为新节点的ip+端口 第二个参数为已存在集群中的节点。根据下图我们就可以看到新增的节点已经存在集群中了。
「注意:虽说6385已经成为集群中的节点了,但是跟其它节点有区别。它没有数据,也就是没有哈希槽」接下来我们就需要把集群中的某些哈希槽分配到这个新节点上,分配结束后这个节点才会成为真正意义上的主节点
执行命令./redis-trib.rb reshard 127.0.0.1:6385
会提示转移多少个哈希槽并填写接收节点的id
最后一步询问是否从所有节点中转移:咔咔使用的是all
./redis-trib.rb reshard 127.0.0.1:6385
🎜🎜 fragt ab, wie viele Hash-Slots übertragen werden sollen, und füllt den id
🎜🎜Der letzte Schritt fragt, ob von allen Knoten: use Kaka The isalle🎜Anweisungen verwenden: cluster nodes> Überprüfen Sie, ob der Knoten 6385 bereits Hash-Slots in drei Bereichen hat<img src="/static/imghwm/default1.png" data-src="https://img-blog.csdnimg.cn/2020061000064774.png" class="lazy" alt="Bildbeschreibung hier einfügen" style="max-width:90%" overflow-wrap: break-word margin: monospace wortumbruch: rgb hintergrund: h> ./ Redis-trib.rb add-node--Slave--master-id DCC0EC4D0C932AC5C35AE76F4F9C5D27A422D9F 127.0.0.1:6386 127.0.0.1:6385 <code style="overflow-wrap: break-word; margin: 0px 2px; font-family: " operator mono consolas monaco menlo monospace word-break: break-all color: rgb background: rgba padding: border-radius: height: line-height:>cluster nodes
查看,6385的这个节点就已经拥有三个范围的哈希槽了
「主节点已经新增好了,接下来就需要给6385这个主节点配置一个从节点6386」
命令:./redis-trib.rb add-node --slave --master-id dcc0ec4d0c932ac5c35ae76af4f9c5d27a422d9f 127.0.0.1:6386 127.0.0.1:6385
master-id是6385的id,第一个参数为新节点的ip+端口 第二个为指定的主节点ip+端口
当想对集群中的主节点进行升级的话可以手动执行故障转移到从节点,避免集群可用性受影响。
在从节点执行命令:cluster failover
Führen Sie den Befehl auf dem Slave-Knoten aus: Cluster-Failover
「Ausführungsprozess」
Sehen Sie sich die Knoteninformationen an und Sie können sehen, dass der Knoten 6386 zum Hostpunkt geworden ist. 🎜🎜Wenn der Cluster-Failover-Befehl an den Slave-Knoten gesendet wird, sendet der Slave-Knoten das CLUSTERMSG_TYPE_MFSTART-Paket an den Master-Knoten. Der Slave-Knoten fordert den Master-Knoten auf, den Zugriff zu stoppen, damit die Datenoffsets der beiden konsistent sind. 🎜Zu diesem Zeitpunkt stellt der Client keine Verbindung zum von uns entfernten Master-Knoten her. Gleichzeitig sendet der Master-Knoten den Replikations-Offset an den Slave-Knoten, der das Failover beginnt und dann benachrichtigt Der Master-Knoten führt einen Konfigurationswechsel durch. Wenn der Client den alten Master-Knoten entsperrt und sich erneut mit dem neuen Master-Knoten verbindet.
Nachdem der Master-Knoten offline gegangen ist, wird der Slave-Knoten zum Master-Knoten.
Jeder Knoten im Cluster sendet regelmäßig Ping-Nachrichten an andere Knoten und der Empfänger antwortet mit Pong.
Wenn die Ping-Nachricht weiterhin innerhalb der Cluster-Knoten-Timeout-Zeit fehlschlägt, wird der empfangende Knoten mit dem Status „pfail“ markiert, was subjektiv als offline gilt.
Kommt Ihnen dieser Offline-Zustand sehr bekannt vor? Ja, dies ähnelt in gewisser Weise der Beurteilung des Masterknotens durch den Sentinel. Wenn ein Sentinel ein Problem mit dem Masterknoten erkennt, markiert er den Masterknoten auch als objektiv offline (s_down). Plötzlich wurde mir klar, dass es mir peinlich war ...
Lassen Sie mich die Sentinels erwähnen. Wenn ein Sentinel denkt, dass der Masterknoten abnormal ist, wird er subjektiv als offline markiert, aber wie können andere Sentinels dem nicht zustimmen? Sag, was du sagst. Sie alle werden versuchen, eine Verbindung zum abnormalen Masterknoten herzustellen. Wenn mehr als die Hälfte der Sentinels glauben, dass der Masterknoten abnormal ist, nehmen sie den Masterknoten objektiv direkt offline.
In ähnlicher Weise beurteilt der Cluster nicht nur, dass sein Status aufgrund eines Knotens offline ist. Die Knoten werden durch Klatschnachrichten kontinuierlich weitergegeben. Die Knoten im Cluster sammeln kontinuierlich das Offline-Feedback des fehlerhaften Knotens und speichern es im lokalen Netzwerk Fehlerhafter Knoten-Offline-Bericht. Wenn mehr als die Hälfte der Cluster-Masterknoten als subjektiv offline markiert sind, ändert sich der Status in „objektiv offline“.
Schließlich wird eine Fehlermeldung an den Cluster gesendet, die alle Knoten benachrichtigt, den ausgefallenen Knoten als objektiv offline zu markieren.
Zum Beispiel: Knoten A sendet einen Ping an Knoten B und markiert Knoten B nach einer Kommunikationsstörung als pfail. Anschließend sendet Knoten A weiterhin Pings an Knoten C und überträgt die pfail-Informationen von Knoten B. Dann speichert Knoten C der Fehler von Knoten B im Offline-Bericht. Wenn die Anzahl der Offline-Berichte mehr als die Hälfte der Anzahl der Masterknoten mit Hash-Slots beträgt, wird versucht, objektiv offline zu gehen.
Wenn der Fehlerknoten als objektiv offline definiert ist, tragen alle Slave-Knoten des Fehlerknotens die Verantwortung der Fehlerbehebung.
Fehlerwiederherstellung ist ein Fehlerwiederherstellungsprozess, der ausgeführt wird, nachdem der Slave-Knoten durch geplante Aufgaben feststellt, dass sein Hostpunkt objektiv offline ist.
『1. Qualifikationsprüfung』
Alle Slave-Knoten überprüfen die letzte Verbindungszeit mit dem Master-Knoten. Wenn die Trennungszeit größer als Cluster-Node-Time*Cluster-Slave-Validity-Factor ist, gibt es keinen Failover-Qualifikationen.
『2. Vorbereitungszeit für die Wahl』
Lassen Sie uns zunächst darüber sprechen, warum es eine Vorbereitungszeit für die Wahl gibt.
Wenn nach der Qualifikationsprüfung mehrere Slave-Knoten vorhanden sind, müssen zur Unterstützung der Priorität unterschiedliche Verzögerungswahlzeiten verwendet werden. Die Priorität hier ist Basierend auf dem Replikationsoffset gilt: Je größer der Offset, desto geringer ist die Verzögerung zwischen dem ausgefallenen Masterknoten und desto größer ist die Chance, den Masterknoten zu ersetzen.
Die Hauptfunktion besteht darin, sicherzustellen, dass der Knoten mit der besten Datenkonsistenz die Wahl zuerst initiiert dies mit dem Wachposten zu verwechseln. Der Abstimmungsmechanismus des Clusters basiert auf den Hostpunkten, die die Slots halten.
Der Slave-Knoten des ausgefallenen Knotens sendet ein FAILOVER_AUTH_REQUEST-Paket an alle Master-Knoten, die über Slots verfügen, um Stimmen anzufordern. Wenn der Master-Knoten auf FAILOVER_AUTH_ACK antwortet, um abzustimmen, kann er während des Zeitraums von NODE_TIMEOUT * 2 nicht für andere Slave-Knoten stimmen
Nachdem der Slave-Knoten mehr als die Hälfte der Stimmen erhalten hat, geht er in die Fehlerwiederherstellungsphase über
『4. Failover』
Der erfolgreich ausgewählte Slave-Knoten bricht die Replikation ab und wird zum Master-Knoten.
Löschen Sie den Slot von der ausgefallene Knoten und ersetzt den ausgefallenen Knoten. Der Steckplatz des Knotens wird ihm selbst anvertraut.
sendet seine eigene Pong-Nachricht an den Cluster, benachrichtigt den Host über Punktänderungen und übernimmt die Steckplatzinformationen des ausgefallenen Knotens.
Ein Redis-Sentinel-Artikel, dessen Fertigstellung zwei Nächte gedauert hat, aber es stellt sich heraus, dass Ihr Fokus nicht auf dem Artikel selbst liegt, ah! Das Herz des Redakteurs schmerzt
Um allen Wünschen gerecht zu werden, erklärt Kaka widerstrebend, wie man einen hellen und blendenden Hintergrund einrichtet. Das von Kaka verwendete Tool ist xsheel.
Öffnen Sie die Option zur Werkzeugauswahl.
Dann können Sie die xsheel-Transparenz festlegen, wenn Sie ein transparentes Fenster sehen.
Das stimmt! Sie haben Recht. Dies ist der Desktop-Hintergrund. Sind Sie bereit, mit der Einrichtung zu beginnen? Wie wäre es, wenn Sie nach der Einrichtung und dem Lesen des Artikels wiederkommen? Kaka braucht außerdem Experten aus allen Lebensbereichen, die technische Hinweise geben und Fehler korrigieren.
❝Beharrlichkeit beim Lernen, Beharrlichkeit beim Bloggen und Beharrlichkeit beim Teilen sind die Überzeugungen, an denen Kaka seit seiner Karriere festhält. Ich hoffe, dass Kakas Artikel im riesigen Internet Ihnen ein wenig helfen können Sie in der nächsten Ausgabe.
❞
Empfohlen: „Redis-Tutorial“
Das obige ist der detaillierte Inhalt vonAls ich im Interview nach dem Redis-Cluster gefragt wurde, wurde ich zu Tode gefoltert .... Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!