分布式存儲的技術發展趨勢
分布式存儲的技術發展趨勢
一、三副本的弊端
以Ceph、VSAN為代表的軟件定義存儲(Software Defined Storage,SDS)是一個橫向擴展、自動均衡、自愈合的分布式存儲系統,將商用x86服務器、固態硬盤、機械硬盤等硬件資源整合為一個瘦供給的資源池,并以塊存儲、文件存儲、對象存儲、Restful API等多種接口方式提供存儲服務。
無論是Ceph、VSAN,或者其演化版本,有一個共同的技術特征,即采用網絡RAID方式實現數據保護,以3副本或糾刪碼為代表,其中3副本用于對小塊數據讀寫性能有一定要求的應用場景,而糾刪碼則適用于視頻數據、備份及歸檔等大文件場景。以3副本為例,業務數據被分割為固定大小的數據塊,通常為4MB,每個數據塊在不同的節點上保存3個副本(如圖1所示),其分布機制是依照一致性哈希算法(Consistent Hashing)或CRUSH算法,將各個副本數據隨機分布在不同節點、不同磁盤中,以實現數據自動平衡和橫向擴展。當磁盤或節點遭遇故障或損壞時,系統會自動根據預先設定的規則,重新建立一個新的數據副本,稱之為數據重建。

圖 1 分布式存儲副本機制
雖然分布式存儲的SDS理念很好,橫向擴展能力不錯,自動添加和刪除節點都是優勢,但與傳統集中式存儲(磁盤陣列)相比,其穩定性和性能仍然存在明顯的短板。
首先,在性能方面,三副本分布式存儲容易受到IO分布不均勻和木桶效應的影響,導致大延遲和響應遲鈍的現象。以Ceph為例,多個存儲基本單元,Placement Group (PG),封裝為一個OSD,每個OSD直接對應于某一個機械硬盤HDD;主流的7200轉HDD,受到機械臂尋址限制,其單盤的讀寫性能僅為120 IOPS左右;由于數據在OSD上隨機分布,因而單個硬盤上的IO負載不會固定在平均值上,而是總體呈現為正態分布,少數HDD上因正態分布的尾部效應,導致其IO負載遠超平均值,以及遠超單盤的性能閥值,造成擁堵。此外,分布式存儲為保證數據完整性,必須定時進行數據完整性校驗,即數據scrub/deep-scrub操作,而這些操作產生額外的IO負載,可能會加重磁盤阻塞現象。根據木桶效應原理,系統的性能取決于集群中表現最差的磁盤,因此個別慢盤嚴重拖累整個系統的性能,其可能的后果,就是帶來大延遲、OSD假死,以及觸發數據非必需的重建。
其次,三副本分布式存儲還面臨穩定性問題。當存儲擴容、硬盤或節點損壞、網絡故障、OSD假死、 Deep-scrub等多種因素疊加,可能導致多個OSD同時重建,引發重建風暴。在數據重建過程中,重建任務不僅消耗系統的內存、CPU、網絡資源,而且還給存儲系統帶來額外的IO工作負載,擠占用戶工作負載的存儲資源。在此情形下,用戶時常觀察到,系統IO延遲大,響應遲鈍,輕者引起業務中斷,嚴重時系統可能會陷入不穩定的狀態,OSD反復死機重啟,甚至會導致數據丟失,系統崩潰。
此外,三副本分布式存儲還面臨數據丟失的風險。三副本最大可抵御兩個HDD同時損壞。當系統處于擴容狀態、或一個節點處于維護模式時,此時出現一個HDD故障,則該系統就會進入緊急狀態,出現兩個HDD同時故障,則可能導致數據丟失。對于一個具有一定規模的存儲系統而言,同時出現兩個機械硬盤故障的事件不可避免,尤其是當系統運行兩三年之后,隨著硬件的老化,出現Double、或Triple磁盤故障的概率急劇上升。此外,當系統出現大規模掉電或存儲節點意外宕機時,也可能會導致多個機械硬盤同時出現損壞,危及三副本分布式存儲的數據安全。
二、雙重Raid
為了解決三副本分布式存儲面臨的性能問題、穩定性及可靠性等缺陷,道熵的鐵力士分布式存儲采用雙重RAID保護機制,除了繼承網絡RAID(節點間副本、跨節點糾刪碼)和一致性哈希隨機分布數據的特點,鐵力士將磁盤陣列特有的節點內RAID技術和存儲虛擬化(池化)管理技術, 即Storage Virtualization Manager (SVM),與分布式技術相結合,如圖2所示。

