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 節點:
- 編輯無聲設定檔,並移除要移除的 Zookeeper 節點 IP 位址。
- 重新執行 Zookeeper 的
setup指令,重新設定其餘 ZooKeeper 節點:/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
- 重新啟動所有 Zookeeper 節點:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
- 重新設定管理伺服器節點:
/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 - 重新設定所有路由器:
/opt/apigee/apigee-service/bin/apigee-service edge-router setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-router restart - 重新設定所有訊息處理器:
/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 - 重新設定所有 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 - 重新設定所有 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 節點類型 (領導者、投票者或觀察者):
- 如果 ZooKeeper 節點未安裝
nc,請安裝:sudo yum install nc
- 在節點上執行下列
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(表示不是領導者的選民),具體取決於節點設定。 - 在每個 ZooKeeper 節點上重複步驟 1 和 2。
摘要
對 ZooKeeper 整合執行維護作業的最佳方式,是一次執行一個節點。請注意:
- 在維護期間,您必須維持投票節點的法定人數,確保 ZooKeeper 集合能正常運作。
- 移除觀察節點不會影響法定人數或選出領導者的能力。
- 仲裁數是根據所有資料中心的所有 ZooKeeper 節點計算得出。
- 前一部伺服器恢復運作後,再對下一部伺服器進行維護。
- 使用
nc指令檢查 ZooKeeper 節點。