所謂zookeeper選舉機制是指在zookeeper集群中,
有leader角色,有fellower角色,是如何進行角色分配的;
zookeeper預設的演算法是fastleaderelection 採用投票數大於半數則勝出
1.比如有三颱伺服器,編號分別為1,2
,3;2.編號越大在選擇演算法中的權重越大
1.looking 精選狀態
2.following 隨從狀態 同步leader狀態 參入投票
3.observing 觀察狀態 同步leader狀態 不參入投票
4.leading 領導者狀態
1.伺服器中存放的最新資料version
2.值越大說明資料越新,在選舉演算法中資料越大權重越大
1.邏輯時鐘也叫投票的次數,同一輪投票過程中的邏輯時鐘值是相同的;
2.每投完一次票這個資料就會增加,然後與接受到的其他伺服器返回的投票資訊中的數值相比;
根據不同的值做出不同的判斷;
1.乙個zookeeper集群剛剛搭建起來,沒有任何資料,他的選舉,就叫全新集群選舉
假設目前有5臺伺服器,每台伺服器均沒有資料,他們的編號分別是1,2
,3,4
,5,按照編號一次啟動,選舉過程如下:
1.伺服器1啟動,給自己投票,然後發投票資訊,由於其他機器還沒有啟動,
所以伺服器器1收不到反饋資訊,伺服器1的狀態一致屬於looking;
1.伺服器2啟動,給自己投票,同時與之前啟動的伺服器1交換結果,由於伺服器2的編號大所以伺服器2勝出,
票數為1+1
(其中一票來自伺服器1的那票)但此時投票數沒有大於半數,
所以兩個伺服器的狀態依然是looking;
1.伺服器3啟動,給自己投票,同時與之前啟動的伺服器1,2
,交換資訊,由於伺服器3的編號最大,
所以伺服器3勝出(自己的1票+前面兩個的2票)
,此時投票數正好是大於半數,所以伺服器3稱
為領導者伺服器1
,2稱為小弟
伺服器4啟動,給自己投票,同時與之前啟動的伺服器1,2
,3交換資訊,儘管伺服器4的編號大,
但之前伺服器3已經勝出,所以伺服器4只能為小弟;
後面的邏輯同伺服器4稱為小弟
1.對於執行正常的zookeeper集群,中途有機器down掉,需要重新選舉時,選舉過程中就需要加入資料id,伺服器id和邏輯時鐘
2.資料id:資料新的version就大,資料每次更新都會來更新version:
3.伺服器id:就是我們配置的myid中的值,每個機器乙個
4.邏輯時鐘:這個值從0開始遞增,每次選舉對應乙個值,如果在同一次選中,這個值是一致的;
邏輯時鐘越小,說明該伺服器有可能存在選舉的過程中,該服務down機等故障,說明該機器不夠穩定;
這樣選舉的標準就變為
1.邏輯時鐘小的選舉結果被忽略,重新投票
2.同一邏輯時鐘後,資料id大的勝出
3.資料id相同的情況下,伺服器id大的勝出,
根據上面的規則選出leader
zookeeper選舉機制
fastleaderelection演算法通過非同步的通訊方式來收集其它節點的選票,同時在分析選票時又根據投票者的當前狀態來作不同的處理,以加快leader的選舉程序。每個在zookeeper伺服器啟動先讀取當前儲存在磁碟的資料,zookeeper中的每份資料都有乙個對應的id值,這個值是依次遞增的...
Zookeeper 選舉機制
選舉訊息內容 fastleaderelection 選舉演算法介紹 伺服器id 編號。比如有三颱伺服器,編號分別是1,2,3。編號越大在選擇演算法中的權重越大。資料id。伺服器中存放的最大資料id。值越大說明資料越新,在選舉演算法中資料越新權重越大。邏輯時鐘,用來判斷多個投票是否在同一輪選舉週期中,...
zookeeper選舉機制
在分布式系統中選主最直接或者傳統的方法是直接選定集群的乙個節點為 leader,其它的節點為 follower,這樣引入的乙個問題是如果 leader節點掛掉,整個集群就掛掉了。所以我們需要一種自動選主演算法,如果 leader節點掛掉,則從 follower節點中選出乙個主節點。選舉階段 lead...