現在テスト中です: 完了後にGitHubのコードを公開する予定です。

プロトコル (クラスタ) — サーバー ↔ サーバー

クラスタモードでのみ使われるピアRPCプロトコルです。ノードはRaftコンセンサスによって 1つのロック状態を共有します — すべてのロック状態変更(獲得・解放・失効)は、リーダーの 提案 → 過半数への複製 → コミットを経て初めて適用されるため、分断やフェイルオーバー中でも 排他制御が保たれます。概念的な説明は 動作原理を参照してください。

フロー — 1つの獲得がコミットされるまで

クライアント
リーダー
フォロワー1
フォロワー2
A · 獲得 (key)
AppendEntries (Grant)
AppendEntries (Grant)
OK
過半数到達 → コミット、全ノードに適用
A · 獲得済み (token)
リクエストレスポンス合意形成RPC(Raft)

リーダーはロックコマンドを複製コマンドに変換し、 AppendEntriesのRPCに乗せて、自分自身を含む過半数が 記録した時点でコミットします(3ノードならリーダー+フォロワー1で十分で、残りは待ちません)。 クライアントへの応答はコミット後にのみ送出されるため、応答を受け取った時点でそのロックは 過半数に書き込まれています。

ポート・アドレスの規則

  • ピアRPCは専用のRaftポート = クライアントポート + 1000を使います(例: 52256225)。 別途の設定キーなしで自動的に導出され、クラスタモードでのみリッスンします。ファイア ウォールでは両方のポートを開く必要があります。
  • 設定(cluster_self/cluster_peers)には常にクライアントアドレスが入ります。ピアへの 発信時のみポートに+1000が加わります — クライアントに渡されるM(移動)のリダイレクト アドレスは常にそのままのクライアントアドレスです。
  • 役割はポートのみで区別されます — プロトコル内にクライアントとピアを区別する手順は ありません。接続の順序と認証/TLSのルールは 接続と認証を参照してください。

目次

関連ページ