Ticketing
ドキュメント

スナップショット

ログでは追いつけないほど遅れたノード(例えば再起動直後)には、 FullSnapshot RPCによって現在の状態全体が送られます。 snapshot_bytesの中には、postcardでシリアライズされた次の構造が入っています。

フィールド内容
last_appliedこのスナップショットが反映している最後のログ位置
last_membershipメンバーシップ(ノード構成)情報
token_seqフェンシングトークンの発行カウンタ — 複製されているため、リーダー交代をまたいでもトークンの単調性が保たれる
locks(key, token, remain_ms)のリスト — 保持中のすべてのロックとその残りlease
  • remain_msスナップショット取得時点での残りlease(ミリ秒)です。インストールする ノードは、自身の時計でnow + remain_msとして失効時刻を復元します — 絶対タイム スタンプは一切送られないため、ノード間の時計のずれは影響しません。
  • ミリ秒が使われるのはここだけで、精度のためです(クライアント向けの単位は秒です)。
  • Raftログはインメモリ(揮発性)です。再起動したノードは空の状態で起動し、ピアの ログ複製かこのスナップショットで追いつきます — コミット済みの状態は、過半数が 生き残っている限り保たれます。

フロー

リーダー
遅れたノード
再起動直後 — 空の状態で起動
AppendEntries
ログでは追いつけないほど遅れている
FullSnapshot — 状態全体を1フレームで
インストール: 各ロックを now + remain_ms として復元
以降は通常のAppendEntriesログエントリに戻る
合意形成RPC(Raft)

用語

  • スナップショット — 特定時点の状態全体のコピー。遅れたノードがスナップショットを インストールし、それ以降のログエントリだけを追えばよくなるため、最初からすべてを 再生する必要がなくなります。
  • メンバーシップ — クラスタを構成するノードのリストとその役割情報。