Der Redis-Cluster garantiert keine starke Konsistenz. In einigen speziellen Szenarien kann es vorkommen, dass der Client auch dann Daten verliert, wenn er eine Schreibbestätigung erhält.
Szenario 1: Asynchrone Replikation
Client schreibt an Master B
Master B antwortet mit OK
Master B synchronisiert mit Slave B1 B2 B3
B antwortet dem Client, ohne auf die Bestätigung von B1 B2 B3 zu warten. Wenn der Master ausfällt, bevor die Slave-Synchronisierung abgeschlossen ist, wird einer der Slaves als Master ausgewählt und die zuvor vom Client geschriebenen Daten gehen verloren. Der Befehl
wait kann in diesem Szenario die Datensicherheit verbessern. wait 命令可以增强这种场景的数据安全性。
wait blockiert den aktuellen Client, bis der vorherige Schreibvorgang erfolgreich durch die angegebene Anzahl von Slaves synchronisiert wurde.
wait kann die Datensicherheit verbessern, garantiert jedoch keine starke Konsistenz.
Denn selbst wenn diese synchrone Replikationsmethode verwendet wird, gibt es eine besondere Situation: Ein Slave, der die Synchronisierung noch nicht abgeschlossen hat, wird zum Master gewählt. Szenario 2: Netzwerkpartition 6 Knoten A, B, C, A1, B1, C1, 3 Master, 3 Slaves und ein Client, Z1 Code> .
Nach der Netzwerkteilung wurden 2 Zonen gebildet . A , C, A1, B1, C1 und B Z1.
🎜🎜🎜🎜Zu diesem Zeitpunkt kann Z1 noch Fragen stellen ritten, wenn innerhalb einer kurzen Wenn die Partition wiederhergestellt wird, gibt es kein Problem. Der gesamte Cluster funktioniert jedoch weiterhin normal. Wenn jedoch Zeit vergeht, wird B1 zum Master der Partition, auf der er sich befindet, und die von Z1 geschriebenen Daten B wird verloren gehen. 🎜🎜maximales Fenster (maximales Zeitfenster) kann den Datenverlust reduzieren und die Gesamtzahl der Schreibvorgänge von Z1 nach B steuern: 🎜
Nach einer bestimmten Zeit wird der Mehrheitsrand der Partition gelöscht gewählt werden, Sklave Werden Sie Master. Zu diesem Zeitpunkt lehnt der Master auf der Minderheitsseite den Empfang von Schreibanforderungen ab.
🎜Diese 🎜Zeitspanne🎜 ist sehr wichtig und wird als 🎜Knotenablaufzeit🎜 bezeichnet. 🎜🎜Nachdem ein Master die Ablaufzeit erreicht hat, gilt er als fehlerhaft, geht in den Fehlerzustand über, empfängt keine Schreibanfragen mehr und kann durch einen Slave ersetzt werden. 🎜🎜Zusammenfassung🎜🎜Redis-Cluster garantiert keine starke Konsistenz und es gibt Szenarien, in denen Daten verloren gehen: 🎜🎜🎜Asynchrone Replikation🎜🎜🎜Wenn der Master erfolgreich geschrieben wurde, aber bevor die Slave-Synchronisierung abgeschlossen ist, fällt der Master aus. Der Slave wird zum Master und die Daten gehen verloren. Der Befehl 🎜🎜wait kann für die synchrone Replikation verwendet werden, er kann jedoch nicht vollständig garantieren, dass keine Daten verloren gehen, und er beeinträchtigt die Leistung. 🎜🎜🎜Netzwerkpartition🎜🎜🎜Nach der Partitionierung empfängt ein Master weiterhin Schreibanfragen. Nach der Wiederherstellung der Partition wird der Master möglicherweise zum Slave und die zuvor geschriebenen Daten gehen verloren. 🎜🎜Sie können die Ablaufzeit des Knotens festlegen, um die Anzahl der vom Master während der Partitionierung empfangenen Schreibvorgänge zu reduzieren und die Kosten für Datenverluste zu senken. 🎜🎜🎜🎜Empfohlenes Lernen: „🎜Redis-Tutorial🎜“🎜🎜🎜
Das obige ist der detaillierte Inhalt vonWird der Redis-Cluster Daten verlieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn