分布式系統中,集群副本 是比較重要的存在形式。對於其協議 ,一般常見分為兩種,中心化副本控制協議(類似主從),另一種 去中心化副本協議 ( 無絕對中心概念,一般選舉產生 )。本文paxos 演算法 ,其實是 一種比較經典的 去中心化 副本協議,而 zookeeper 集群選舉流程 其實是一種 簡化版 paxos。
1.paxos 基本角色
paxos 演算法中 ,分三種角色(節點):提議者(proposer),接收者(acceptor),學習者(learner)。
提議者(proposer):發起提議
接收者(acceptor):對提議進行投票,決定是否接受提議
學習者(learner):不參與投票,負責傳達最終值
其實 ,paxos的概念,類似 我們生活的民主投票。
2.paxos 選舉流程
先說總結:兩階段提交 + 過半數通過
階段一 【提議階段】:
(1) 提議者 向大多數接收者 發起乙個 編號 n的 預請求
(2) 接收者 對該 提議進行處理。 如果 編號n 大於 之前接受的 提議編號,則做出響應,且 承諾 不再接受比 n 小的提 議 ,反之 ,將大於 n 的編號 響應帶上(該步驟 可以促使 多提議者 向同乙個值提議)
階段二 【批准處理階段】:
(1) 如果 提議者 收到 大多數 接受者對 預請求的響應, 則 向每個 接收者 傳送請求 (編號n:value提議內容)
對於 value, 一般 取 所有接收者響應 中 最大 編號的n 所對應的 值,若沒有 隨機
(2) 接收者 收到 請求 ,接受提議 。 如果 準備 對更大 編號 做響應 ,則 直接拒絕該提議。
上述過程, 未達成一致 ( 沒有超過半數,無法 學習) ,編號+1 , 重新提議
3.paxos 場景
如下圖 (個人 感覺比較清晰的圖), 描述 一種 比較正常的場景。paxos 可以 讓多個 提議者 的提議 朝著 多大多數 接收者 所接受的提議 靠攏,且 最終 只有乙個 提議 被接受 ,並讓 學習者 學習 , 是一種 可終止 的方案。
1.選舉機制
zookeeper 內建 多種 選舉演算法, 但大同小易。
伺服器 id :集群部署 時的 myid (主要 用在 當多個 服務zxid 一致, myid 就起到主導作用, 如 初始狀態 【解決活鎖】)
事務 id: 該服務 存放的最大 zxid[ 選舉編號+ 序號 ](標識 該服務有最新的資料,更容易成為leader 且 保證資料 不丟失)
邏輯時鐘: 發起的 投票 輪數計數 ( 同步資料 需要 ,保證資料一致性 )
選舉狀態: looking, following , observing, leading
2.選舉流程
總結:最大的zxid +過半數通過
(1) 每個 服務例項 均發起投票 (一般 投給自己)
(2) 其他 服務 收到投票 , 比較 zxid ,如果 一致 ,比較 myid ,大於自己 ,則投出一票
(3) 收到 投票 ,若投票數 大於集群半數 ,則成為 leader
如: 假設 例項 a,b,c,d,e 依次啟動, 由於初始 狀態,直接比較 myid , c 則是 第乙個 超出半數的,即 成為 leader
Zookeeper與paxos演算法
一 zookeeper是什麼 官方說辭 zookeeper 分布式服務框架是apache hadoop 的乙個子專案,它主要是用來解決分布式應用中經常遇到的一些資料管理問題,如 統一命名服務 狀態同步服務 集群管理 分布式應用配置項的管理等。好抽象,我們改變一下方式,先看看它都提供了哪些功能,然後再...
Zookeeper與paxos演算法
一 zookeeper是什麼 官方說辭 zookeeper 分布式服務框架是apache hadoop 的乙個子專案,它主要是用來解決分布式應用中經常遇到的一些資料管理問題,如 統一命名服務 狀態同步服務 集群管理 分布式應用配置項的管理等。好抽象,我們改變一下方式,先看看它都提供了哪些功能,然後再...
Zookeeper與paxos演算法
一 zookeeper是什麼 官方說辭 zookeeper 分布式服務框架是apache hadoop 的乙個子專案,它主要是用來解決分布式應用中經常遇到的一些資料管理問題,如 統一命名服務 狀態同步服務 集群管理 分布式應用配置項的管理等。好抽象,我們改變一下方式,先看看它都提供了哪些功能,然後再...