關於 ZooKeeper 維護

Private Cloud v. 4.17.01 版本

即使失去一或多個 ZooKeeper 節點,ZooKeeper 集合仍可正常運作,不會發生資料遺失的情況。這種復原能力可有效地用於在沒有系統停機的情況下,對 ZooKeeper 節點執行維護作業。

關於 ZooKeeper 和 Edge

在 Edge 中,ZooKeeper 節點含有與 各種 Edge 元件,並通知不同設定變更元件所有支援的 Edge 拓樸 (適用於實際運作系統) 都會指定至少使用三個 ZooKeeper 節點。

使用 ZK_HOSTSZK_CLIENT_HOSTS 屬性中的 用於指定 ZooKeeper 節點的邊緣設定檔。例如:

ZK_HOSTS="$IP1 $IP2 $IP3" 
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3" 

其中:

  • ZK_HOSTS:指定 ZooKeeper 節點的 IP 位址。所有 ZooKeeper 節點的 IP 位址必須依相同順序列出。

    在多資料中心環境中,列出所有資料中心的所有 ZooKeeper 節點。
  • ZK_CLIENT_HOSTS - 指定這個資料中心僅使用的 ZooKeeper 節點 IP 位址。在資料中心的所有 ZooKeeper 節點上,IP 位址必須列在相同的順序。

    在單一「資料中心」安裝程序中,這些節點與 ZK_HOSTS 所指定的節點相同。在多資料中心環境中,每個資料中心的 Edge 設定檔應只列出該資料中心的 ZooKeeper 節點

根據預設,所有 ZooKeeper 節點都會指定為 voter 節點。也就是說,節點都會參與選舉 ZooKeeper leader。您可以將「:observer」修飾符與 ZK_HOSTS 搭配使用,表示附註是 observer 節點,而非投票者。觀察器節點未參與 因此主要是

建立多個 Edge Data Center 或單一 Data Center 有大量 ZooKeeper 節點時,通常會指定「:observer」修飾符。舉例來說,在有兩個資料中心的 12 主機 Edge 安裝作業中,資料中心 2 節點 9 上的 ZooKeeper 是觀察器:

然後在資料中心 1 的設定檔中使用下列設定:

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"

資料中心

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP7 $IP8 $IP9"

關於領袖、追隨者、投票者和觀察者

在多節點 ZooKeeper 安裝作業中,其中一個節點會指定為領導節點。所有其他 ZooKeeper 節點都會指定為追隨者。雖然讀取作業可以 ZooKeeper 節點,所有寫入要求都會轉送至領導者。舉例來說 已將處理器新增至 Edge。這項資訊會寫入 ZooKeeper 領導者。所有追隨者隨後會複製資料。

在 Edge 安裝期間,您可以將各個 ZooKeeper 節點指定為選民或觀察者。 接著,系統會由所有選民 ZooKeeper 節點選出首席。其中一項規定是 領導者是必須仲裁有效的 ZooKeeper 選民節點可用。法定人數是指所有資料中心中,超過一半的投票 ZooKeeper 節點皆可運作。

如果選票上沒有可用的選民節點,就無法選出領導者。在這種情況下,Zookeeper 無法處理要求。這表示您無法向 Edge Management 提出要求 伺服器、處理 Management API 要求,或登入 Edge UI,直到仲裁還原為止。

舉例來說,在單一資料中心安裝作業中:

  • 您已安裝三個 ZooKeeper 節點
  • 所有 ZooKeeper 節點都是選民
  • 法定人數為兩個運作中的投票節點
  • 如果只可用一個選民節點,ZooKeeper 組合無法運作

安裝有兩個資料中心時:

  • 您已為每個資料中心安裝三個 ZooKeeper 節點,總共有六個節點
  • 資料中心 1 有三個投票節點
  • 資料中心 2 有兩個選民節點和一個觀察者節點
  • 仲裁依據兩個資料中心的五位投票者,因此符合 三個正常運作的選民節點
  • 如果只有兩個以下的選民節點可用,ZooKeeper 成員無法合併 函式

將節點新增為選民 觀察者

根據您的系統需求,可能需要將額外的 ZooKeeper 節點新增至 Edge 安裝。新增 ZooKeeper 節點說明文件說明如何在 Edge 中新增其他 ZooKeeper 節點。新增 ZooKeeper 節點時,您必須 請將要新增的節點類型納入考量:選民或觀察者。

請務必確保有足夠的投票節點,以便在一個或多個投票節點發生故障時,ZooKeeper 集合仍能運作,也就是仍有足夠的投票節點可用。加入選民節點可以提高仲裁的數量,進而 容許更多選民節點遭到關閉

