天天看點

分布式系統的磁盤均衡政策

分布式系統設計中的一大挑戰,是對磁盤的均衡使用,這在一個全新的叢集中,是比較容易實作的。關鍵問題在于,随着時間的推移,我們需要在叢集中不斷地新增或者移除裝置,在分布式檔案存儲系統 YRCLoudFile 産品中,我們可能會使用冷熱分層政策将檔案下刷至對象存儲,這些行為都可能會導緻叢集内的磁盤使用不均,進而産生通路熱點、資源使用率低等問題。

分布式系統的磁盤均衡政策

資料分布算法決定了磁盤均衡的最終效果,一個良好的分布政策,往往需要完成資料分布均勻的基本目标,同時在此基礎上兼顧節點異構和故障域隔離。

  • 節點異構 —— 存儲節點間的容量或性能差異
  • 故障域隔離 —— 例如不同資料中心、機房、機櫃、交換機、機器等,均可以組成一個故障域,盡量使主備磁盤落在不同的故障域中

常見的分布算法,可根據是否單獨存儲中繼資料分成兩大類,對于不單獨存儲中繼資料的類别而言,常見的分布算法有以下幾種。

01 哈希分布

最直接的雜湊演算法,通過資料中某個特征值,利用哈希函數進行計算,進而建立起資料與節點間的映射關系。

通過一個散布良好的哈希函數,可以将資料均勻地分布到各個節點中去,保證資料均衡,并且隻要根據資料的特征值,即可直接快速地計算出資料所在的節點。這個方法的具體效果取決于哈希函數本身的優劣,并且裝置的添加或删除,會導緻原來的映射關系失效,需要将所有的映射關系進行重新計算,并且根據新的關系來移動資料。

分布式系統的磁盤均衡政策

哈希分布

02 一緻性哈希分布

為了解決上述哈希分布在節點增加或删除時導緻的大量資料遷移的問題,我們在哈希分布的基礎上引入了一緻性雜湊演算法。一緻性雜湊演算法的核心資料結構是哈希環,哈希值分布在這個哈希環上,首尾相接,通常範圍是[0 ~ 2^32-1]。我們将資料根據特征值通過哈希計算得到其在哈希環上的對應位置如下:

分布式系統的磁盤均衡政策

資料映射至哈希環

再将伺服器根據特征值(例如IP或主機名)通過 hash 函數映射到哈希環上,資料将會落在哈希環上順時針的鄰近節點。

分布式系統的磁盤均衡政策

資料落盤

這樣的設計很大程度上解決了在節點移除或增加時的資料遷移量,隻會對相鄰節點的資料進行遷移。

分布式系統的磁盤均衡政策

Node3 移除時的資料遷移

03 帶有虛拟節點的一緻性哈希

一緻性哈希解決了普通雜湊演算法中大量資料遷移的問題,但也引入新的問題,就是資料盤的使用不均,而這實際上是資料分布的基本目标。

我們可以假設,雜湊演算法使資料落在哈希環上每一個位置的機率都是均等的,但是資料節點的數量卻遠小于哈希環的點數量,此時極有可能每個節點所覆寫的哈希環範圍是不均勻的,那麼這就會導緻某些節點被集中落盤;此外,如果在新加入節點後,其距離已有節點的距離較近,且處于靠後位置,那麼新加入的節點不但對于叢集帶寬沒有提升,反倒降低了叢集的磁盤使用率。

為了解決以上這些問題,我們在哈希環中引入了虛拟節點,以節點的磁盤大小和性能為權重,将虛拟節點配置設定到每個實體節點上,即每個實體節點對應一組虛拟節點,并由此決定資料落盤的實際位置。

分布式系統的磁盤均衡政策

帶虛拟節點的一緻性哈希

以上是不單獨存儲中繼資料時,我們常見的資料分布算法,對于分布式檔案系統而言,我們往往将中繼資料與資料分開存放,中繼資料中儲存了關于資料落盤的相關資訊。在這種場景下,常見的落盤算法分别是 Round-Robin 和 Available Space。

  • Round-Robin —— 輪巡選擇可用磁盤
  • Available Space —— 基于可用空間進行優先選盤
分布式系統的磁盤均衡政策

顯然,在長期運作的叢集中,輪巡算法會導緻資料分布不均,而基于可用空間的優先選盤政策,則會導緻例如節點擴容的場景中,資料集中湧入相同磁盤的問題,這在一定時間内會成為叢集的性能瓶頸。

04 YRCloudFile 的資料分布政策

從上述内容可見,無論是基于哈希表的資料分布算法還是基于可用空間的落盤算法,都有各自的局限性。在 YRCloudFile 整體架構上,從高可用和高性能的角度出發,取百家之長,做出了一系列的設計來保證磁盤的使用均衡和資料安全。

  • 叢集部署:在叢集部署時,副本模式下,對于磁盤主備分組時,可以考慮從不同故障域中選擇節點上的磁盤進行成組。
分布式系統的磁盤均衡政策
  • 容量水線:YRCloudFile 算法根據百分比可用容量(可根據配置動态調整)結合實際可用容量對磁盤進行分組,将磁盤劃分為 L0-L3 共四個組别,選盤優先級依次降低,并且設定了保護水線,不再配置設定達到保護位的磁盤。
分布式系統的磁盤均衡政策
  • 資料切片:YRCloudFile 将檔案根據資料切片數量來選擇落盤,在預設未設定落盤偏好的情況下,利用 straw 算法,從高優先級的上述水線組中根據磁盤可用容量,磁盤負載等計算權重來選擇落盤。當高優先級的組中磁盤數量不足以配置設定時,再向低級組中去補足。同時,支援使用者自定義落盤偏好,以滿足特殊的用盤需求。
  • 線上資料均衡:在極端的情況下,如果仍有磁盤資料不均的問題時,YRCloudFile 還有最後一個修補措施,那就是“線上資料均衡”功能,YRCloudFile 支援通過觸發資料遷移,在保證叢集線上正常服務的前提下,手動均衡磁盤資料,并且可以根據叢集負載情況,決定資料遷移的工作負載,避免影響正常業務的進行。

05 關于 YRCloudFile 未來設計的展望