Replikat
Ein Replikat ist eine Kopie einer Partition, die aus Verfügbarkeitsgründen auf einem anderen Node gehalten wird. Der Replikationsfaktor legt fest, wie viele Kopien existieren, und geht ein Primary verloren, wird eines seiner Replikate befördert und übernimmt.
Was ein Replikat ist
Jede Partition gehört zu einem Zeitpunkt genau einem Node — ihrem Primary — der die Lese- und Schreibzugriffe der Partition bedient. Ein Replikat ist eine zusätzliche Kopie derselben Partition, die als Hot Standby auf einem anderen Node geführt wird. Schreibvorgänge landen auf dem Primary und werden an die Replikate gestreamt, sodass ein Replikat nahe am Zustand des Primary bleibt und übernehmen kann, wenn der Node des Primary ausfällt.
Kopien derselben Partition werden stets auf verschiedenen Maschinen platziert, sodass der Verlust einer Maschine nie sowohl einen Primary als auch sein Replikat treffen kann.
Der Replikationsfaktor
Der Replikationsfaktor ist die Anzahl der Kopien jeder Partition, die existieren — der Primary plus seine Replikate. Er ist der wichtigste Regler für die Verfügbarkeit bei Node-Verlust, und Sie legen ihn beim Erstellen eines Stores fest; New-ZrStore verlangt ihn ausdrücklich.
- Replikationsfaktor 1 — eine Kopie, keine Replikate. Schnell und kompakt, aber ein Node-Verlust bedeutet Datenverlust. Verwenden Sie ihn nur für Caches, die Sie neu aufbauen können.
- Replikationsfaktor 2 — ein Primary plus ein Replikat. Übersteht den Ausfall einer Maschine; dies ist der empfohlene Wert für die Produktion.
- Replikationsfaktor 3 — ein Primary plus zwei Replikate. Übersteht den gleichzeitigen Ausfall von zwei Maschinen.
In der Produktion darf der Replikationsfaktor die Anzahl der Maschinen nicht überschreiten, damit jede Kopie auf einer anderen Maschine landen kann; auf einer einzelnen Maschine wird dies mit einer Warnung gelockert, was zum Testen akzeptabel ist, aber keine Fehlertoleranz bietet.
In der Konfiguration ist der Standardwert des Replikationsfaktors 1 — eine einzelne Kopie ohne Replikate. New-ZrStore nimmt keinen Default an: Sie übergeben -ReplicationFactor beim Erstellen des Stores ausdrücklich.
Primary im Vergleich zu Replikat
Der Unterschied zwischen einem Primary und einem Replikat betrifft die Rolle, nicht eine andersartige Sache — beide sind Kopien derselben Partition auf verschiedenen Nodes.
- Der Primary ist die maßgebliche Kopie. Schreibvorgänge gehen immer an ihn, und Lesezugriffe gehen standardmäßig ebenfalls an ihn.
- Ein Replikat ist eine Standby-Kopie. Es erhält die Schreibvorgänge des Primary und ist bereit, befördert zu werden. Ein Store kann Replikat-Lesezugriffe aktivieren (standardmäßig aus), sodass leselastige Workloads von Replikaten lesen können — auf Kosten möglicherweise etwas veralteter Daten.
Wann der Primary einen Schreibvorgang als dauerhaft betrachtet, hängt vom Replikationsmodus des Stores ab. Im Async-Modus (Default) bestätigt der Primary sofort und repliziert im Hintergrund, sodass ein Replikat zurückliegen kann. Im Sync-Modus wartet der Primary gemäß der Write-Quorum-Richtlinie auf die Bestätigung der Replikate, bevor er antwortet.
Failover: Was tatsächlich übernommen wird
Geht der Node eines Primary verloren, wird eines seiner Replikate zum Primary befördert, und Clients routen nach einer Aktualisierung der Partitionsübersicht dorthin um. Anschließend baut der Cluster auf einer gesunden Maschine ein frisches Replikat auf, um den konfigurierten Replikationsfaktor wiederherzustellen. Bis dieser Aufbau abgeschlossen ist, ist die Partition unterreplizert.
Es ist die Primary-Rolle der Partition, die per Failover wechselt — vom verlorenen Node zu einem überlebenden Replikat — nicht die Partition selbst und nicht der Node. Die Partition behält durchgehend ihren stabilen Codewort-Namen, sodass Sie ihr über die Beförderung hinweg folgen können.
Bei der standardmäßigen Async-Replikation kann ein Replikat hinter seinem Primary zurückliegen. Fällt der Primary aus, bevor die nachlaufenden Schreibvorgänge repliziert wurden, gehen diese Schreibvorgänge bei der Beförderung verloren. Verwenden Sie Sync-Replikation, wenn ein Failover keine aktuellen Schreibvorgänge verlieren darf.