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 工作流程,隨後的表格解釋了其不同的元件。

ZooKeeper Ensemble
元件 描述
寫入 寫入過程由領導者節點處理。領導者將寫入請求轉發到所有 znode 並等待來自 znode 的響應。如果一半的 znode 回覆,則寫入過程完成。
讀取 讀取由特定的連線 znode 在內部執行,因此無需與叢集互動。
複製資料庫 它用於在 zookeeper 中儲存資料。每個 znode 都有自己的資料庫,並且每個 znode 在任何時候都擁有相同的資料,這得益於一致性。
領導者 領導者是負責處理寫入請求的 Znode。
跟隨者 跟隨者接收來自客戶端的寫入請求並將其轉發到領導者 znode。
請求處理器 僅存在於領導者節點中。它管理來自跟隨者節點的寫入請求。
原子廣播 負責將更改從領導者節點廣播到跟隨者節點。
廣告

© . All rights reserved.