磨刀不誤砍柴工,學好這些FusionStorage理論才能使用好這個產品。

前言

本文主要介紹了華爲分佈式存儲產品FusionStorage,詳細闡述其存儲原理,架構,讀寫機制等等。

主要功能特性

FusionStorage分佈式存儲軟件總體框架

FusionStorage分佈式存儲軟件總體框架

FusionStorage塊存儲功能-SCSI/iSCSI塊接口

FusionStorage通過VBS以SCSI或iSCSI方式提供塊接口:

  • SCSI方式:安裝VBS的物理部署、 FusionSphere或KVM等採用SCSI方式;
  • iSCSI方式:安裝VBS以外的虛擬機或主機提供存儲訪問,VMware、MS SQLServer集羣採用iSCSI模式。
    SCSI/iSCSI塊接口

FusionStorage精簡配置功能

  • 相比傳統方式分配物理存儲資源,精簡配置可顯著提高存儲空間利用率
  • FusionStorage天然支持自動精簡配置,和傳統SAN相比不會帶來性能下降。
    FusionStorage精簡配置功能

FusionStorage快照功能

  • FusionStorage快照機制,將用戶卷數據在某個時間點的狀態保存下來,可用作導出數據恢復數據之用。
  • FusionStorage快照數據在存儲時採用ROW(Redirect-On-Write)機制,快照不會引起原卷性能下降。
  • 無限次快照:快照元數據分佈式存儲,水平擴展,無集中式瓶頸,理論上可支持無限次快照。
  • 卷恢復速度快:無需數據搬遷,從快照恢復卷1S內完成(傳統SAN在幾小時級別)。
    FusionStorage快照功能

FusionStorage鏈接克隆功能

  • FusionStorage支持⼀個卷快照創建多個克隆卷,對克隆卷修改不影響原始快照和其它克隆卷。
  • 克隆卷繼承普通卷所有功能:克隆卷可支持創建快照、從快照恢復及作爲母卷再次克隆操作。
  • 支持批量進行虛擬機卷部署,在1秒時間內創建上百個虛擬機卷。
  • 支持1:2048的鏈接克隆比,提升存儲空間利用率。
    FusionStorage鏈接克隆功能

FusionStorage自定義存儲SLA

  • 根據業務訴求,用戶可自定義多種資源池SLA規格
  • 同⼀個虛擬機的不同的數據卷可歸屬不同的存儲池
    FusionStorage自定義存儲SLA

FusionStorage跨資源池的卷冷遷移

跨資源池只支持冷遷移。
跨資源池卷冷遷移:把卷從源資源池 遷移到目的資源池,即【創建目標卷】 ->【卷數據複製】 ->【刪除源卷】 ->【目標卷改名】 ->【完成】 整個過程的實現。

  • 遷移過程中,源卷不能有寫數據的操作,所以叫做“冷”遷移。
  • 亦可通過工具調用複製接口。

場景1:資源池之間的容量平衡,容量滿的池 遷移到⼀個空閒的池。
場景2: 卷在不同性能的資源池池之間的遷移,從低性能的池向高性能的池遷移。
FusionStorage跨資源池的卷冷遷移

FusionStorage彈性擴展

FusionStorage擴容後,容量、性能、帶寬、緩存等整體提升。
FusionStorage彈性擴展

分佈式SSD Cache加速

  • FusionStorage集羣內各服務器節點的緩存和帶寬都均勻分佈到各個服務器節點上,不存在獨立存儲系統中大量磁盤共享計算設備和存儲設備之間有限帶寬的問題。
  • FusionStorage支持將服務器部分內存用作讀緩存, NVDIMM和SSD用作寫緩存,數據緩存均勻分佈到各個節點上,所有服務器的緩存總容量遠大於採用外置獨立存儲的方案。即使採用大容量低成本的SATA硬盤,FusionStorage仍然可以發揮很高的IO性能,整體性能提升1~3倍。
  • FusionStorage支持SSD用作數據緩存,除具備通常的寫緩存外,增加熱點數據統計和緩存功能,加上其大容量的優勢,進一步提升了系統性能。
    分佈式SSD Cache加速

FusionStorage Cache寫機制

  • OSD在收到VBS發送的寫IO操作時,會將寫IO緩存在SSD cache後完成本節點寫操作。
  • OSD會週期將緩存在SSD cache中的寫IO數據批量寫入到硬盤,寫Cache有一個水位值,未到刷盤週期超過設定水位值也會將Cache中數據寫入到硬盤中。
  • FusionStorage支持大塊直通,按缺省配置大於256KB的塊直接落盤不寫Cache,這個配置可以修改。
    FusionStorage Cache寫機制

