- Zookeeper 教程
- Zookeeper – 首頁
- Zookeeper – 概述
- Zookeeper - 基礎知識
- Zookeeper – 工作流程
- Zookeeper – 領導者選舉
- Zookeeper – 安裝
- Zookeeper – 命令列介面
- Zookeeper – API
- Zookeeper – 應用
- Zookeeper 有用資源
- Zookeeper – 快速指南
- Zookeeper – 有用資源
- Zookeeper – 討論
Zookeeper - 工作流程
一旦 ZooKeeper 叢集啟動,它將等待客戶端連線。客戶端將連線到 ZooKeeper 叢集中的一個節點。它可能是一個領導者節點或一個跟隨者節點。一旦客戶端連線,節點會為該特定客戶端分配一個會話 ID 並向客戶端傳送確認。如果客戶端沒有收到確認,它會簡單地嘗試連線 ZooKeeper 叢集中的另一個節點。一旦連線到一個節點,客戶端將定期向該節點發送心跳,以確保連線不會丟失。
如果客戶端想要讀取特定的 znode,它會向節點發送一個讀取請求,其中包含 znode 路徑,節點透過從自己的資料庫中獲取請求的 znode 來返回該 znode。因此,ZooKeeper 叢集中的讀取速度很快。
如果客戶端想要將資料儲存在 ZooKeeper 叢集中,它會將 znode 路徑和資料傳送到伺服器。連線的伺服器會將請求轉發到領導者,然後領導者會將寫入請求重新發布到所有跟隨者。只有當大多數節點成功響應時,寫入請求才會成功,並且會向客戶端傳送成功的返回碼。否則,寫入請求將失敗。節點的嚴格多數稱為Quorum(仲裁)。
ZooKeeper 叢集中的節點
讓我們分析在 ZooKeeper 叢集中具有不同節點數量的影響。
如果我們有單個節點,那麼當該節點發生故障時,ZooKeeper 叢集就會失敗。這會導致“單點故障”,因此不建議在生產環境中使用。
如果我們有兩個節點並且一個節點發生故障,我們也沒有多數,因為兩個節點中只有一個不是多數。
如果我們有三個節點並且一個節點發生故障,我們有多數,因此這是最低要求。ZooKeeper 叢集在活動生產環境中至少需要三個節點。
如果我們有四個節點並且兩個節點發生故障,它也會再次失敗,這類似於擁有三個節點。額外的節點沒有任何作用,因此最好以奇數新增節點,例如 3、5、7。
我們知道在 ZooKeeper 叢集中,寫入過程比讀取過程開銷更大,因為所有節點都需要將其資料庫中的資料寫入相同的資料。因此,為了獲得平衡的環境,最好擁有較少的節點(3、5 或 7),而不是擁有大量的節點。
下圖描繪了 ZooKeeper 工作流程,隨後的表格解釋了其不同的元件。
| 元件 | 描述 |
|---|---|
| 寫入 | 寫入過程由領導者節點處理。領導者將寫入請求轉發到所有 znode 並等待來自 znode 的響應。如果一半的 znode 回覆,則寫入過程完成。 |
| 讀取 | 讀取由特定的連線 znode 在內部執行,因此無需與叢集互動。 |
| 複製資料庫 | 它用於在 zookeeper 中儲存資料。每個 znode 都有自己的資料庫,並且每個 znode 在任何時候都擁有相同的資料,這得益於一致性。 |
| 領導者 | 領導者是負責處理寫入請求的 Znode。 |
| 跟隨者 | 跟隨者接收來自客戶端的寫入請求並將其轉發到領導者 znode。 |
| 請求處理器 | 僅存在於領導者節點中。它管理來自跟隨者節點的寫入請求。 |
| 原子廣播 | 負責將更改從領導者節點廣播到跟隨者節點。 |