zookeeper原理

zookeeper原理
zookeeper爲了保證可靠性,不能用一臺機器,而應該是一個集羣
 
爲了保證zookeeper集羣數據能夠一致,必須有一個拍板說了算的人,這就是leader,其他的是follower。
某一時刻集羣裏只能有且僅有一個leader。
leader可以執行增刪改和查詢操作,而follower只能進行查詢操作。
所有的更新操作都會被轉交給leader來處理,leader批准的任務,再發送給follower去執行來保證和leader的一致性。
由於網絡是不穩定的,爲了保證執行順序的一致,所有的任務都會被賦予一個唯一的順序的編號,一定是按照這個編號來執行任務,保證任務順序的一致性。
 
那麼什麼時候leader可以認爲一個客戶端的請求可以算是處理成功了呢?
如果只有leader或少數機器來認可這個任務,則leader和這些少量機器如果掛掉,則選出來的新的leader並不知道之前批准過的這個任務,最終會違反數據的可靠性。
所以要求leader在批准一個任務之前應該保證集羣裏大部分的機器應該是知道這個提案的,這樣即使自己掛掉,根據過半同意選出來的leader肯定是知道這個提案的。
而如果leader一定要等到所有follower都同一才執行提案也不好,因爲知道有一個機器掛掉,leader就無法工作,也相當於單節點了,無法保證集羣可靠性。
所以,只要過半同一leader就可以認爲一個提案通過。
 
所以,
leader在收到客戶端提交過來的任務後,會向集羣中所有的follower發送提案等待follower的投票,follower們收到這個提議後,會進行投票,同意或者不同意,
leader會回收follower的投票,一旦受到過半的投票表示同意,則leader認爲這個提案通過,再發送命令要求所有的follower都進行這個提案中的任務。
 
由於需要過半的機器同一才能執行任務,所以一旦集羣中過半的機器掛掉,整個集羣就無法工作了。
 
從而可以推導出:
zookeeper集羣必須保證過半存活才能工作
zookeeper的集羣中的機器數量最好應該是奇數個,因爲需要過半存活集羣才能工作,所以偶數個機器提供的集羣可靠性其實和偶數-1個機器提供的集羣可靠性是一樣的。
 
leader選舉的問題:
最開始集羣啓動時,會選擇zid最小的機器作爲leader。
當leader掛掉後,會通過過半投票選出具有最高任務編號的稱爲新的leader。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章