FusionStorage大塊直通

  • 從下面的性能數據看,對於小塊隨機IOPS,SSD對HDD存在明顯的性能優勢。
  • 在大塊順序IO的場景下,雖然SSD卡存在較大帶寬優勢,但SSD盤受SAS/SATA接口帶寬的影響,和HDD相比,優勢並不明顯。
  • 考慮到⼀個SSD盤會同時會給多個硬盤作爲Cache使用,當⼀個SSD盤同時給超過5個HDD作爲Cache時,直接操作HDD反而性能會更高。
  • 大塊IO性能會更佳;
  • 釋放原來大塊IO佔用的Cache空間,可以緩存更多的隨小塊IO, 變相提高了隨機小塊IO的Cache命中率,提升系統整體性能
  • 提高寫IO操作次數,提升SSD卡使用壽命
    FusionStorage大塊pass throught

FusionStorage Cache讀機制

FusionStorage的讀緩存採用分層機制

  • 第⼀層爲內存cache, 內存cache採用LRU機制緩存數據。
  • 第二層爲SSD cache, SSD cache採用熱點讀機制,系統會統計每個讀取的數據,並統計熱點訪問因子,當達到閾值時,系統會自動緩存數據到SSD中,同時會將長時間未被訪問的數據移出SSD。
  • 第三層爲SSD write寫緩存
  • 第四層爲HDD機械磁盤。

FusionStorage預讀機制,統計讀數據的相關性,讀取某塊數據時自動將相關性高的塊讀出並緩存到SSD中。
Cache讀機制

動態Cache調整

  • 分佈式存儲都支持SSD作爲Cache, 部分廠商只提供讀Cache, 部分廠商提供讀寫Cache。
  • 對於讀寫Cache的廠商,基本上都採用讀寫Cache靜態配置的方法,缺省按照70:30的比例配置
    該配置對於讀寫均衡性場景來說,可以讓系統整體運行良好,但是業務千變萬化,應用場景也千變萬化。有的場景是以讀爲主(OLAP) 場景,有的場景以寫爲主,靜態配置會導致SSD空間的浪費,無法發揮系統最大的效率。
  • 華爲FusionStorage支持根據系統運行場景,自動均衡配置讀寫Cache的比例,讓SSD Cache在最大程度上發揮作用。

FusionStorage掉電保護

  • 系統運行過程中可能會出現服務器突然掉電的情況, FusionStorage使用保電介質來保存元數據和緩存數據,以防掉電而丟失。
  • FusionStorage支持的保電介質爲NVDIMM內存條或SSD。 程序運行過程中會把元數據和緩存數據寫入保電介質中,節點異常掉電並重啓後,系統自動恢復保電介質中的元數據和緩存數據。
    FusionStorage掉電保護

數據可靠性

FusionStorage跨服務器故障容忍

  • 數據可靠是第⼀位的, FusionStorage建議3副本配置部署。
  • Google, facebook的副本數>=3副本。
  • 左側雙故障節點情況,爲3副本情形下。
  • 如果服務器在同⼀個機櫃,無法抗拒機櫃整體斷電斷網等故障類型。
    FusionStorage跨服務器故障容忍

FusionStorage跨機櫃故障容忍

  • 機櫃間要求有獨立網絡和電力供應。
  • 如果機櫃整體在同⼀個機房,無法抗拒機房整體斷電斷網,自然災害等故障類型。
  • 小於12臺服務器不能使用機櫃級安全。
  • 超過64臺服務器,必須使用機櫃級安全 。
    FusionStorage跨機櫃故障容忍

FusionStorage跨機房故障容忍

FusionStorage跨機房故障容忍

FusionStorage快速數據重建

  • FusionStorage中的每個硬盤都保存了多個DHT分區(Partition),這些分區的副本按照策略分散在系統中的其他節點。當FusionStorage檢測到硬盤或者節點硬件發生故障時,自動在後臺啓動數據修復。
  • 由於分區的副本被分散到多個不同的存儲節點上,數據修復時,將會在不同的節點上同時啓動數據重建,每個節點上只需重建一小部分數據,多個節點並行工作,有效避免單個節點重建大量數據所產生的性能瓶頸,對上層業務的影響做到最小化。
     FusionStorage快速數據重建

