ZooKeeper 維護

Edge for Private Cloud 4.16.09 版

ZooKeeper 集合的設計可確保在遺失一或多個 ZooKeeper 節點時,仍能正常運作且不會遺失資料。這項彈性可有效用於維護 ZooKeeper 節點,而不會造成系統停機。

關於 ZooKeeper 和 Edge

在 Edge 中,ZooKeeper 節點包含各種 Edge 元件的位置和設定資料,並會通知不同元件設定變更。正式環境系統支援的所有 Edge 拓撲,都指定至少使用三個 ZooKeeper 節點。

使用 Edge 設定檔中的 ZK_HOSTS 和 ZK_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 節點都會指定為「投票者」節點。也就是說,所有節點都會參與 ZooKeeper leader 的選舉。您可以在 ZK_HOSTS 中加入「:observer」修飾符,表示該附註是觀察器節點,而非投票者。觀察者節點不會參與領導者選舉。

建立多個 Edge 資料中心,或單一資料中心有大量 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 安裝中,其中一個節點會指定為「leader」。所有其他 ZooKeeper 節點則會指定為「追隨者」。雖然讀取作業可以從任何 ZooKeeper 節點執行,但所有寫入要求都會轉送至領導者。例如,Edge 新增了訊息處理器。該資訊會寫入 ZooKeeper 領導者。所有追蹤者都會複製資料。

在 Edge 安裝期間,您會將每個 ZooKeeper 節點指定為投票者或觀察者。接著,所有投票者 ZooKeeper 節點會選出領導者。選舉領導者的唯一要求是,必須有法定人數的 ZooKeeper 投票者節點可供使用。仲裁是指所有資料中心內,超過半數的投票者 ZooKeeper 節點都能正常運作。

如果沒有足夠的投票者節點,就無法選出領導者。在這種情況下,Zookeeper 無法處理要求。也就是說,在仲裁恢復之前,您無法向 Edge 管理伺服器提出要求、處理 Management API 要求,或登入 Edge UI。

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

  • 您已安裝三個 ZooKeeper 節點
  • 所有 ZooKeeper 節點都是投票者
  • 仲裁機制需要兩個正常運作的投票者節點
  • 如果只有一個投票者節點可用,ZooKeeper 集合就無法運作

在有兩個資料中心的安裝環境中:

  • 您在每個資料中心安裝三個 ZooKeeper 節點,總共六個節點
  • 資料中心 1 有三個投票者節點
  • 資料中心 2 有兩個投票者節點和一個觀察者節點
  • 仲裁依據是兩個資料中心內的五個投票者,因此需要三個正常運作的投票者節點
  • 如果只有兩個或更少的投票者節點可用,ZooKeeper 集合就無法運作

將節點新增為投票者或觀察者

系統需求可能需要您在 Edge 安裝中新增 ZooKeeper 節點。「新增 ZooKeeper 節點」說明文件說明如何將其他 ZooKeeper 節點新增至 Edge。新增 ZooKeeper 節點時,必須考量要新增的節點類型:投票者或觀察者。

請務必確保有足夠的投票者節點,這樣一來,即使一或多個投票者節點故障,ZooKeeper 集合仍可正常運作,也就是說,仍有足夠數量的投票者節點可用。新增投票者節點會增加仲裁的大小,因此可以容忍更多投票者節點停機。

不過,新增投票者節點可能會對寫入效能造成負面影響,因為寫入作業需要多數節點同意領導者。決定領導者所需的時間取決於投票者節點數量,並會隨著投票者節點數量增加而增加。因此,您不應將所有節點都設為投票者。

您可以新增觀察者節點,而非投票者節點。新增觀察者節點可提升整體系統讀取效能,且不會增加選取領導者的負擔,因為觀察者節點不會投票,也不會影響仲裁大小。因此,如果觀察器節點停止運作,不會影響整體選舉領導者的能力。不過,失去觀察者節點可能會導致 ZooKeeper 集合的讀取效能降低,因為可提供資料要求的節點較少。

在單一資料中心內,無論觀察器節點數量為何,Apigee 建議您最多設定五個投票者。在兩個資料中心,Apigee 建議您最多有九個投票者 (一個資料中心有五個,另一個資料中心有四個)。然後視系統需求新增觀察者節點,數量不限。

維護作業注意事項

如果一次只在一個節點上執行 ZooKeeper 維護作業,則可在功能完整的集合上執行,且不會造成停機。只要確保一次只有一個 ZooKeeper 節點停機,就能確保一律有足夠的投票者節點可選出領導者。

跨多個資料中心進行維護

使用多個資料中心時,請注意 ZooKeeper 集合不會區分資料中心。ZooKeeper 組件會將所有資料中心的所有 ZooKeeper 節點視為一個整體。

ZooKeeper 執行仲裁計算時,不會考量特定資料中心內投票節點的位置。個別節點可能會在資料中心之間中斷,但只要整個集合中保留仲裁,ZooKeeper 仍可正常運作。

維護作業影響

您有時必須關閉 ZooKeeper 節點 (投票者節點或觀察者節點) 進行維護。舉例來說,您可能需要升級節點上的 Edge 版本、託管 ZooKeeper 的機器可能故障,或節點可能因其他原因 (例如網路錯誤) 而無法使用。

如果故障的節點是觀察者節點,ZooKeeper 集合的效能可能會稍微降低,直到節點還原為止。如果節點是投票者節點,則可能會影響 ZooKeeper 集合的可用性,因為參與勝出版本選擇程序的節點會遺失。無論投票者節點停機的原因為何,都必須維持可用投票者節點的仲裁。

維護程序

請務必先確認 ZooKeeper 集合正常運作,再執行任何維護程序。這項假設的前提是觀察者節點正常運作,且維護期間有足夠的投票者節點可用,可維持仲裁。

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

執行維護作業時,請按照下列程序判斷 ZooKeeper 節點的類型 (leader、voter 或 observer):

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

    其中 2181 是 ZooKeeper 通訊埠。您應該會看到以下格式的輸出內容:
    Zookeeper version: 3.4.5-1392090, built on 09/30/2012 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
    Node count: 653


    在節點輸出內容的「Mode」行中,您應該會看到「observer」、「leader」或「follower」 (代表非領導者的投票者),具體取決於節點設定。

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

摘要

對 ZooKeeper 整合執行維護作業的最佳方式,是一次執行一個節點。請注意:

  • 維護期間,您必須維持投票者節點的法定數量,確保 ZooKeeper 集合能正常運作
  • 關閉觀察者節點不會影響仲裁或選出領導者的能力
  • 仲裁數是根據所有資料中心的所有 ZooKeeper 節點計算得出
  • 前一部伺服器恢復運作後,再對下一部伺服器進行維護
  • 使用 nc 指令檢查 ZooKeeper 節點