圖2 Titlis分布式存儲雙重Raid機制
網絡Raid技術
在鐵力士分布式存儲中,每個數據塊按照一致性哈希算法,隨機選擇兩個不同存儲節點來保存數據的兩個副本,保證當任何一個節點宕機時,仍有一個數據副本保證讀寫操作,確保業務高可用和數據安全。
節點內Raid技術
在鐵力士分布式存儲的每個節點內,通過SVM存儲虛擬化技術實現節點內的RAID數據保護,RAID級別選擇可以是鏡像,也可以是存儲效率更高的RAID5或6。節點內RAID保護可抵御單個或多個硬盤損壞,故障修復限制在節點內部,無需觸發網絡數據重建,有效地避免了網絡重建風暴。
節點內RAID結合網絡Raid(跨節點的副本/EC碼)技術,鐵力士實現了雙重RAID數據保護。在三副本架構中,一旦同時出現三塊磁盤故障或受損,數據就可能丟失;而在雙重RAID架構中,即使每個節點同時出現一塊磁盤故障,數據仍然無憂,業務仍然持續。考慮到分布式存儲可能包含數十個甚至上百個存儲節點,雙重RAID的數據可靠性明顯超過三副本架構。
存儲虛擬化技術
鐵力士在每個存儲節點運行在存儲虛擬化管理軟件(SVM)上,把該節點的存儲資源整合為一個統一管理的存儲池,為分布式系統提供vOSD資源。SVM采用寬條帶機制(見圖3),將每個vOSD的工作負載均勻分布在節點的每個磁盤上,大幅提高了單個vOSD的IOPS能力,可有效抵御三副本分布式存儲中的IO分布不均勻現象。
圖 3 節點內Raid條帶機制
SVM存儲池由節點內多個RAID小組構成,通過虛擬卷為上層分布式系統提供vOSD存儲服務。每個vOSD對應于三副本中由物理HDD承載的OSD。由分布式一致性哈希算法分配來的數據塊,將寫入SVM存儲池中、由虛擬卷支撐的vOSD,而非直接寫入物理硬盤。SVM 利用寬條帶技術,將vOSD的工作負載均勻分布在各個物理磁盤上:每個大小為4MB的vOSD 對象數據塊,被分割為32KB的數據塊,依次被安排在RAID組的邏輯地址空間中;SVM 對各個RAID小組的邏輯地址空間采取順序寫優化策略:首次寫按各個小組的邏輯地址分配地址空間,按順序寫入數據;后續重寫,則優先填滿空閑地址空間,盡可能實現硬盤順序尋址,最大限度降低機械硬盤較慢的尋址操作次數,利用機械硬盤順序寫較快的特點來提升IO性能。
二級DRAM+Flash 緩存加速
磁盤陣列中常見的性能加速手段是共享緩存加速,中高端磁盤陣列與低端磁盤陣列的在性能方面的一個重大區別,除了控制器個數,就是緩存加速的能力。典型的中高端磁盤陣列能支持的共享緩存加速在512GB到1TB上下。鐵力士借鑒了磁盤陣列的設計,通過SVM虛擬化實現DRAM與Flash相結合的二級緩存加速:通過自適應算法,自動識別動態或靜態熱數據(高頻率讀寫或最近讀寫數據),將最熱的數據保存在延遲最小的DRAM中,而將次熱的數據保存在更大容量、基于Flash的固態硬盤上;并由于分布式技術的加持,形成一個容量巨大的分布式二級緩存系統。與中高端磁盤陣列相比較,鐵力士分布式存儲系統支持數10TB、甚至100TB以上的分布式緩存,相當于其10倍、甚至100倍的緩存容量。
數據完整性校驗與數據自修復
SVM存儲虛擬化管理借鑒了WAFL(NetApp) 、Btrfs(SuSE)、ZFS(Oracle)、Storage Spaces(微軟)等文件系統的先進經驗,對底層存儲的每個數據塊增加一個256比特的校驗碼,并單獨保存在一對固態硬盤鏡像中,用于快速實現在線數據完整性校驗。一旦校驗碼檢查到數據受損,通過節點內RAID功能實現數據自修復。該功能可快速定位硬件故障,并實現硬件故障自動隔離。
三、雙重Raid機制與三副本對比
雙重RAID究竟能否有效解決三副本的缺陷?讓我們從二者之間的對比開始。
故障修復時間更短,業務影響更小
硬盤損壞時,雙重RAID機制優先通過節點內RAID恢復數據,該恢復機制可自動調節速度以避讓工作負載,前端業務無感知。無需觸發網絡數據重建,從而有效地避免了網絡重建風暴。
節點故障時,可通過遷移磁盤到另一臺物理服務器,實現節點遷移(無需拷貝或重建數據)。SVM存儲池上每個磁盤記載關于存儲池構成的全部信息,分布式存儲的vOSD的ID號及用戶數據,保存在SVM存儲池的虛擬卷上,自動隨著SVM存儲池的遷移從一臺物理服務器遷移到另一臺物理服務器,主機名及vOSD的ID號保存不變,實現快速節點修復。
容錯性更強,可允許多節點同時有磁盤損壞
三副本分布式存儲通過跨節點的副本保護,可有效防止單個或兩個磁盤損壞對業務數據的影響,但是容錯性受到限制,如在三副本的情況下,不同故障域內之間,最多只能允許2個節點有磁盤損壞,超出2個節點出現磁盤故障,則極有可能發生數據丟失,如圖4所示。

