雲計算

阿里巴巴雲原生 etcd 服務集群管控優化實踐

頭圖.png

作者 | 陳星宇(宇慕)
來源 | 阿里巴巴雲原生公眾號

背景

Kubernetes 採用 etcd 存儲其內部核心元數據信息。經過這些年的發展,尤其是伴隨著這兩年雲原生的快速發展,Kubernetes被人們廣泛認同並大規模被使用。伴隨阿里內部容器平臺 ASI 及公有云 ACK 集群數飛速增長,底層存儲 etcd 集群獲得井噴式地增長,etcd 集群數從原來的十幾個發展到了目前達到幾千個,它們分佈在世界各地,為上層 Kubernetes 集群以及其他產品服務,服務用戶超萬個。

這些年,阿里雲原生 etcd 服務發生了翻天覆地的變化,這篇文章主要分享一下 etcd 服務在面對業務量大規模增長下遇到的問題以及我們是如何解決的,希望對讀者瞭解 etcd 的使用和管控運維提供經驗分享。

具體將分三個部分進行介紹:

  • etcd 集群成本優化,利用率提升
  • etcd 管控運維效率提升
  • etcd 內核架構升級

etcd 集群運行成本優化、利用率提升

近些年,etcd 集群數井噴式增長。它的運行形態經歷了從 1.0 到 2.0 到 3.0 的變化,具體如下圖:

1.jpg

1.0 物理機時代

在一開始,我們管控的 etcd 集群數比較少,我們在宿主機上使用 docker 直接運行 etcd 容器。即圖中的 1.0 模式。

2.0 雲上時代

1.0 模式運行 etcd 非常簡單,但也存在使用物理機運行軟件低效等常見問題,隨著阿里巴巴全面上雲的步伐,etcd 也全面將運行環境切到了雲上 ecs,存儲也換成了雲盤 ssd 或 essd。

全面上雲優勢明顯,利用阿里雲底層 Iaas 的 ecs 彈性和存儲雲盤,etcd 集群可快速完成垂直水平伸縮,故障遷移也比 1.0 時容易的多。以集群升配操作為例,整個升級時間從最初的半小時降低到現在的 10 分鐘,可以兼顧業務使用峰值和日常普通壓力,穩定承載阿里內部雙十一業務高峰以及外部多個公有云客戶春節大促活動。

2.jpg

3.0 大規模雲上時代

隨著 etcd 集群數大量增長,運行這些集群需要的 ecs 與雲盤成本越來越高,etcd 已成為容器服務花費資金最多的部分之一,etcd 運行的成本成為我們必須面對並解決優化的問題。

2.0 模式下使用獨佔 ecs 和雲盤我們發現 etcd 資源利用率比較低,存在較多的資源浪費,我們將 2.0 模式進行了進一步升級:將集群進行混部,降級運行成本。但混部之後我們遇到計算資源爭搶和集群穩定性等風險,時常發生 etcd 集群切主,導致上層依賴 etcd 軟件功能異常,例如 Kubernetes controller 切主影響用戶服務。

針對這些問題,我們首先將不同的 etcd 集群根據不同的服務質量和 SLO 拆分成多種類型,類似 Kubernetes 中 Best effort、Burstable 和 Guaranteed 3 種類型,把不同類型的集群放在不同的資源池中運行管理。混合部署由於採用了高度打散, 隨機的模式, 再加上我們的集群用戶很多,對 etcd 的熱點請求被分割的很散,沒有聚集,穩定性問題例如集群切主次數大量降低。在保證穩定性的前提下提升了資源利用率的目的,成本下降明顯。

管控運維效率提升

早期我們運維管理 etcd 集群的方式比較簡單,採用 shell 腳本基本可以涵蓋 etcd 集群生命週期全過程,例如集群創建、刪除,遷移都利用腳本完成。以前的這種小作坊模式隨著集群數的井噴式增長越來越不適用,我們遇到 etcd 集群生產速度慢,適配底層 IaaS 變化難度大等問題,運行時集群管理效率也很低。

針對這些運維管控效率低的問題,我們擁抱雲原生生態,用 Kubernetes 作為運行 etcd 的底座,並基於開源的 etcd-operator,經過幾年的研發,適配阿里雲底層 IaaS,修改了很多開源的 bug, 將 etcd 管控運維動作標準化,功能覆蓋 etcd 管控全生命週期,推出了新的 etcd 運維管控後臺 alpha, 我們利用 alpha 統一了阿里巴巴內部的 etcd 集群及公有云 ACK 上的 etcd 集群管控,極大地提高了我們管控運維 etcd 集群的效率。目前我們投入 0.5 人力就可以管理近萬集群,人效比顯著。下圖展示了他的控制界面。

3.jpg

下面我們詳細介紹一下 alpha 的具體功能,首先我們看一下下面這幅圖,它描繪了一個 etcd 集群從創建-》運行-》故障-》再運行-》停止-》銷燬的典型生命週期大圖。

4.jpg

alpha 做的事情就是覆蓋圖上的方方面面,具體分為以下兩部分:

1. etcd 集群生命週期管理

  • etcd 集群創建,銷燬,停止,升級,故障恢復等。
  • etcd 集群狀態監控,包括集群健康狀態、member 健康狀態,訪問量,存儲數據量等。
  • etcd 異常診斷、預案、黑盒探測,配置巡檢等。

2. etcd 數據管理

