分布式存儲數據保護策略——多副本與糾刪碼


一、集中存儲和分布式存儲介紹

介紹多副本和糾刪碼之前,我們先來說一下分布式存儲。分布式存儲是不同於傳統集中式存儲的的一種架構,很多時候也被稱為SDS軟件定義存儲(Software Defined Storage)。

      傳統集中式存儲采用控制器+硬盤櫃的方式,通過冗余的雙控制器提供數據管理和讀寫能力(也有超過2個控制器的多控存儲,多見於高端存儲),通過控制器自帶的硬盤槽位或擴展硬盤櫃提供存儲空間。

      集中式存儲的硬盤數據保護多采用RAID技術,比如RAID5、RAID6、RAID10等,以后有機會我們再單獨介紹。

分布式存儲為了實現更靈活的擴展性和更大的存儲規模,采用無中心的組網方式,每個存儲節點都可以同時提供計算和存儲資源。它們通過內部交換機互聯起來,基於分布式存儲軟件提供統一的存儲資源池。比如1個節點是200TB容量,那么5個節點就是1000TB容量,並可以擴展到數千個節點EB級別的容量,所以更適合用在海量數據的場景下。
     與集中式存儲不同的是,分布式存儲的硬盤數據保護多采用多副本和糾刪碼技術。

二、什么是多副本和糾刪碼技術?

        多副本,顧名思義就是多個數據副本,簡單來說就是一個數據拷貝多份完全一樣的副本,分別存放在多個不同節點上。比如我們常用的3副本(如下圖所示)就是將A這個數據拷貝了3份,分別存放在節點1、3、4上,這三個節點是在整個集群中隨機選擇的,下一個B數據有可能就放在節點1、2、4上了。

 

        我們來看下多副本的數據保護效果,很明顯,當節點1和3同時故障時,節點4上仍然會保存有A數據。以此類推,我們可以知道,N副本技術可以允許N-1個節點同時故障數據不丟失。如果是硬盤故障,只要故障硬盤的范圍不超過N-1個節點,數據也不會丟失,比如節點1壞了3塊盤、節點3壞了4塊盤,數據仍然不會丟失。

 

         糾刪碼的英文全稱是Erasure Code,所以有時我們也會簡稱為EC。糾刪碼顧名思義是一種糾正數據丟失的校驗碼,大家可以把它類比成一個方程組。我們如果知道4個數a、b、c、d,就可以通過2個不同的公式算出2個校驗數據x和y,把6個數據一起保存起來,那么當a、b、c、d其中1個或2個數據丟失的話,就可以通過剩余的2個值和計算公式,反推出丟失的2個數據。比如:

       已知:a+b+c+d=x=10,a+2b+3c+4d=y=20,c=2,d=1

        那么:a+b=7,a+2b=10,則a=4,b=3

當然以上計算只是一個簡化的方案,目的是幫助大家理解,真正存儲中用的校驗方式會比這個復雜得多,但效果是類似的。

如果我們用M+N表示糾刪碼的話,以上就是一個4+2的糾刪碼方案,數據會被切分成4個相同大小的分片,並通過校驗算法生成2個同樣大小的校驗分片P和Q。比如32KB的數據會被切成4個8KB的分片,再生出2個8KB的分片,總計48KB數據。當6個數據分片生成后,它們會被隨機存到6個不同的節點上(如下圖所示)。

 

和多副本一樣,我們來看下4+2糾刪碼的數據保護效果。從上圖可以看出,當任意2個節點故障時,數據是不會丟失的,因為只會丟失2個數據分片,還是可以反算出來的。當然如果同時故障了3個節點,4+2的糾刪碼是無能為力的,就像1個方程有2個未知數怎么也解不出來一樣。而且4+2糾刪碼也可以允許2個節點內任意個數硬盤故障時,數據不丟失。比如節點1、節點2分別故障了5塊硬盤,也完全不會有影響,因為每一組4+2分片都有4個分片還在,數據還是可靠的。

 

三、多副本和糾刪碼對存儲節點有什么要求?

多副本和糾刪碼對分布式存儲的節點數量和硬盤配置都有一定要求,主要是2點:

N個副本至少需要N個節點才能部署,比如3副本至少需要3個存儲節點,而M+N糾刪碼至少需要(M+N)個節點,比如4+2糾刪碼至少需要6個節點,當然這只是最低要求,上限並沒有限制,另外也不會有倍數比例的要求,比如3副本並不要求一定是6個、9個節點,5個、7個節點也可以;

每個節點的硬盤數量和單盤容量建議相同,因為如果不同的話,就會出現水桶的短板效應,兩個節點,一個節點配置8TB硬盤,一個節點配置4TB硬盤,8TB硬盤只能當4TB硬盤用,因為每個節點的數據保存容量是隨機分布、幾乎相同的。

 

四、什么是M+N:1糾刪碼?

除了常見的M+N糾刪碼之外,我們還經常見到一種M+N:1的糾刪碼,這是一種特殊的糾刪碼技術,我們稱之為亞節點糾刪碼。