DHT數據路由原理

基礎概念

  • 資源池:FusionStorage中⼀組硬盤構成的存儲池。
  • Volume:應用卷,代表了FusionStorage向上層呈現的一個邏輯存儲單元。
    資源池
    數據副本: FusionStorage採用數據多副本備份機制來保證數據的可靠性,即
    同⼀份數據可以複製保存爲2~3個副本。
    數據副本
  • DHT:Distributed Hash Table,FusionStorage中指數據路由算法。
  • Partition:代表了⼀塊數據分區,DHT環上的固定Hash段代表的數據區。
  • Key-Value:底層磁盤上的數據組織成Key-Value的形式,每個Value代表⼀個塊存儲空間。
    DHT

FusionStorage數據路由原理

FusionStorage數據路由採取分層處理方式:

  • VBS通過計算確定數據存放在哪個服務器的哪塊硬盤上。
  • OSD通過計算確定數據存放在硬盤的具體位置。
    FusionStorage數據路由原理

FusionStorage視圖

  • IO View: partition和主osd節點的映射關係。
  • Partition View: partition對應的主備osd關係, ioview是partitionview的⼦集。
  • MDC通過心跳感知OSD的狀態; OSD每秒上報給MDC特定的消息(比如: OSD容量等),當MDC連續在特定的時間內(當前系統爲5s) 沒有接收到OSD的心跳信息,則MDC認爲該OSD已經出故障(比如: OSD進程消失或OSD跟MDC間網絡中斷等), MDC則會發送消息告知該OSD需要退出, MDC更新系統的OSD視圖並給每臺OSD發送視圖變更通知, OSD根據新收到的視圖,來決定後續的操作對象。
  • 多副本複製取決於MDC的視圖;兩副本情況下,當client發送⼀個寫請求到達該OSD的時候,該OSD將根據視圖的信息,將該寫請求複製⼀份到該Partition的備OSD。 多副本情況下,則會複製發送多個寫請求到多個備OSD上。
    FusionStorage視圖

DHT數據路由過程

  • 系統初始化時, FusionStorage將哈希空間(0~2^32)劃分爲N等份,每1等份是1個分區(Partition), 這N等份按照硬盤數量進行均分。
    例如:⼆副本場景下,系統N默認爲3600,假設當前系統有36塊硬盤,則每塊硬盤承載100個分區。上述“分區-硬盤”的映射關係在系統初始化時會分配好,後續會隨着系統中硬盤數量的變化會進行調整。該映射表所需要的空間很小,FusionStorage系統中的節點會在內存中保存該映射關係,用於進行快速路由。
  • FusionStorage會對每個LUN在邏輯上按照1MB大小進行切片,例如1GB的LUN則會被切成1024*1MB分片。當應用側訪問FusionStorage時候,在SCSI命令中會帶上LUN ID和LBA ID以及讀寫的數據內容, OS轉發該消息到本節點VBS模塊, VBS根據LUN ID和LBA ID組成⼀個key, 該key會包含LBA ID對1MB的取整計算信息。通
    過DHT Hash計算出⼀個整數(範圍在0~2^32內),並落在指定Partition中;根據內存中記錄的“分區-硬盤”映射關係確定具體硬盤, VBS將IO操作轉發到該硬盤所屬的OSD模塊。
  • 每個OSD會管理⼀個硬盤,系統初始化時, OSD會按照1MB爲單位對硬盤進行分片管理,並在硬盤的元數據管理區域記錄每個1MB分片的分配信息。 OSD接收到VBS發送的IO操作後,根據key查找該數據在硬盤上的具體分片信息,獲取數據後返回給VBS。 從而完成整個數據路由過程。
  • 舉例說明:應用需要訪問LUN1+LBA1地址起始的4KB長度的數據,首先構造key=LUN1+LBA1/1M, 對該key進行HASH計算得到哈希值,並對N取模,得到partition號,根據內存中記錄的“分區-硬盤“映射表可得知數據歸屬的硬盤。

組件功能及相互關係

FusionStorage VBS模塊及處理流程

VBS模塊作爲FusionStorage系統存儲功能的接入側,負責完成兩大類業務:

  • 卷和快照的管理功能
  • IO的接入和處理