不過,新增其他投票節點可能會影響寫入效能,因為寫入作業需要過半節點同意領導者。判斷領導者所需的時間取決於投票節點數量,而投票節點數量會隨著新增的投票節點數量而增加。因此,您不應將所有節點都設為投票節點。

您可以新增觀察者節點,而不新增選民節點。新增觀察器節點增加次數 整體系統讀取效能並不會增加選擇勝出版本負擔 觀察節點不會投票,也不會影響仲裁大小。因此,如果觀察器節點發生故障,也不會影響集合體選出領袖的能力。不過,失去觀察者節點可能會導致 ZooKeeper 集合的讀取效能降低,因為可用於服務資料要求的節點數量減少。

在單一資料中心中,無論觀察者節點的數量為何,Apigee 都建議您最多只使用五個投票者。在兩個資料中心中,Apigee 建議您最多使用九個投票者 (一個資料中心五個,另一個資料中心四個)。接著,您可以視系統需求新增所需的觀察器節點。

維護作業注意事項

只要每次只在單一節點上執行,即可在運作正常的集合上執行 ZooKeeper 維護作業,且不會造成停機。只要確保每次只有一個 ZooKeeper 節點發生故障,即可確保總是有足夠的投票節點可選出領導節點。

跨多個資料中心的維護作業

使用多個資料中心時,請注意 ZooKeeper 組合不會區分資料中心。ZooKeeper 團隊集結了所有 ZooKeeper 節點 整合資料中心

當 ZooKeeper 執行法定數計算時,投票節點在特定資料中心的位置並非考量因素。個別節點可以跨越資料中心,但只要仲裁 在整個整體運作中,ZooKeeper 依然正常運作。

維護影響

您必須在不同時間將 ZooKeeper 節點關閉,以便進行維護,無論是投票節點或觀察節點皆然。舉例來說,您可能需要升級節點上的 Edge 版本、主機代管 ZooKeeper 可能會失敗,或是節點可能因其他原因 (例如網路錯誤) 而無法使用。

如果中斷的節點是觀察器節點,那麼 將 ZooKeeper 的效能集中在節點還原前。如果節點為選民 節點時,這可能會影響 ZooKeeper 集體的可行性,因為系統會遺失 參與主要選舉流程無論投票節點發生故障的原因為何,請務必維持可用的投票節點法定人數。

維護程序

請務必確認 ZooKeeper 組合可正常運作,再考慮執行任何維護程序。這個假設觀測器節點運作正常且數量足夠 維護期間可以使用的選民節點來保留仲裁。

在符合這些條件時,任意大小的 ZooKeeper 集合可在任何時間點容許單一節點的損失,且不會遺失資料或對效能造成重大影響。也就是說,只要是同一個節點,您就可以在集合群組中的任何節點上執行維護作業。

執行維護作業時,請按照下列程序,決定 ZooKeeper 節點 (領導者、選民或觀察者):

  1. 如果 ZooKeeper 節點未安裝 nc,請安裝 nc:
    > sudo yum install nc
  2. 在節點上執行下列 nc 指令:
    > echo stat | nc localhost 2181

    其中 2181 是 ZooKeeper 通訊埠。您應該會看到以下格式的輸出內容:
    Zookeeper 版本:3.4.5-1392090,建構於 2012 年 9 月 30 日 17:52 GMT
    Clients:/a.b.c.d:xxxx[0](queued=0,recved=1,sent=0)
    Latency min/avg/max:0/0/0
    Received:1
    Sent:0
    Connections:1
    Outstanding:0
    Zxid:0xc00000044
    Mode:follower
    節點數量:653


    在節點輸出的 Mode 行中,您應該會看到 observerleaderfollower (意指不是 leader 的投票者),這取決於節點設定。

    注意:在安裝單一 ZooKeeper 節點的 Edge 中, 「Mode」設為「獨立」
  3. 在每個 ZooKeeper 節點上重複步驟 1 和 2。

摘要

對 ZooKeeper 集合執行維護作業的最佳做法,就是一次執行一個節點。請注意:

  • 您必須在維護期間維持足夠的投票節點,確保 ZooKeeper 集合能正常運作
  • 刪除觀察器節點不會影響仲裁,也不會影響選出領導者的能力
  • 在所有資料中心的所有 ZooKeeper 節點中計算過半數
  • 在先前伺服器運作後,繼續進行下一個伺服器的維護作業
  • 使用 nc 指令檢查 ZooKeeper 節點