tft每日頭條

 > 科技

 > raid組的狀态如何轉換的

raid組的狀态如何轉換的

科技 更新时间:2024-11-26 22:48:07

我們知道,在面對大規模數據的計算和存儲時,有兩種處理思路:

  • 垂直擴展(scale up) :通過升級 單機 的硬件,如 CPU、内存、磁盤等,提高計算機的處理能力。
  • 水平擴展(scale out) :通過添加 更多的機器 到分布式系統中,提高整個系統的處理能力。

raid組的狀态如何轉換的(從RAID到分布式系統的副本分布)1

在分布式技術尚未成熟的時候,小型機、中型機、大型機、超級計算機逐步升級的方案幾乎是大型公司的唯一選擇,但是這種垂直擴展是有天花闆的,硬件升級的速度遠遠比不上數據規模的增速,即使是超級計算機也無法滿足人們對計算資源的需求。

水平擴展方案,也就是在一個系統裡不斷添加機器的方案,就這麼走上了曆史舞台。這就是現在的分布式技術。

在這篇文章裡,我将分别介紹單機系統下的 RAID 存儲技術以及分布式系統下的存儲分布技術,這兩種技術在思想上有很相近的地方,希望讀者慢慢體會。

RAID

RAID,全稱是 Redundant Array of Inexpensive/Independent Disks ,也就是磁盤冗餘陣列,這裡的 I 有兩種說法,一種是 Inexpensive, 廉價 ,另一種是Independent , 獨立 。所謂 RAID 就是将多塊磁盤組合在一起,對外 抽象 成一個 容量大讀寫速度高容錯性好 的大型磁盤。

我很喜歡「抽象」這個概念,因為它為我們屏蔽了更底層的細節,比如操作系統中的文件系統,虛拟内存等。在我看來,RAID 就是對多個獨立磁盤的抽象。

raid組的狀态如何轉換的(從RAID到分布式系統的副本分布)2

注意,上面的圖裡的三個方面(存儲容量、讀寫速度、數據可靠性)是衡量存儲系統的重要标準,我們在分布式系統裡也會提及,不過現在讓我們先來看看常用的 RAID 技術。

RAID 0

raid組的狀态如何轉換的(從RAID到分布式系統的副本分布)3

RAID 0 是數據在從内存緩沖區寫入磁盤時,根據磁盤的數量,将數據分成 N 份,然後把這些數據并發寫入 N 塊磁盤,每塊磁盤上存儲不同的數據,這樣整體的數據寫入速度是單個磁盤的 N 倍,讀取當然也是并發執行的。

因此 RAID 0 具有極快的數據讀寫速度。但是RAID 0不做數據備份,N塊磁盤中隻要有一塊損壞,數據完整性就被破壞,其他磁盤的數據就無法使用了。

RAID 1

raid組的狀态如何轉換的(從RAID到分布式系統的副本分布)4

RAID 1 的策略更為簡單,不管你有幾個磁盤,都給我存一樣的數據,這樣數據的可靠性極高,但是寫入速度收到很大影響。

Any read request can be serviced by any drive in the set. If a request is broadcast to every drive in the set, it can be serviced by the drive that accesses the data first (depending on its seek time and rotational latency ), improving performance. Sustained read throughput, if the controller or software is optimized for it, approaches the sum of throughputs of every drive in the set, just as for RAID 0. Actual read throughput of most RAID 1 implementations is slower than the fastest drive. Write throughput is always slower because every drive must be updated, and the slowest drive limits the write performance. The array continues to operate as long as at least one drive is functioning. ^1

這段話意思是說,RAID 1 的讀取速度取決于哪一個硬盤能 最先訪問 到待讀取的數據,如果軟件上有優化,可以達到 RAID 0 的讀取速度。但是最慢的磁盤限制了寫入速度,因為系統需要等待 最慢的磁盤 完成寫入并做好檢驗工作。RAID 1 的可靠性好,隻要陣列裡有任意一塊磁盤還能用,陣列就能繼續工作,而且當新磁盤替代舊磁盤後,系統會自動複制數據。

RAID 10

raid組的狀态如何轉換的(從RAID到分布式系統的副本分布)5

RAID 0 讀寫速度高,但沒有數據冗餘, RAID 1 做了數據備份,但讀寫速度受到制約,所以就需要想辦法結合 RAID 0 和 RAID 1,揚長避短,RAID 10 就這麼出現了。

RAID 10 就是将 N 個磁盤平均分成兩份,這兩份互為鏡像,相當于是 RAID 1,但對于每份磁盤中的 N/2 塊磁盤來說,其存儲方式像 RAID 0 一樣,可以做到并發讀寫。這樣就做到了折中,在讀寫速度和容錯能力上有一個平衡。

我們不難看出來,RAID 10 的磁盤利用率較低,有一半的磁盤都拿來做備份了,着實有些奢侈。

就一般情況而言,服務器上很少出現同時損壞兩塊磁盤的情況,往往是損壞一塊磁盤的時候,就換上新的磁盤,然後利用恢複技術恢複損壞磁盤上的數據,所以我們可以據此設計一個磁盤利用率更高的方案。

RAID 3 and RAID 5

有了前面的讨論,我們可以想到,如果任何一塊磁盤上的數據,都能通過其它 N-1 塊磁盤上的數據恢複出來,不就解決我們的問題了嗎?

校驗機制正好滿足我們的要求。

raid組的狀态如何轉換的(從RAID到分布式系統的副本分布)6

