1、zookeeper 是什么
zookeeper 是一個分布式的,開放源碼的分布式應用程序協調服務,是 google chubby 的開源實現,是 hadoop 和 hbase 的重要組件。它是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。
2、zookeeper 都有哪些功能
集群管理:監控節點存活狀態、運行請求等。
主節點選舉:主節點掛掉了之后可以從備用的節點開始新一輪選主,主節點選舉說的就是這個選舉的過程,使用 zookeeper 可以協助完成這個過程。
分布式鎖:zookeeper 提供兩種鎖:獨占鎖、共享鎖。獨占鎖即一次只能有一個線程使用資源,共享鎖是讀鎖共享,讀寫互斥,即可以有多線線程同時讀同一個資源,如果要使用寫鎖也只能有一個線程使用。zookeeper可以對分布式鎖進行控制。
命名服務:在分布式系統中,通過使用命名服務,客戶端應用能夠根據指定名字來獲取資源或服務的地址,提供者等信息。
3、 zookeeper 有幾種部署模式
zookeeper 有三種部署模式:
單機部署:一台集群上運行;
集群部署:多台集群運行;
偽集群部署:一台集群啟動多個 zookeeper 實例運行。
4、zookeeper 怎么保證主從節點的狀態同步
zookeeper 的核心是原子廣播,這個機制保證了各個 server 之間的同步。實現這個機制的協議叫做 zab 協議。
zab 協議有兩種模式,分別是恢復模式(選主)和廣播模式(同步)。
當服務啟動或者在領導者崩潰后,zab 就進入了恢復模式,當領導者被選舉出來,且大多數 server 完成了和 leader 的狀態同步以后,恢復模式就結束了。狀態同步保證了 leader 和 server 具有相同的系統狀態。
5、集群中為什么要有主節點
在分布式環境中,有些業務邏輯只需要集群中的某一台機器進行執行,其他的機器可以共享這個結果,這樣可以大大減少重復計算,提高性能,所以就需要主節點。
6、集群中有 3 台服務器,其中一個節點宕機,這個時候 zookeeper 還可以使用嗎
可以繼續使用,單數服務器只要沒超過一半的服務器宕機就可以繼續使用。
7、zookeeper 的通知機制
客戶端端會對某個 znode 建立一個 watcher 事件,當該 znode 發生變化時,這些客戶端會收到 zookeeper 的通知,然后客戶端可以根據 znode 變化來做出業務上的改變。
8、Zookeeper 角色
Zookeeper 集群是一個基於主從復制的高可用集群,每個服務器承擔如下三種角色中的一種
Leader
1. 一個 Zookeeper 集群同一時間只會有一個實際工作的 Leader,它會發起並維護與各 Follwer及 Observer 間的心跳。
2. 所有的寫操作必須要通過 Leader 完成再由 Leader 將寫操作廣播給其它服務器。只要有超過半數節點(不包括 observeer 節點)寫入成功,該寫請求就會被提交(類 2PC 協議)。
Follower
1. 一個 Zookeeper 集群可能同時存在多個 Follower,它會響應 Leader 的心跳,
2. Follower 可直接處理並返回客戶端的讀請求,同時會將寫請求轉發給 Leader 處理,
3. 並且負責在 Leader 處理寫請求時對請求進行投票。
Observer
角色與 Follower 類似,但是無投票權。Zookeeper 需保證高可用和強一致性,為了支持更多的客戶端,需要增加更多 Server;Server 增多,投票階段延遲增大,影響性能;引入 Observer,Observer 不參與投票; Observers 接受客戶端的連接,並將寫請求轉發給 leader 節點; 加入更多 Observer 節點,提高伸縮性,同時不影響吞吐率。
9、ZAB 協議
事務編號 Zxid(事務請求計數器+ epoch)
在 ZAB ( ZooKeeper Atomic Broadcast , ZooKeeper 原子消息廣播協議) 協議的事務編號 Zxid設計中,Zxid 是一個 64 位的數字,其中低 32 位是一個簡單的單調遞增的計數器,針對客戶端每一個事務請求,計數器加 1;而高 32 位則代表 Leader 周期 epoch 的編號,每個當選產生一個新的 Leader 服務器,就會從這個 Leader 服務器上取出其本地日志中最大事務的 ZXID,並從中讀取epoch 值,然后加 1,以此作為新的 epoch,並將低 32 位從 0 開始計數。
Zxid(Transaction id)類似於 RDBMS 中的事務 ID,用於標識一次更新操作的 Proposal(提議)ID。為了保證順序性,該 zkid 必須單調遞增。
epoch
epoch:可以理解為當前集群所處的年代或者周期,每個 leader 就像皇帝,都有自己的年號,所以每次改朝換代,leader 變更之后,都會在前一個年代的基礎上加 1。這樣就算舊的 leader 崩潰恢復之后,也沒有人聽他的了,因為 follower 只聽從當前年代的 leader 的命令。
10、Zab 協議有兩種模式
Zab 協議有兩種模式,它們分別是恢復模式(選主)和廣播模式(同步)。當服務啟動或者在領導者崩潰后,Zab 就進入了恢復模式,當領導者被選舉出來,且大多數 Server 完成了和 leader 的狀態同步以后,恢復模式就結束了。狀態同步保證了 leader 和 Server 具有相同的系統狀態。