關於 ZooKeeper 維護

私有雲 v4.19.01 的邊緣

ZooKeeper 球體經精心設計,即使遺失一或多個 ZooKeeper 節點,也能保持正常運作,不會遺失任何資料。只要使用這種彈性,您就能有效率地在 ZooKeeper 節點上執行維護作業,而不需停機。

關於 ZooKeeper 和 Edge

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

使用 Edge 設定檔中的 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 節點指定為「選民」節點。這表示所有節點都會參與選取 ZooKeeper 領導者。您可以將 :observer 修飾符與 ZK_HOSTS 搭配使用,以表示節點為「觀測器」節點,而不是選民。觀察器節點不會參與主要變因。

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

接著在資料中心 1 的設定檔中使用以下設定:

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

至於資料中心 2:

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

以下各節將進一步說明領導者、選民和觀察者節點,並說明新增選民和觀察者節點時應注意的事項。

關於主管、追蹤者、選民和觀察者

在多節點 ZooKeeper 安裝中,將其中一個節點指定為主要節點。系統會將所有其他 ZooKeeper 節點指定為「追蹤者」。雖然讀取作業可以從任何 ZooKeeper 節點發生,但是所有寫入要求都會轉送至主要節點。舉例來說,新的訊息處理器會新增至 Edge。該資訊會寫入 ZooKeeper 的領導者。然後複製資料。

在 Edge 安裝時,您可以將每個 ZooKeeper 節點指定為選民或觀察者。接著,所有選民 ZooKeeper 節點就會選出領先者。得獎者有一項要求,就是必須quorum能正常運作的 ZooKeeper 選民節點。集合代表在所有資料中心,有超過半數的 ZooKeeper 節點可以正常運作。

如果沒有可用的投票者節點,便不會選取領先者。在這種情況下,Zookeeper 無法處理要求。也就是說,在仲裁還原之前,您無法向 Edge Management Server 提出要求、處理 Management API 要求,或登入 Edge UI。

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

  • 您已安裝三個 ZooKeeper 節點
  • 所有 ZooKeeper 節點都是投票者
  • 該仲裁是兩個運作中的選民節點
  • 如果只有一個選民節點,ZooKeeper 節點就無法運作

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

  • 您在每個資料中心安裝了三個 ZooKeeper 節點,總共安裝了六個節點
  • 資料中心 1 有三個選民節點
  • 資料中心 2 有兩個選民節點和一個觀察者節點
  • 此仲裁由兩個資料中心的五位選民組成,因此是三個正常運作的選民節點
  • 如果可用的選民節點數量不超過兩個,ZooKeeper 集體就會無法運作

新增節點做為選民或觀察者的注意事項

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

建議您確保選民節點充足,確保一或多位選民節點降低後,ZooKeeper 節點仍能正常運作,也就是說,選民節點仍能正常運作。新增選民節點可提高仲裁數,因此您可以容許更多選民節點。

不過,增加額外的選民節點可能會對寫入效能造成負面影響,因為寫入作業需要數方同意最高者達成共識。判定領先者所需的時間取決於投票者節點的數量,隨著您新增更多選民節點,因此,建議您不要將所有節點設為投票者,

您可以新增觀察器節點,而不是新增投票者節點。新增觀察器節點可以提高整體系統讀取效能,而不會增加選擇領導者的費用,因為觀察器節點不會投票,也不會影響仲裁大小。因此,即使觀測器節點發生故障,也不會影響選出領導者的能力。不過,如果遺失觀察器節點,可能會導致 ZooKeeper 整體的讀取效能降低,因為用於服務資料要求的節點較少。

在單一資料中心,無論觀察者節點的數量為何,Apigee 都建議您設定不超過五位投票者。在兩個資料中心,Apigee 建議您在兩個資料中心內的投票者人數不超過 9 人 (其中五位,在另一個資料中心,另外 4 位)。接著,您可以視需求新增任意數量的觀察器節點。

移除 Zookeeper 節點

您可能會基於多種原因而要移除 Zookeeper 節點,例如節點毀損或新增至錯誤的環境。

本節說明如何在節點停止運作且無法存取時,移除 Zookeeper 節點。

如何移除 Zookeeper 節點:

  1. 編輯靜音設定檔,並移除要移除的 Zookeeper 節點的 IP 位址。
  2. 重新執行 setup 指令,讓 Zookeeper 重新設定剩餘的 ZooKeeper 節點:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
  3. 重新啟動所有 Zookeeper 節點:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
  4. 重新設定 Management Server 節點:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. 重新設定所有路由器:
    /opt/apigee/apigee-service/bin/apigee-service edge-router setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  6. 重新設定所有訊息處理器:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  7. 重新設定所有 Qpid 節點:
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
  8. 重新設定所有 Postgres 節點:
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart

維護作業注意事項

只需在單一節點上執行 ZooKeeper 即可完整運作,而且無須停機。透過確保一次只有一個 ZooKeeper 節點,您可以確保選中的投票者節點隨時都能使用。

多個資料中心的維護作業

使用多個資料中心時,請記住,ZooKeeper 組合無法區分不同的資料中心。ZooKeeper 組件集中檢視所有資料中心內所有的 ZooKeeper 節點。

ZooKeeper 在計算仲裁時,不會考量特定資料中心的選民節點位置。個別節點可在資料中心之間向下移動,但只要群數在整個組合中保留,ZooKeeper 仍會繼續運作。

維護作業的影響

有時候,您必須利用 ZooKeeper 節點 (包括選民節點或觀察器節點) 進行維護。舉例來說,您可能需要升級節點上的 Edge 版本、託管 ZooKeeper 的機器可能會失敗,或是因其他原因 (例如網路錯誤) 而無法使用節點。

如果停止運作的節點是觀察器節點,在還原節點之前,ZooKeeper 效能的效能可能會有些微下降。如果節點是選民節點,就會因為參與主要選舉程序的節點遺失,進而影響 ZooKeeper 整體的可行性。無論選民節點停擺的原因為何,維持可用選民節點的數仍至關重要。

維護程序

只在確認 ZooKeeper 模組能正常運作之後才執行維護程序。這個情況假設觀測器節點可以正常運作,且維護期間有足夠的選民節點來維持仲裁。

滿足這些條件時,任意大小的 ZooKeeper 可以容忍單一節點的遺失,不會遺失資料,也不會對效能造成實質的影響。也就是說,您可以對機群的任何節點執行維護作業,前提是該節點一次只能位於一個節點。

執行維護作業時,請使用以下程序確定 ZooKeeper 節點 (領導者、選民或觀察者) 的類型:

  1. 如果並未安裝在 ZooKeeper 節點上,請安裝 nc
    sudo yum install nc
  2. 在節點上執行下列 nc 指令,其中 2181 是 ZooKeeper 通訊埠:
    echo stat | nc localhost 2181

    您應該會看到下列格式的輸出內容:

    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 行中,視節點設定而定,您應該會看到 observerleaderfollower (表示非領導者的選民)。

  3. 在每個 ZooKeeper 節點上重複執行步驟 1 和 2。

摘要

在 ZooKeeper 整體上執行維護作業的最佳方式,是一次只執行一個節點。請記得:

  • 維護期間,您必須在投票期間維持仲裁節點的數量,以確保 ZooKeeper 整體功能正常運作。
  • 關閉觀察器節點不會影響群數或選擇領導者的能力。
  • 計算結果是以所有資料中心內所有 ZooKeeper 節點為計算依據。
  • 先前的伺服器運作後,繼續維護下一項伺服器。
  • 使用 nc 指令檢查 ZooKeeper 節點。