這種技術的出現是為了滿足小規模集群的部署要求,我們舉個例子,有一個用戶采購了3個分布式存儲節點,因為節點數量比較少,他可選的數據冗余策略就只有3副本和2+1糾刪碼(2副本暫不考慮,后文我們來詳細說明原因)。選擇3副本的話,存儲的空間利用率就只有33%了,如果我們再考慮其他因素,比如硬盤標稱值的差異、系統預留空間、熱備空間的話,可用空間可能只有26%左右,這對於很多看重容量的用戶來講是比較難以接受的。但如果我們選擇2+1糾刪碼呢,問題出現了,2+1糾刪碼只能允許1個分片數據丟失,當集群中2個節點分別故障1塊硬盤的時候,數據就丟失了!

在實際使用場景下,2塊硬盤同時故障的情況雖然比較少見,但概率也並不算低,因為很多用戶在1塊硬盤故障時可能並沒有發覺。這段時間存儲就是在極其危險的狀態下運行,任何硬盤出問題都會導致集群數據丟失,很顯然,2+1糾刪碼的方案並不好。

基於以上原因,4+2:1的糾刪碼出現了。為什么叫亞節點糾刪碼呢,因為默認的糾刪碼是按照節點來分配數據的,但4+2:1只會按照硬盤來分配數據,它把3個節點當6個節點用,每個節點選擇2塊硬盤,整個集群選擇6塊不同的硬盤來存放4+2總計6個分片數據(如下圖所示)。

 

 

我們看到,4+2:1相比2+1糾刪碼,雖然能容忍節點故障數量仍然是1個,但它可以允許2個節點分別故障1塊硬盤(總計故障2塊硬盤)而數據不丟失。而實際情況下,硬盤故障的概率是遠遠低於整個節點故障的,所以4+2:1還是非常可靠的,而且它的空間利用率遠高於3副本。當然如果你擔心的是2個節點同時故障,那你只能選擇3副本了。

類似於4+2:1,也存在8+2:1、16+2:1等亞節點糾刪碼,這里我們就不多討論了。

 

五、多副本和糾刪碼哪個好,應該如何選擇?

1、在比較多副本和糾刪碼技術時,我們可以從可用容量、讀寫性能、重構性能、可靠性等方面來分析,如下表所示。

 

 

2、兩者在不同的場景有各自的優缺點。

可靠性對比

EC 配置 1 個校驗位(FT=1) 與 2 副本(RF=2) 的可靠性相當,允許任意 1 個節點或者 1個數據塊損壞

EC 配置 2個校驗位(FT=2) 與 3 副本(RF=3) 的可靠性相當,允許任意 2 個節點或者2 個數據塊損壞

數據恢復對性能影響

2 副本下,1 個節點或者數據塊故障,數據恢復需要從一個副本讀取一次,然后寫入一次進行恢復副本,影響 1 個節點的讀取性能。

EC 設置 4/1 情況下,1 個節點或者數據塊故障,數據恢復需要讀取 3 個數據塊和 1 個校驗,通過運算后寫入一次進行數據恢復,影響 4 個節點的讀取性能。

寫懲罰

2 副本下,某個節點的 1 次數據寫入,實際需要 2 個節點參與(寫入 2 次),寫懲罰為 2

EC 設置 4/1 情況下,1 次數據寫入,實際需要至少 2 個節點參與,其中讀取 2 次(讀取數據,讀取校驗),寫入 2 次(寫入數據,寫入校驗),寫懲罰為 4

CPU 開銷

2 副本/ 3 副本是基於數據完整復制,沒有涉及額外的運算,對 CPU 開銷較低。

EC 由於讀寫都需要計算校驗值,需要額外的 CPU 資源開銷

 

如何選擇兩種數據保護方式,可以根據業務情況因地制宜,那么就要知道兩種模式的區別,這個就不細說了,總的來說,從性能和冗余性來說副本要好很多,但是從硬盤利用率來說EC肯定要好。

什么樣的業務選擇副本模式呢?

1) 關鍵業務,對性能要求比較高的業務,如數據庫等。

2) 其他非關鍵性業務,如視頻監控等,可以選擇EC。如何定義是不是關鍵業務要看企業具體情況。

4.同一套存儲中可有副本和EC都存在,那么就可以實現數據分層存儲,既數據的生命周期管理。

 

副本和糾刪碼是目前分布式存儲系統中常用的兩種數據冗余保護策略,它們各有自己的特點。

副本:

顧名思義,一份數據寫多份。

優點:讀寫性能好。

缺點:得盤率低。

糾刪碼:

優點:得盤率高。

缺點:校驗碼計算有性能損耗。

應用中,如何選擇還得結合具體的業務場景。性能要求高的關鍵業務,一般采用副本。視頻,影像存儲等海量存儲場景可以采用糾刪碼,提高存儲系統利用率,降低成本。此外,對象存儲系統中,索引池可以使用副本策略,而數據池可以采用糾刪碼,這樣既提升了讀寫效率,又節省了成本。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM