將ZooKeeper遷移到Kubernetes的新方法 - hubspot
我們最近將數百個ZooKeeper例項從單個伺服器例項遷移到Kubernetes,而沒有停機。我們的方法使用了強大的Kubernetes功能(例如端點)來簡化流程,因此我們為希望遵循我們腳步的任何人共享該方法的高階概述。有關重要的聯網先決條件,請參見最後。
傳統ZooKeeper遷移方法
ZooKeeper是許多分散式系統的基礎,它使它們成為一個強大的平臺,可以聚集並參加會議並形成叢集。在幕後,它依靠一種相對基本的方法來形成叢集:每個伺服器例項都有一個配置檔案,其中列出了所有成員主機名和數字ID,並且所有伺服器都具有相同的伺服器列表,如下所示:
server.1 =主機1:2888:3888
server.2 =主機2:2888:3888
server.3 =主機3:2888:3888
每個伺服器都有一個名為myid的唯一檔案,以告訴它與該列表對應的數字id。
只要不違反關鍵規則,就可以新增和刪除主機:每臺伺服器必須能夠達到其配置檔案中列出的伺服器的法定人數(定義為簡單多數)。將ZooKeeper伺服器遷移到新例項的傳統方法涉及較高的層次:
- 使用伺服器列表中的“ server.4 = host:4…”配置並啟動新主機
- 更新現有主機上的配置檔案以新增新伺服器條目,並從其伺服器列表中刪除已淘汰的主機
- 滾動重啟舊主機(3.4x分支中沒有動態伺服器配置)
- 更新客戶端中的連線字串(如果客戶端在錯誤時重新解析DNS,則可能只是更改CNAME記錄)
這種方法的缺點是許多配置檔案更改和滾動重新啟動,您可能需要或可能沒有可靠的自動化。當我們開始將ZooKeeper遷移到Kubernetes時,我們開始考慮這種方法,但是找到了一種更簡單的方法。也更安全,因為根據我們的經驗,每次新的領導人選舉都有很小的風險,即花費足夠長的時間來壓倒依賴他們的系統。
新的方法
我們的方法包括將現有的ZooKeeper伺服器包裝在Kubernetes服務中,然後使用相同的ZooKeeper ID進行一對一的伺服器到主機的替換。這僅需要一次滾動重新啟動即可重新配置現有的ZK例項,然後一步一步關閉伺服器。我們不會在這裡討論為ZooKeeper配置Kubernetes拓撲的方法或低階的準備情況檢查的瑣碎,因為有很多方法可以實現各種優點和缺點。不論頂層拓撲如何,下面討論的概念都是一樣的。
我們將分五個步驟進行:
- 完成前提條件,以確保我們的ZooKeeper叢集已準備好遷移
- 在包裝ZooKeeper服務的Kubernetes中建立ClusterIP服務
- 配置ZooKeeper客戶端以連線到ClusterIP服務
- 配置ZooKeeper伺服器例項以透過ClusterIP服務地址執行對等事務
- 用Kubernetes窗格中的ZooKeeper例項替換伺服器上執行的每個ZooKeeper例項
對於下面的每個步驟,我們將包括一個基礎架構拓撲圖。為了便於理解,這些圖將僅包含兩個ZooKeeper例項,即使一個例項不想建立少於三個的叢集。
點選標題見原文詳細介紹
相關文章
- 我如何將部落格遷移到 Kubernetes(上)
- 我如何將部落格遷移到 Kubernetes(下)
- (原)將Oracle遷移到SQLServerOracleSQLServer
- 如何將 CentOS遷移到 AlmaLinux?CentOSLinux
- 將表 從mysql 遷移到oracleMySqlOracle
- 將nodejs遷移到D盤NodeJS
- 將我的部落格遷移到亞馬遜雲端(1)亞馬遜
- 將我的部落格遷移到亞馬遜雲端(2)亞馬遜
- 容器化|自建 MySQL 叢集遷移到 KubernetesMySql
- 將 flutter_web 遷移到 flutter1.9+FlutterWeb
- Python 將所有 Bug 遷移到 GitHub 中PythonGithub
- 將EJB 3應用程式遷移到GlassFish
- 將typescript+react的webpack專案遷移到parcelTypeScriptReactWeb
- [譯] 將專案遷移到 Yarn 然後又遷回 npmYarnNPM
- 將資料庫遷移到ASM的實驗記錄資料庫ASM
- 使用SpringCloud將單體遷移到微服務SpringGCCloud微服務
- [譯] 將現有的 API 從 REST 遷移到 GraphQLAPIREST
- 使用RAM將檔案系統遷移到ASMASM
- 將應用程式從Sql Server遷移到OracleSQLServerOracle
- 將maven、gradle倉庫遷移到d盤MavenGradle
- 透過MySQL Workbench 將 SQL Server 遷移到GreatSQLMySqlServer
- Flutter 將您的外掛遷移到新的Android APIFlutterAndroidAPI
- 遷移到ASMASM
- 口袋妖怪Pokémon GO遷移到谷歌Kubernetes容器雲Go谷歌
- Ora2Pg:將Oracle遷移到PostgreSQL的免費工具OracleSQL
- WinUI遷移到即將"過時"的.NET MAUI個人體驗UI
- 將ServiceLoader遷移到Java 9模組系統 - frankelJava
- Flutter #03 將原有的 Flutter app 遷移到 Flutter 2.0FlutterAPP
- 將spfile從ASM裡遷移到檔案系統ASM
- 將pentaho資料庫遷移到oracle資料庫資料庫Oracle
- 利用rman將本地資料檔案遷移到asmASM
- 使用rman將資料庫遷移到ASM例項資料庫ASM
- svn 遷移到gitGit
- svn遷移到gitGit
- SQLITE 遷移到 MYSQLSQLiteMySql
- 【遷移】SqlServer 遷移到 MySQL 方法ServerMySql
- [譯] 將一箇舊的大型專案遷移到 Python 3Python
- 將你的應用遷移到 Python 3 的三個步驟Python