zookeeper是乙個高效能分布式應用協調服務。zookeeper主要可以提供如下的服務:(1)naming service;(2)配置管理;(3)leader election;(4)服務發現;(5)同步;(6)group service;(7)barrier;(8)分布式佇列;(9)兩階段提交
1、先來了解幾個小知識點
1)client與server是通過nio方式通訊的。
2)訊息是fifo方式執行的(順序的,先進先出)。
3)讀訊息可以通過zookeeper的leader和所有的follower。
4)寫訊息必須通過leader。
2、zookeeper寫訊息的過程
(1)client通過某個follower請求寫操作時,該follower會把這個請求發給leader;(2)leader再將這個更新(proposal),順序傳送給follower;(3)follower收到leader更新時,follower會將資料持久化到磁碟;(4)當follower寫到磁碟後,就會向leader傳送ack;(5)當leader收到半數以上的follower向它傳送ack後,就向全部的follower傳送commit;(6)leader並在本地commit訊息(commit的意思是就是這個訊息可對外讀了);(7)當follower收到leader傳送的commit後,就會將磁碟裡的資料寫進記憶體資料庫,同時commit(每個follower都有記憶體資料庫,client去向follower請求資料時,都是通過記憶體資料庫讀取的)。同時每條訊息,都有乙個遞增的id。
1、進入恢復模式
當leader宕機或者丟失大多數follower後,即進入恢復模式。
2、結束恢復模式
新leader被選舉起來後,且大多數的follower完成與leader的狀態同步後,恢復模式即結束,進入廣播模式。
3、恢復模式的意義
每個訊息的id(zxid)是64位,前面32位稱為epoch,後面32位稱為counter。
(1)發現集群中被commit的proposal的最大的zxid,之後的leader不會commit比這zxid小的proposal,也就是說leader只能commit比這大的proposal。
(2)建立新的epoch,從而保證之前的leader不能再commit新的proposal(每選舉出乙個新的leader,epoch都會改變,且比之前的大,且保證乙個leader的任期內,epoch不會被改變)。
(3)集群中大部分節點都commit過前乙個leader commit過的訊息,而新的leader是被大部分節點鎖支援的(會選舉出於前leader保持最為緊密的follower作為leader),所以被之前leader commit過的proposal不會丟失,至少被乙個節點所儲存。
(4)新的leader會與所有follower通訊,從而保證大部分節點都擁有最新的資料。
(1)順序一致性:從乙個客戶端發出的更新操作會按順序傳送被執行。
(2)原子性:更新操作要麼成功,要麼失敗,無中間狀態。
(3)乙個客戶端只會看到乙個view,無論他連線哪台伺服器。
(4)zookeeper的讀效能好與寫效能(只有leader能提供些服務,任何server都可以提供讀服務)。
(5)為了保證leader選舉順利進行,通常將server設定為基數。
(6)kafka主要使用到zookeeper的配置管理 和 leader election。
(7)只保證同乙個客戶端的單一系統映象,並不保證多個客戶端在同一時刻一定能看到同一系統映象,如果要實現這種效果,需要在讀取資料之前呼叫sync操作。
zookeeper基礎(同步模式與廣播模式)
當集群中的learner完成了初始化狀態同步,那麼整個zk集群就進入到了正常工作模式了。如果集群中的learner 節點收到客戶端的事務請求,那麼這些learner會將請求 給leader伺服器。然後再執行如下過程 leader接收到事務請求後,為事務賦予乙個全域性唯一的64位自增id,即zxid,...
Zookeeper原子廣播Zab
zookeeper的原子廣播 zookeeper的核心是原子廣播,這個機制保證了各個server之間的同步。實現這個機制的協議叫做zab協議。zab協議有兩種模式,它們分別是恢復模式 選主 和廣播模式 同步 當服務啟動或者在領導者崩潰後,zab就進入了恢復模式,當領導者被選舉出來,且大多數serve...
zookeeper 原子廣播機制
1 client與server是通過nio方式通訊的。2 訊息是fifo方式執行的 順序的,先進先出 3 讀訊息可以通過zookeeper的leader和所有的follower。4 寫訊息必須通過leader。zookeeper 的核心是原子廣播機制,這個機制保證了各個 server 之間的同步。實...