Derzeit im Test: Der GitHub-Code wird nach Abschluss veröffentlicht.

Snapshot

Einem Knoten, der zu weit zurückgefallen ist, um über das Log aufzuholen (z. B. direkt nach einem Neustart), wird der gesamte aktuelle Zustand über die FullSnapshot-RPC gesendet. Innerhalb von snapshot_bytes steckt die folgende, mit postcard serialisierte Struktur.

FeldInhalt
last_appliedDie letzte Log-Position, die dieser Snapshot widerspiegelt
last_membershipMitgliedschafts-Info (Knotenzusammensetzung)
token_seqDer Fencing-Token-Ausstellungszähler — repliziert, sodass die Token-Monotonie auch über einen Leaderwechsel hinweg gilt
locksEine Liste aus (key, token, remain_ms) — jede gehaltene Sperre und ihre verbleibende Lease
  • remain_ms ist die verbleibende Lease in Millisekunden zum Zeitpunkt der Snapshot-Erstellung. Der Knoten, der sie installiert, stellt die Ablaufzeit auf seiner eigenen Uhr als now + remain_ms wieder her — es wird niemals ein absoluter Zeitstempel gesendet, sodass Uhrendrift zwischen Knoten keine Auswirkung hat.
  • Millisekunden werden nur hier für Präzision verwendet (die client-seitige Einheit ist Sekunden).
  • Das Raft-Log ist In-Memory (flüchtig). Ein neu gestarteter Knoten bootet mit leerem Zustand und holt dann über die Log-Replikation eines Peers oder diesen Snapshot auf — der committete Zustand bleibt erhalten, solange eine Mehrheit am Leben bleibt.

Ablauf

Leader
Zurückgefallener Knoten
direkt nach dem Neustart — bootet mit leerem Zustand
AppendEntries
zu weit zurück, um über das Log aufzuholen
FullSnapshot — gesamter Zustand in einem Frame
installiert: stellt jede Sperre als now + remain_ms wieder her
zurück zu reinen AppendEntries-Log-Einträgen
Konsens-RPC (Raft)

Begriffe

  • Snapshot — eine vollständige Kopie des Zustands zu einem bestimmten Zeitpunkt. Er erlaubt es einem zurückgefallenen Knoten, den Snapshot zu installieren und nur den Log-Einträgen danach zu folgen, statt alles von Grund auf neu abzuspielen.
  • Mitgliedschaft (membership) — die Liste der Knoten, aus denen der Cluster besteht, und ihre Rolleninformationen.