zookeeper原子廣播協議,zookeeper使用zab協議,實現分布式資料一致性。具體的,zk使用乙個單一的主程序來接受並處理客戶端的事務請求,並使用zab協議,將資料的變更狀態以事務proposal的形式廣播到所有follower。
leader:1,可以進行事務操作(寫操作)和非事務操作(讀操作),2,保證事務操作的順序性。
follower:1,處理非事務請求,**事務請求給leader節點。2,可以參與leader選舉 。3,參與事務投票
observer:1,處理非事務請求,**事務請求給leader節點。
observer節點與follower節點的區別是不能參與leader選舉投票和事務投票。observer節點的主要作用就是增加讀非事務處理的能力。
zookeeper集群初始化時,沒有leader和follower節點,這時候需要進行leader選舉。一般來說,zxid(事務id)大的更有機會成為leader節點,因為zxid越大,表示資料越新。如果xzid一樣,則根據sid(serverid,即myid)判斷,sid越大的節點,越有機會成為leader。
選舉詳細過程:在集群初始化的時候,每個節點都會發出第乙個投票,將自己投為leader,投票的資料格式為(sid,zxid),投票會被其他節點接收到,其他節點接收到之後,對比自己最新的一次投票,判斷哪個被投票的節點更適合稱為leader。判斷機制如下:誰的zxid越大,就選誰,zxid一樣,選擇sid更大的那個。判斷出更適合稱為leader的節點之後,將這個leader節點作為被選舉者再次發出投票。
節點在每次發出投票之後,就會統計當前是否有quorum數量(過半,總結點數/2 + 1)的投票都投給了同乙個節點,如果存在,則認為這個節點是leader。之後會等待一定時間(預設200毫秒),看看是否有更新的投票。再之後,看看leader是不是自己,如果是,則將自己設定為leader,否則將自己設定為follower。
上面是一種集群初始化時,leader選舉的情況。在集群執行過程中,如果leader掛掉,則也會發生leader重新選舉。選舉的過程和集群初始化時leader選舉過程基本是一樣的。
leader節點進行乙個事務提議(proposal),然後發給各個follower節點,各個follower節點收到proposal之後,記錄事務日誌,然後返回ack給leader節點。leader如果收到了過半數節點的ack,則進行事務commit,並讓所有的follower也進行commit。follower收到commit通知之後,將事務變更應用到記憶體資料庫zkdatabase中。需要注意的是,由於之前observer並沒有參加事務投票,所以leader發出commit時候要區別對待。對於observer,需要將事務內容和zxid全部發給observer,observer才能完成事務。對於follower,只需要傳送zxid即可。
Zookeeper重點總結
類似於一棵樹,每個znode預設能夠儲存1mb的資料 服務1啟動 首先選舉自己 服務2啟動,首先選舉自己,服務1轉投id比自己大的服務2 服務3啟動 首先選舉自己 服務1服務2轉投序號比較大的伺服器3,這時master選舉出來了 服務4啟動,這時已經選舉出來且過半不會觸發重新選舉 服務5啟動,同服務...
C 重點總結
public和private用來支援類的封裝特性,使用public修飾的成員可以在類的外部進行訪問,使用private修飾的類成員只能在類的內部和友元中訪問。protected用來支援類的繼承特性,用protected修飾的成員可以被派生類物件訪問,不能被使用者 類外 訪問。include usin...
zookeeper技術總結
1 zookeeper概念介紹 zookeeper是乙個分部式協調服務 就是為使用者的分布式應用程式提供協調服務 a zookeeper是為別的分布式程式服務的 b zookeeper本身就是乙個分布式程式 只要有半數以上節點存活,zk就能正常服務 c zk所提供的的服務涵蓋 主從協調 伺服器節點動...