關於 ZooKeeper 維護

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 修飾符和 ZK_HOSTS,表示節點是觀察器節點,而非投票者。觀察器節點不會參與領導者選舉。

建立多個 Edge 資料中心時,或單一資料中心有大量 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 安裝中,其中一個節點會指定為「leader」。所有其他 ZooKeeper 節點則會指定為「追隨者」。雖然可以從任何 ZooKeeper 節點讀取資料,但所有寫入要求都會轉送給領導者。舉例來說,Edge 會新增 Message Processor。該資訊會寫入 ZooKeeper 領導者。所有追蹤者都會複製資料。

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

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

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

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

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

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

新增節點做為投票者或觀察者的注意事項

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

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

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

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

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

移除 Zookeeper 節點

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

本節說明如何在 Zookeeper 節點故障且無法連線時,移除該節點。

如要移除 Zookeeper 節點:

  1. 編輯無聲設定檔,並移除要移除的 Zookeeper 節點 IP 位址。
  2. 重新執行 Zookeeper 的 setup 指令,重新設定其餘 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. 重新設定管理伺服器節點:
    /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 仍可正常運作。

維護作業影響

您必須在不同時間關閉 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 行中,您應該會看到 observer、leader 或 follower (表示不是領導者的選民),具體取決於節點設定。

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

摘要

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

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