Einführung in Redis Cluster
Redis Cluster ist eine Assembly, die den Datenaustausch zwischen mehreren Redis-Knoten ermöglicht.
Der Redis-Cluster unterstützt keine Befehle zum Verarbeiten mehrerer Schlüssel, da dies das Verschieben von Daten zwischen verschiedenen Knoten erfordert und somit nicht die gleiche Leistung wie Redis erzielt und unter Hochlastbedingungen zu Unvorhersehbarkeit führen kann. Fehler.
Der Redis-Cluster bietet durch Partitionierung ein gewisses Maß an Verfügbarkeit und kann weiterhin Befehle verarbeiten, wenn ein Knoten ausfällt oder nicht erreichbar ist:
Automatische Aufteilung der Daten auf verschiedene Knoten .
Kann weiterhin Befehle verarbeiten, auch wenn einige Knoten im gesamten Cluster ausfallen oder nicht erreichbar sind.
Daten-Sharding des Redis-Clusters
Der Redis-Cluster verwendet kein konsistentes Hashing, sondern führt das Konzept des Hash-Slots ein.
Redis-Cluster Es gibt 16384 Jeder Schlüssel wird von CRC16 überprüft und Modulo 16384 wird verwendet, um zu bestimmen, welcher Knoten im Cluster für einen Teil des Hash-Slots verantwortlich ist. Wenn der aktuelle Cluster beispielsweise über 3 Knoten verfügt, gilt Folgendes: 🎜>
Knoten A enthält Hash-Slots 0 bis 5500. Knoten B enthält Hash-Slots 5501 bis 11000. Knoten C enthält Hash-Slots 11001 bis 16384. Diese Struktur erleichtert das Hinzufügen oder Löschen von Knoten. Wenn ich beispielsweise einen neuen Knoten D hinzufügen möchte, muss ich einige Slots von den Knoten A, B und C nach D übertragen. Wenn ich Knoten A entfernen möchte, müssen Sie Sie müssen die Slots in A auf die Knoten B und C verschieben und dann den A-Knoten ohne Slots aus dem Cluster entfernen, da das Verschieben des Hash-Slots von einem Knoten auf einen anderen Knoten den Dienst nicht stoppt. Daher ist das Hinzufügen, Löschen oder Ändern erforderlich Die Anzahl der Hash-Slots eines Knotens führt nicht dazu, dass der Cluster nicht mehr verfügbar ist.Master-Slave-Replikationsmodell des Redis-Clusters
Um den Cluster still zu halten Verfügbar, wenn einige Knoten ausfallen oder die meisten Knoten nicht kommunizieren können, verwendet der Cluster ein Master-Slave-Replikationsmodell und jeder Knoten verfügt über N-1 Replikate.In unserem Beispiel In einem Cluster mit drei Knoten A, B, und C, ohne Replikationsmodell, wenn Knoten B ausfällt, wird der gesamte Cluster als nicht verfügbar betrachtet, da ihm Steckplätze im Bereich von 5501-11000 fehlen. Wenn wir jedoch einen Slave-Knoten A1 hinzufügen, B1, C1 zu jedem Knoten, wenn der Cluster erstellt wird (oder nach einiger Zeit), dann besteht der gesamte Cluster aus drei Master-Knoten und drei Slave-Knoten. Auf diese Weise wählt der Cluster B1 als aus Der neue Master-Knoten wird weiterhin bedient, und der gesamte Cluster ist nicht nicht verfügbar, weil der Steckplatz nicht gefunden werden kannWenn jedoch sowohl B als auch B1 ausfallen, ist der Cluster nicht verfügbar.Redis-Konsistenzgarantie
Redis garantiert keine starke Datenkonsistenz. Dies bedeutet, dass der Cluster in der Praxis unter bestimmten Bedingungen Schreibvorgänge verlieren kann.Der erste Grund ist, dass Der Cluster verwendet asynchrone Replikation. Der Schreibvorgang:Der Client schreibt einen Befehl an den Masterknoten B.Der Masterknoten B schreibt eine Antwort auf den Befehlsstatus des Clients.Der Master-Knoten kopiert den Schreibvorgang auf seine Slave-Knoten B1, B2 und B3.Das Kopieren des Befehls durch den Master-Knoten erfolgt nach der Rückgabe der Befehlsantwort, denn wenn jede Befehlsanforderung erforderlich ist Warten Sie, bis der Replikationsvorgang abgeschlossen ist. Die Geschwindigkeit, mit der der Masterknoten Befehlsanforderungen verarbeitet, wird erheblich verringert. Wir müssen einen Kompromiss zwischen Leistung und Konsistenz eingehen. Hinweis: Redis Cluster stellt möglicherweise in Zukunft eine synchrone Schreibmethode bereit. Eine andere Situation, in der ein Redis-Cluster Befehle verlieren kann, ist, wenn der Cluster über eine Netzwerkpartition verfügt und ein Client von einer kleinen Anzahl von Instanzen, einschließlich mindestens einem Masterknoten, isoliert ist. Angenommen, der Cluster enthält sechs Knoten A, B, C, A1, B1 und C1, von denen A, B und C die Masterknoten sind und A1, B1 und C1 Die Slaves von A, B und C. Knoten und ein Client Z1. Unter der Annahme, dass im Cluster eine Netzwerkpartition vorliegt, kann der Cluster in zwei Parteien unterteilt werden. Die Mehrheitspartei enthält die Knoten A, C, A1, B1 und C1. und die kleine Gruppe enthält Knoten B und Clients.Z1 kann weiterhin auf Masterknoten B schreiben. Wenn die Netzwerkpartition für kurze Zeit auftritt, funktioniert der Cluster weiterhin normal lang genug ist, damit die meisten Parteien B1 zum neuen Master wählen können, gehen die von Z1 in B geschriebenen Daten verloren.Das obige ist der detaillierte Inhalt vonWas ist ein Redis-Cluster?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!