將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(下)
- 將nodejs遷移到D盤NodeJS
- 如何將 CentOS遷移到 AlmaLinux?CentOSLinux
- 容器化|自建 MySQL 叢集遷移到 KubernetesMySql
- Python 將所有 Bug 遷移到 GitHub 中PythonGithub
- 如何將您的 Eventlet 專案遷移到 Asyncio
- 使用SpringCloud將單體遷移到微服務SpringGCCloud微服務
- 將 flutter_web 遷移到 flutter1.9+FlutterWeb
- 將maven、gradle倉庫遷移到d盤MavenGradle
- Flutter 將您的外掛遷移到新的Android APIFlutterAndroidAPI
- [譯] 將專案遷移到 Yarn 然後又遷回 npmYarnNPM
- 將SpringBoot PetClinic REST遷移到Quarkus的開源專案Spring BootREST
- 透過MySQL Workbench 將 SQL Server 遷移到GreatSQLMySqlServer
- [譯] 將一箇舊的大型專案遷移到 Python 3Python
- Ora2Pg:將Oracle遷移到PostgreSQL的免費工具OracleSQL
- 將你的應用遷移到 Python 3 的三個步驟Python
- 將spfile從ASM裡遷移到檔案系統ASM
- 將ServiceLoader遷移到Java 9模組系統 - frankelJava
- 將 CentOS 8 作業系統遷移到 Oracle LinuxCentOS作業系統OracleLinux
- Flutter #03 將原有的 Flutter app 遷移到 Flutter 2.0FlutterAPP
- svn 遷移到gitGit
- 【遷移】SqlServer 遷移到 MySQL 方法ServerMySql
- WinUI遷移到即將"過時"的.NET MAUI個人體驗UI
- 重構案例:將純HTML/JS專案遷移到WebpackHTMLJSWeb
- 在將單體遷移到微服務之前需要了解的模式 - Abhishek微服務模式
- WSL遷移到其他磁碟
- 將您的基於 Accelerator 的 SAP 電商雲 Storefront 遷移到 Spartacus Storefront
- Facebook將花費幾年時間將資料庫遷移到MySQL 8.0資料庫MySql
- 【GitHub】建立Git分支將Hexo部落格遷移到其它電腦GithubHexo
- 經驗分享:將微服務遷移到Spring WebFlux - allegro.tech微服務SpringWebUX
- Python 決定放棄 BPO,將所有 Bug 遷移到 GitHub 中PythonGithub
- Wix如何零停機將將2000個微服務遷移到多叢集Kafka?微服務Kafka
- 一鍵將 Laf 遷移到 Sealos 雲開發(Sealaf),有手就行!
- Zenlayer如何將萬臺裝置監控從Zabbix遷移到Flashcat
- 使用 .NET 升級助手將.NET Framework應用遷移到.NET 5Framework
- 如何將物理機Windows系統遷移到VMware虛擬機器?Windows虛擬機
- 如何透過分解和增量更改將單體遷移到微服務?微服務