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

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

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

圖 4 三副本分布式存儲(chǔ)多節(jié)點(diǎn)硬盤損壞導(dǎo)致數(shù)據(jù)丟失
鐵力士分布式存儲(chǔ)通過雙重Raid機(jī)制,能夠?qū)⑷蒎e(cuò)性提升一個(gè)數(shù)量級(jí)。如圖5所示,以節(jié)點(diǎn)內(nèi)Raid10+節(jié)點(diǎn)間2副本為例,當(dāng)每個(gè)節(jié)點(diǎn)都出現(xiàn)磁盤故障的時(shí)候,可以通過節(jié)點(diǎn)內(nèi)Raid分別修復(fù),保障整個(gè)系統(tǒng)數(shù)據(jù)無丟失,業(yè)務(wù)無中斷。

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