圖 4 三副本分布式存儲多節點硬盤損壞導致數據丟失
鐵力士分布式存儲通過雙重Raid機制,能夠將容錯性提升一個數量級。如圖5所示,以節點內Raid10+節點間2副本為例,當每個節點都出現磁盤故障的時候,可以通過節點內Raid分別修復,保障整個系統數據無丟失,業務無中斷。

圖 5 雙重RAID容忍多節點磁盤損壞
數據持久性(Durability)高出一個數量級
下面通過具體數值來比較三副本與雙重RAID的數據持久性(可靠性)。數據持久性指標可通過存儲系統的AFR(Annual Failure Rate)來衡量。考慮一個1000個6TB硬盤的存儲集群,每個機械硬盤的MTTF(Mean Time to Failure)為1000,000小時。在計算中需要運用兩個著名的MTTF公式,一個是關于RAID6,其MTTF=(MTTF)*(MTTF)*(MTTF)/(N*(N-1)*(N-2)*MTTR), 另一個是關于RAID5,其MTTF=(MTTF)*(MTTF)/(N*(N-1)MTTR), 其中MTTR(Mean Time to Repair)是硬盤平均修復時間。
在三副本條件下,存儲系統共有333組三副本,每組三副本的MTTF相當于N=3的RAID6,在分布式并發修復的條件下,MTTR通常為3小時(每半小時修復1TB數據),因此每組三副本的MTTF =1000000*1000000*1000000/(3*2*1*3)=5.56x 1016 小時,而整個系統的MTTF = 5.56x 1016 /333 =1.67x 1014 小時。折算為AFR(一年共8760小時),AFR=8760/(1.67x 1014) =5.2x 10-11。
在雙重RAID情況下,考慮節點內采用(2+1) RAID5,存儲系統共有333組RAID5,為簡化計算,考慮每組RAID對應于兩個vOSD,12TB數據。據測算,RAID5的MTTR為30小時,每組RAID5 (vOSD)的MTTF=1000000*1000000/(3*2*30)=5.56x 109 小時。當一個RAID5組損壞時,由于vOSD在跨節點之間有鏡像保護(其可靠性相當于N=2 RAID5),采用分布式并發修復12TB數據,每半小時修復1TB數據,需6小時,因此,其MTTR=(5.56x 109 )* (5.56x 109 )/(2*1*6)=2.58x 1018 小時。考慮到整個存儲系統有333組RAID5, 因此整個系統的MTTF=2.58x 1018/333 =7,75x 1015 小時,相當于三副本MTTF的46倍。折算為AFR,雙重RAID的AFR=8760/(7.75x 1015)= 1.1x 10-12 。
對比三副本和雙重RAID的數據持久性,可見雙重RAID的數據可靠性高于三副本一個數量級以上。
四、總結
鐵力士分布式存儲將傳統磁盤陣列的RAID技術、存儲虛擬化管理技術與分布式存儲技術相結合,有效地解決了普通分布式存儲面臨的IO分布不均勻和木桶效應導致的性能缺陷,大幅度提升系統IOPS性能,并避免了普通分布式存儲因網絡重建風暴而可能導致的穩定性隱患。同時,雙重RAID架構的數據可靠性高于三副本分布式存儲一個數量級以上。