VBM模塊負責完成卷和快照的管理功能:創建卷、掛載卷、卸載卷、查詢卷、
刪除卷、創建快照、刪除快照、基於快照創建卷等
VBS模塊

FusionStorage OSD模塊及處理流程

FusionStorage存儲池管理的每個物理磁盤對應⼀個OSD進程, OSD負責:

  • 磁盤的管理
  • IO的複製(主備)
  • IO數據的Cache處理
    FusionStorage OSD模塊及處理流程

FusionStorage MDC模塊功能

MDC(Metadata Controller)是一個高可靠集羣,通過HA(High Availability)機制保證整個系統的高可用性和高可靠性:

  • 通過ZooKeeper集羣,實現元數據(如Topology、 OSD View、 Partition View、VBS View等)的可靠保存
  • 通過Partition分配算法,實現數據多份副本的RAID可靠性
  • 通過與OSD、 VBS間的消息交互,實現對OSD、 VBS節點的狀態變化的獲取與通知
  • 通過與Agent間的消息交互,實現系統的擴減容、狀態查詢、維護等
  • 通過心跳檢測機制,實現對OSD、 VBS的狀態監控

Zookeeper(簡稱ZK) 分佈式服務框架主要用來解決分佈式應用中經常遇到的,如:統⼀命名服務、狀態同步服務、集羣管理、分佈式應用配置項的管理等,ZK主要工作包括三項:

  • MDC主備管理: MDC採用⼀主兩備部署模式;在MDC模塊進程啓動後,各個MDC進程會向ZK註冊選主,先註冊的爲主MDC;運行過程中,ZK記錄MDC主備信息,並通過心跳機制監控MDC主備健康狀況,一旦主MDC進程故障,會觸發MDC重先選主。
  • 數據存儲:在MDC運行過程中,會生成各種控制視圖信息,包括目標視圖、中間視圖、 IO視圖信息等,這些信息的保存、更新、查詢、刪除操作都通過ZK提供的接口實現。
  • 數據同步:數據更新到主ZK, 由主ZK自動同步到兩個備ZK,保證主備ZK數據實時同步。⼀旦ZK發生主備切換,業務不受影響。

FusionStorage主機模塊交互關係

  • 系統啓動時, MDC與ZK互動決定主MDC。 主MDC與其它MDC相互監控心跳,主MDC決定某MDC故障後接替者。其它MDC發現主MDC故障又與ZK互動升任主MDC。
  • OSD啓動時向MDC查詢歸屬MDC,向歸屬MDC報告狀態,歸屬MDC把狀態變化發送給VBS。 當歸屬MDC故障,主MDC指定⼀個MDC接管,最多兩個池歸屬同⼀個MDC。
  • VBS啓動時查詢主MDC,向主MDC註冊(主MDC維護了一個活動VBS的列表,主MDC同步VBS列表到其它MDC,以便MDC能將OSD的狀態變化通知到VBS),向MDC確認自己是否爲leader;VBS從主MDC獲取IOView,主VBS向OSD獲取元數據,其它VBS向主VBS獲取元數據。
    FusionStorage主機模塊交互關係

IO流程分析

FusionStorage讀IO流程

  • APP下發讀IO請求到OS, OS轉發該IO請求到本服務器的VBS模塊;VBS根據讀IO信息中的LUN和LBA信息,通過數據路由機制確定數據所在的Primary OSD; 如果此時Primary OSD故障,VBS會選擇secondary OSD讀取所需數據。
  • Primary OSD接收到讀IO請求後,按照Cache機制中的“Read cache機制”獲取到讀IO所需數據,並返回讀IO成功給VBS
    FusionStorage讀IO流程

FusionStorage寫IO流程

  • APP下發寫IO請求到OS, OS轉發該IO請求到本服務器的VBS模塊;VBS根據寫IO信息中的LUN和LBA信息,通過數據路由機制確定數據所在的Primary OSD。
  • Primary OSD接收到寫IO請求後,同時以同步方式寫入到本服務器SSD cache以及數據副本所在其他服務器的secondary OSD, secondary OSD也會同步寫入本服務器SSD cache。 Primary OSD接收到兩個都寫成功後,返回寫IO成功給VBS;同時,SSD cache中的數據會異步刷入到硬盤。
  • VBS返回寫IO成功,如果是3副本場景,primary OSD會同時同步寫IO操作到secondary OSD和third OSD。
    FusionStorage寫IO流程

FusionStorage數據處理過程

FusionStorage數據處理過程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章