談你對(duì)Zookeeper 選舉原理的理解
?1.什么是Leader選舉
首先,Zookeeper 集群節(jié)點(diǎn)由三種角色組成,分別是:
Leader,負(fù)責(zé)所有事務(wù)請(qǐng)求的處理,以及過半提交的投票發(fā)起和決策。
Follower,負(fù)責(zé)接收客戶端的非事務(wù)請(qǐng)求,而事務(wù)請(qǐng)求會(huì)轉(zhuǎn)發(fā)給 Leader 節(jié)點(diǎn)來(lái)處理, 另外,F(xiàn)ollower 節(jié)點(diǎn)還會(huì)參與 Leader 選舉的投票。
Observer,負(fù)責(zé)接收客戶端的非事務(wù)請(qǐng)求,事務(wù)請(qǐng)求會(huì)轉(zhuǎn)發(fā)給 Leader 節(jié)點(diǎn)來(lái)處理,Observer 節(jié)點(diǎn)不參與任何投票,只是為了擴(kuò)展 Zookeeper 集群來(lái)分擔(dān)讀操作的壓力。
其次,Zookeeper 集群是一種典型的中心化架構(gòu),也就是會(huì)有一個(gè) Leader 作為決策節(jié)點(diǎn),專門負(fù)責(zé)事務(wù)請(qǐng)求的處理和數(shù)據(jù)的同步。這種架構(gòu)的好處是可以減少集群架構(gòu)里面數(shù)據(jù)同步的復(fù)雜度,集群管理會(huì)更加簡(jiǎn)單和穩(wěn)定。
但是,會(huì)帶來(lái) Leader 選舉的一個(gè)問題,也就是說(shuō),如果 Leader 節(jié)點(diǎn)宕機(jī)了,為了保證集群繼續(xù)提供可靠的服務(wù),Zookeeper 需要從剩下的 Follower 節(jié)點(diǎn)里面去選舉一個(gè)新的節(jié)點(diǎn)作為L(zhǎng)eader,也就是所謂的 Leader 選舉。
2.選舉原理
接下來(lái),給大家介紹一下Zookeeper的選舉原理。
首先呢,Zookeeper中的每一個(gè)節(jié)點(diǎn)都會(huì)向集群里面的其他節(jié)點(diǎn)發(fā)送一個(gè)票據(jù) Vote,這個(gè)票據(jù)有三個(gè)屬性。
epoch, 邏輯時(shí)鐘,用來(lái)表示當(dāng)前票據(jù)是否過期。
zxid,事務(wù) id,表示當(dāng)前節(jié)點(diǎn)最新存儲(chǔ)的數(shù)據(jù)的事務(wù)編號(hào)
myid,服務(wù)器 id,在 myid 文件里面填寫的數(shù)字。
每個(gè)節(jié)點(diǎn)都會(huì)選自己當(dāng) Leader,所以第一次投票的時(shí)候攜帶的是當(dāng)前節(jié)點(diǎn)的信息。
接下來(lái)每個(gè)節(jié)點(diǎn)用收到的票據(jù)和自己節(jié)點(diǎn)的票據(jù)做比較,根據(jù) epoch、zxid、myid的順序逐一比較,以值最大的一方獲勝。比較結(jié)束以后這個(gè)節(jié)點(diǎn)下次再投票的時(shí)候,發(fā)送的投票請(qǐng)求就是獲勝的 Vote 信息。
然后,通過多輪投票以后,每個(gè)節(jié)點(diǎn)都會(huì)去統(tǒng)計(jì)當(dāng)前達(dá)成一致的票據(jù),以少數(shù)服從多數(shù)的方式,最終獲得票據(jù)最多的節(jié)點(diǎn)成為 Leader。
最后我再補(bǔ)充一下,為什么要選擇 epoch/zxid/myid 作為投票評(píng)判依據(jù)?我是這么理解的。
首先,epoch ,因?yàn)榫W(wǎng)絡(luò)通信延遲的可能性,有可能在新一輪的投票里面收到上一輪投票的票據(jù),這種數(shù)據(jù)應(yīng)該丟棄,否則會(huì)影響投票的結(jié)果和效率。
然后,zxid 越大,說(shuō)明這個(gè)節(jié)點(diǎn)的數(shù)據(jù)越接近 leader,所以用 zxid 做判斷條件是為了避免數(shù)據(jù)丟失的問題
最后,myid是服務(wù)器 id,這個(gè)是避免投票時(shí)間過長(zhǎng),直接用 myid 最大值作為快速終結(jié)投票的屬性。
Leader 選舉是一個(gè)比較復(fù)雜的問題,它涉及到集群節(jié)點(diǎn)的數(shù)據(jù)一致性算法。在很多中間件里面都有涉及到類似的問題,這個(gè)思想其實(shí)還是很有研究?jī)r(jià)值的。除此之外,還有 Paxos、raft、等一致性算法。
以上就是我對(duì)Zookeeper選舉原理的理解。