在寫入磁盤的時候,我們把數據分成 N-1 份,并發寫入 N-1 塊磁盤,然後用剩下的一塊磁盤記錄校驗數據,這樣我們就可以容忍任意一塊磁盤的損壞。

根據校驗數據寫入的位置,我們有了兩種方案:

  • RAID 3: 所有的校驗數據寫在同一塊磁盤上 。在 數據修改較頻繁 的場景下,任何一塊磁盤上數據的修改都會導緻校驗盤要 重新寫入數據 。這會導緻校驗盤比其他磁盤更容易損壞,所以 RAID 3 很少在實踐中使用。用專業一點的話來說,就是 負載不均衡 了。
  • RAID 5: 校驗數據螺旋式地寫入所有磁盤 。看上面的圖就能分辨出這兩種方案的差别,RAID 5 讓每一塊磁盤都承擔一部分的校驗工作,這樣修改校驗數據的壓力也就被分散到了所有的磁盤,做到了我們所期望的 負載均衡 。因此 RAID 5 是使用更為廣泛的方案。

RAID 6

raid組的狀态如何轉換的(從RAID到分布式系統的副本分布)7

相較于 RAID 5,RAID 6 的可靠性更高,因為 RAID 6 采用了兩種校驗碼螺旋寫入的方案,這樣可以容忍兩塊磁盤同時損壞。

什麼情況下需要這樣的容錯能力?在大型服務器上,每塊磁盤的容量往往很大,在某一塊磁盤損壞後,即使立馬替換上了新磁盤,也 需要很長時間才能把所有數據恢複完畢 ,那麼在這段時間裡,如果有另一塊磁盤損壞,數據就沒辦法恢複了,這是我們不能接受的,因此就需要 RAID 6 來确保數據的完整性。

分布式存儲方案

PS:本文着重于分布式系統的副本與數據分布的關系,因為這部分的思想與 RAID 有相似之處,關于一緻性哈希等問題将單獨寫一篇文章介紹。

分布式系統應對的存儲規模要比單機大很多,但基本思想和設計目标都是一緻的:

  • 提高系統的吞吐量
  • 提高系統的存儲容量
  • 利用數據備份,提高系統可靠性

raid組的狀态如何轉換的(從RAID到分布式系統的副本分布)8

與單機情況不同,分布式系統面臨的問題要多得多,因為服務器之間的數據是通過網絡傳輸,延時較高,甚至可能會出現網絡中斷,導緻某些機器無法訪問。這對我們的存儲方案有很大影響,比如,我們還能用類似 RAID 5 的校驗方式來做冗餘嗎?

答案是否定的,因為做校驗的成本太高了,一次校驗需要其它 N-1 台機器的響應,一等就是幾十毫秒,效率極低,而且網絡負載太大了。相反,RAID 10 的方案看起來更适合現在的情況。

以機器為單位的副本

raid組的狀态如何轉換的(從RAID到分布式系統的副本分布)9

在該方式下,若幹機器互為副本,副本機器之間的數據是完全一樣的,就像 RAID 1 的方案一樣。這種方式的優點就是 簡單 ,但缺點也很明顯:

  • 恢複數據的效率低:假如機器 3 磁盤損壞,丢失了所有的數據,于是我們又調度一台新機器進入該機器組,為了讓該機器盡快提供服務,需要從其他兩台機器上拷貝數據。但是由于網絡帶寬的限制,數據恢複的速度慢。
  • 可擴展性不高:每個機器組有三台機器,想要擴展,就需要一次加三台機器。
  • 不利于系統容錯:一台機器宕機,讀寫壓力将由剩下的兩台機器承擔,壓力增加了 50 %,很有可能超過單台機器的處理能力。

因此,以機器作為副本單位不适合當前的場景,我們需要尋找其它的途徑。

以數據段為單位的副本

raid組的狀态如何轉換的(從RAID到分布式系統的副本分布)10

相較于以機器為副本單位,将數據拆分成以數據段為單位作為副本的靈活性更佳,下面我就用一個更直觀例子來說明該方案的優點。

raid組的狀态如何轉換的(從RAID到分布式系統的副本分布)11

該例子下,機器 1 的所有數據都分布在其他的 7 台機器上,忽略集群中其他的機器。

這種方案為我們帶來了什麼好處?

  • 恢複數據的效率高。假設機器 1 數據丢失,需要重新拷貝所有數據,由于數據分布在剩下的 7 台機器上,我們可以從剩下的所有機器 同時 拷貝恢複數據,這樣,即使每台機器都以較低的資源做拷貝工作,也能很快将數據複制完畢。注意,集群越大,每台機器上承擔的工作量就越小,而且實現了負載均衡。
  • 集群的可擴展性高。當加入一台新的機器時,我們隻需要從每台機器上遷移 1/8 比例的數據段到新機器上,實現新的負載均衡。
  • 系統容錯性高。假設機器 1 宕機,暫時無法提供服務,那麼剩餘 7 台機器的壓力提高 14.3% ,可以接受。

但是這種方案不是沒有問題,因為我們需要一台服務器來記錄數據段與機器的對應關系,這台服務器稱為 元數據服務器 。可以想象,随着集群規模的增長,需要管理的元數據的開銷也會不斷增大,副本的維護難度相應增大,所以現在一種折中的方案是,将某些數據段組成一個數據段分組,以數據段分組為粒度進行副本管理,這樣,可以将副本粒度控制在一個較為合适的範圍。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved