將ZooKeeper遷移到Kubernetes的新方法 - hubspot

banq發表於2020-04-10

我們最近將數百個ZooKeeper例項從單個伺服器例項遷移到Kubernetes,而沒有停機。我們的方法使用了強大的Kubernetes功能(例如端點)來簡化流程,因此我們為希望遵循我們腳步的任何人共享該方法的高階概述。有關重要的聯網先決條件,請參見最後。

傳統ZooKeeper遷移方法
ZooKeeper是許多分散式系統的基礎,它使它們成為一個強大的平臺,可以聚集並參加會議並形成叢集。在幕後,它依靠一種相對基本的方法來形成叢集:每個伺服器例項都有一個配置檔案,其中列出了所有成員主機名和數字ID,並且所有伺服器都具有相同的伺服器列表,如下所示:
 
server.1 =主機1:2888:3888
server.2 =主機2:2888:3888
server.3 =主機3:2888:3888
 
每個伺服器都有一個名為myid的唯一檔案,以告訴它與該列表對應的數字id。
只要不違反關鍵規則,就可以新增和刪除主機:每臺伺服器必須能夠達到其配置檔案中列出的伺服器的法定人數(定義為簡單多數)。將ZooKeeper伺服器遷移到新例項的傳統方法涉及較高的層次:

  1. 使用伺服器列表中的“ server.4 = host:4…”配置並啟動新主機
  2. 更新現有主機上的配置檔案以新增新伺服器條目,並從其伺服器列表中刪除已淘汰的主機
  3. 滾動重啟舊主機(3.4x分支中沒有動態伺服器配置)
  4. 更新客戶端中的連線字串(如果客戶端在錯誤時重新解析DNS,則可能只是更改CNAME記錄)

這種方法的缺點是許多配置檔案更改和滾動重新啟動,您可能需要或可能沒有可靠的自動化。當我們開始將ZooKeeper遷移到Kubernetes時,我們開始考慮這種方法,但是找到了一種更簡單的方法。也更安全,因為根據我們的經驗,每次新的領導人選舉都有很小的風險,即花費足夠長的時間來壓倒依賴他們的系統。

新的方法
我們的方法包括將現有的ZooKeeper伺服器包裝在Kubernetes服務中,然後使用相同的ZooKeeper ID進行一對一的伺服器到主機的替換。這僅需要一次滾動重新啟動即可重新配置現有的ZK例項,然後一步一步關閉伺服器。我們不會在這裡討論為ZooKeeper配置Kubernetes拓撲的方法或低階的準備情況檢查的瑣碎,因為有很多方法可以實現各種優點和缺點。不論頂層拓撲如何,下面討論的概念都是一樣的。
我們將分五個步驟進行:

  1. 完成前提條件,以確保我們的ZooKeeper叢集已準備好遷移
  2. 在包裝ZooKeeper服務的Kubernetes中建立ClusterIP服務
  3. 配置ZooKeeper客戶端以連線到ClusterIP服務
  4. 配置ZooKeeper伺服器例項以透過ClusterIP服務地址執行對等事務
  5. 用Kubernetes窗格中的ZooKeeper例項替換伺服器上執行的每個ZooKeeper例項

對於下面的每個步驟,我們將包括一個基礎架構拓撲圖。為了便於理解,這些圖將僅包含兩個ZooKeeper例項,即使一個例項不想建立少於三個的叢集。

點選標題見原文詳細介紹

相關文章