etcd 數據管理包括數據遷移、備份管理以及恢復,髒數據清理,熱點數據識別等。這塊是 alpha 的特色,我們發現開源或其他產品這方面做得工作很少。我們做的功能具體如下。

1)etcd 數據備份及恢復

兩種方式如下:

  • 傳統模式冷備:支持從 etcdserver 將 snapshot 數據備份至阿里雲 OSS 或本地,故障時可以根據這個 snapshot 備份文件恢復。
  • raft learner 熱備:對於新版本的使用了 raft learner 特性的 etcd 集群,我們可以使用 learner 作為熱備節點,當故障發生時,我們強制將 learner 轉換為正常節點,並將客戶端訪問切到這個新節點上,相比於傳統方式故障恢復時間更快,並且 learner 可以部署在不同的地域,實現異地多活的能力。

2)髒數據清理

我們可以根據指定 etcd key 前綴刪除垃圾 kv 的能力,降低 etcd server 存儲壓力。

3)熱點數據識別

我們開發了按照 etcd key 前綴進行聚合分析熱點 key 的能力,另外還可以分析不同 key 前綴的 db 存儲使用量。利用這個能力,我們多次幫助客戶排查分析 etcd 熱點 key,解決 etcd 濫用問題,這個在大規模 etcd 集群上是一個必備的能力。

4)數據遷移能力,兩種方式

  • snapshot 方式:通過 etcdsnapshot 備份,再恢復進行遷移方式。
  • raft learner 模式:我們使用 raft learner 特性可以快速從原集群分裂衍生出新的集群實現集群遷移。

5)數據水平拆分

當集群數據存儲數據量超大時,我們支持使用水平拆分將不同客戶數據拆分存儲到不同的 etcd 集群中。我們在阿里內部 ASI 集群就用了這個功能,使其支持超萬規模節點。

總結一下,我們採用 Kubernetes 作為 etcd 集群的運行底座,基於開源 operator 改良適配研發了新的 etcd 管控軟件 alpha,覆蓋 etcd 全生命週期管控工作,一套軟件管理所有 etcd 集群,顯著提升了 etcd 管控效率。

etcd 內核架構升級更新

etcd 是雲原生社區中非常重要的一款軟件,幾年的演進發展,解決了很多 bug, 提升了內核的性能和存儲容量。但開源軟件就像是一個毛坯房,真正在生產環境使用問題還是有的,阿里內部有更大數據存儲規模和性能方面的要求,另外 etcd 自身多租戶共享使用 QoS 控制能力很弱,不適用於我們的使用場景。

我們早期使用開源的 etcd 3.2/3.3 版本, 針對一些我們的使用場景需求,後續我們加入了一些穩定性和安全增強,形成了現在我們使用阿里內部版本,如下展示了重要的幾個不同:

1. 自適應歷史數據清理 compact 技術

etcd 會存儲用戶數據的歷史值,但是它不能長久的存儲所有歷史值,否則存儲空間會不足。因此 etcd 內部會利用 Compact 機制週期性地清理歷史值數據。當我們的集群超大,數據量超大時,每次清理對運行時性能影響很大,可以類比一次 full gc。本技術可以根據業務請求量調整 Compact 時機,避開業務使用高峰期, 減少干擾。

2. 基於 raft learner 的只讀節點水平擴展能力

raft learner 是 raft 協議中的一種特殊的角色,他不參與 leader 選舉, 但是可以從 leader 處獲得集群中最新的數據,因此他可以作為集群的只讀節點進行水平擴展,提升集群處理讀請求的能力。

3. 基於 raft learner 的熱備節點

除了上面說的 raft learner 可以作為只讀節點,我們也可以將其使能用於作為集群的熱備節點,目前我們廣泛使用熱備節點做異地雙活,保證集群高可用。

4. etcd 集群 QoS 能力

公有云上,我們有大量的用戶採用共享 etcd 集群的方式使用 etcd, 在這種多租戶使用場景下我們即需要保證租戶公平使用 etcd 存儲資源,也要保證穩定性即不會因為某一租戶的濫用將集群整體搞掛,影響其他租戶使用。為此我們自研了相應的QoS限流功能,可以實現不同租戶運行時讀寫數據流量限制以及靜態存儲數據空間限制。

總結

阿里雲採用 etcd 服務化做容器服務的核心數據存儲系統已經有了將近 4 年的歷史,我們積累了大量的運維管控 etcd 的經驗和使用 etcd 的最佳實踐,這篇文章分享了我們在降本提效,內核優化方面的一些實踐。

近年來隨著雲原生的浪潮,etcd 也獲得前所未有地急速發展,etcd 去年已從 cncf 正式畢業。阿里云為 etcd 社區貢獻了重要的 feature 和 bug fix,積極參與社區,汲取社區營養,反哺貢獻社區,可以預見未來 etcd 集群還會繼續保持高速的增長,我們將繼續在降本增效,保證穩定性和可靠性上持續投入努力。我們非常歡迎有興趣的同學加入我們,聯繫 [email protected]

KubeMeet 杭州站開放報名!

5.png

4 月 17 日,雲原生基金會 CNCF 和阿里巴巴聯合主辦的「KubeMeet 開發者沙龍·雲原生應用管理專場」來到杭州啦!這裡有 Kubernetes 生態開發者都在關注的開源項目,以及阿里巴巴、攜程、第四範式的一線雲原生落地實踐。點擊此處趕緊報名吧

Leave a Reply

Your email address will not be published. Required fields are marked *