Swarm 模式下的 Raft 共識
當 Docker Engine 在 Swarm 模式下執行時,管理節點會實現 Raft 共識演算法 來管理全域性叢集狀態。
Swarm 模式使用共識演算法的原因是為了確保所有負責管理和排程叢集中任務的管理節點都儲存著相同的、一致的狀態。
叢集中具有相同一致狀態意味著在發生故障時,任何管理節點都可以接管任務並將服務恢復到穩定狀態。例如,如果負責排程叢集任務的領導管理節點意外崩潰,任何其他管理節點都可以接管排程任務,並重新平衡任務以匹配所需的狀態。
使用共識演算法在分散式系統中複製日誌的系統需要特別注意。它們透過要求多數節點就值達成一致,確保在發生故障時叢集狀態保持一致。
Raft 最多可以容忍 (N-1)/2
個故障,並且需要多數或法定人數 (N/2)+1
個成員就提議給叢集的值達成一致。這意味著在一個執行 Raft 的 5 個管理節點的叢集中,如果有 3 個節點不可用,系統就無法處理任何額外的任務排程請求。現有任務會繼續執行,但如果管理節點集不健康,排程器無法重新平衡任務以應對故障。
Swarm 模式中共識演算法的實現意味著它具有分散式系統固有的特性:
- 容錯系統中的值一致性。(請參閱 FLP 不可能定理 和 Raft 共識演算法論文)
- 透過領導者選舉過程實現互斥
- 叢集成員管理
- 全域性一致的物件排序和 CAS(比較並交換)原語