#頭條創作挑戰賽#
1 資料存儲技術RAIDRAID
1.1 什麼是RAID
"RAID"一詞是由David Patterson, Garth A. Gibson, Randy Katz 于1987年在加州大學伯克利分校發明的。在1988年6月SIGMOD會議上送出的論文"A Case for Redundant Arrays of Inexpensive Disks”"中提出,當時性能最好的大型機不斷增長的個人電腦市場開發的一系列廉價驅動器的性能所擊敗。盡管故障與驅動器數量的比例會上升,但通過配置備援,陣列的可靠性可能遠遠超過任何大型單個驅動器的可靠性。
獨立硬碟備援陣列(RAID, Redundant Array of Independent Disks),舊稱廉價磁盤備援陣列(Redundant Array of Inexpensive Disks),簡稱磁盤陣列。利用虛拟化存儲技術把多個硬碟組合起來,成為一個或多個硬碟陣列組,目的為提升性能或資料備援,或是兩者同時提升。
RAID 層級不同,資料會以多種模式分散于各個硬碟,RAID 層級的命名會以 RAID 開頭并帶數字,例如:RAID 0、RAID 1、RAID 5、RAID 6、RAID 7、RAID 01、RAID 10、RAID 50、RAID 60。每種等級都有其理論上的優缺點,不同的等級在兩個目标間擷取平衡,分别是增加資料可靠性以及增加存儲器(群)讀寫性能。
簡單來說,RAID把多個硬碟組合成為一個邏輯硬碟,是以,作業系統隻會把它當作一個實體硬碟。
RAID常被用在伺服器電腦上,并且常使用完全相同的硬碟作為組合。由于硬碟價格的不斷下降與RAID功能更加有效地與主機闆內建,它也成為普通使用者的一個選擇,特别是需要大容量存儲空間的工作,如:視訊與音頻制作。
RAID功能實作
- 提高IO能力,磁盤并行讀寫
- 提高耐用性,磁盤備援算法來實作
RAID實作的方式
- 外接式磁盤陣列:通過擴充卡提供适配能力
- 内接式RAID:主機闆內建RAID控制器,安裝OS前在BIOS裡配置
- 軟體RAID:通過OS實作,比如:群晖的NAS
1.2 RAID級别
級别:多塊磁盤組織在一起的工作方式有所不同
RAID-0:條帶卷,strip
RAID-1:鏡像卷,mirror
RAID-2
..
RAID-5
RAID-6
RAID-10
RAID-01
1.2.1 RAID-0
RAID 0 基于資料條帶化,資料流被分成多個段或塊,每個塊都存儲在不同的磁盤上。是以,當系統想要讀取該資料時,它可以同時從所有磁盤讀取資料并将它們連接配接在一起以重建整個資料流,這樣做的好處是讀寫操作的速度大大提高,它非常适合性能優先于其他方面的情況,此外,整個卷的總容量是各個磁盤容量的總和。
什麼是條帶化? 資料在多個磁盤之間拆分,在所有磁盤之間平均配置設定,同時消除任何單個磁盤的過載,可以同時從多個磁盤檢索資料,提高了速度,進而提高性能,這就是條帶化。
優點
- 資料被剝離到多個驅動器中
- 磁盤空間被充分利用
- 至少需要 2 個驅動器
- 高性能
缺點
- 不支援資料備援
- 不支援容錯
- 沒有錯誤檢測機制
- 任一磁盤發生故障都會導緻相應陣列中的資料完全丢失
案例:使用兩個磁盤驅動器建立RAID 0陣列
1 假設我們有兩個硬碟:/dev/sda和/dev/sdb。
2 建立一個RAID 0陣列:
sudo mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sda /dev/sdb
3 等待RAID陣列初始化完成。
4 檢視RAID陣列的狀态:
sudo mdadm --detail /dev/md0
5 可以将RAID陣列格式化為檔案系統,例如ext4:
sudo mkfs.ext4 /dev/md0
6 建立一個目錄來挂載RAID陣列:
sudo mkdir /mnt/raid0
7 将RAID陣列挂載到該目錄:
sudo mount /dev/md0 /mnt/raid0
現在,RAID 0陣列已經建立并挂載到系統中。可以将資料存儲在/mnt/raid0目錄下,它将以高性能的方式分布在兩個磁盤驅動器上。
---------------------------------------------------------
1.2.2 RAID-1
RAID 1 使用資料鏡像的概念,資料被鏡像或克隆到一組相同的磁盤,這樣如果其中一個磁盤出現故障,可以使用另一個。它還提高了讀取性能,因為可以同時從所有磁盤通路不同的資料塊。但與 RAID 0 不同的是,寫入性能會降低,因為每當有新資料時必須更新所有驅動器書面。另一個缺點是空間被浪費來複制資料,進而增加了存儲成本比。
什麼是鏡像? 資料在多個磁盤之間進行鏡像意味着資料的副本存儲在不同的儲存設備之間,這也将增加備援和性能。
RAID 1 是最常用的 RAID 級别,旨在增強存儲資料的安全性。例如,如果一個檔案被寫入并儲存到一個硬碟上,它會自動儲存到硬碟2、3 或其他磁盤上。這意味着系統提供了完全備援,這意味着如果一個驅動器發生故障,第二個驅動器已準備好跳入。
優點
- 執行資料鏡像,即來自一個驅動器的相同資料被寫入另一個驅動器以實作備援。
- 高讀取速度,因為如果一個磁盤繁忙,則可以使用任何一個磁盤
- 即使任何一個驅動器發生故障,陣列也能正常工作
- 至少需要 2 個驅動器
缺點
- 費用較高(每個驅動器需要 1 個額外的驅動器用于鏡像)
- 由于必須更新所有驅動器,是以寫入性能較慢
案例:建立RAID 1陣列
1 確定您有兩個空的磁盤驅動器可供使用。假設這兩個磁盤驅動器為/dev/sdb和/dev/sdc。
2 建立RAID 1陣列
sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
- /dev/md0是要建立的RAID裝置的名稱,--level=1指定了RAID級别為1,--raid-devices=2指定了使用兩個磁盤驅動器,/dev/sdb1和/dev/sdc1是要用于建立陣列的分區。
3 等待RAID 1陣列初始化完成,可以使用以下指令來監視初始化進度
cat /proc/mdstat
初始化過程可能需要一些時間,具體取決于磁盤驅動器的大小和性能
4 一旦RAID 1陣列初始化完成,可以使用以下指令将檔案系統格式化并挂載RAID裝置:
sudo mkfs.ext4 /dev/md0
sudo mkdir /mnt/raid1
sudo mount /dev/md0 /mnt/raid1
上述指令中,使用ext4檔案系統進行格式化,建立了一個名為/mnt/raid1的挂載目錄,并将RAID裝置/dev/md0挂載到該目錄。
到這裡,已經成功實作了RAID 1陣列;所有寫入/mnt/raid1目錄的資料将同時寫入/dev/sdb和/dev/sdc磁盤驅動器,進而提供資料的備援性和容錯能力。
---------------------------------------------------------
1.2.3 RAID-4
RAID 4是一種基于獨立磁盤的備援陣列(Independent Disks Redundancy Array,IDRA),它與RAID 5類似,但使用一個獨立的奇偶校驗磁盤來存儲校驗資訊,而不是将校驗資訊分布在所有資料磁盤上。
- 多塊資料盤異或運算值存于專用校驗盤
- 磁盤使用率 (N-1)/N
- 有備援能力
- 至少3塊硬碟才可以實作
---------------------------------------------------------
1.2.4 RAID-5
RAID 5 需要使用至少 3 個驅動器,像 RAID 0 一樣跨多個驅動器條帶化資料,但也有跨驅動器分布的“奇偶校驗”。在單個驅動器發生故障的情況下,使用存儲在其他驅動器上的奇偶校驗資訊将資料拼湊在一起。停機時間為零。讀取速度非常快,但由于必須計算奇偶校驗,寫入速度稍慢。它非常适合資料驅動器數量有限的檔案和應用程式伺服器。
RAID 5 為該奇偶校驗損失了 33% 的存儲空間(使用三個驅動器),但它仍然是比 RAID 1 更具成本效益的設定,最流行的 RAID 5 配置使用四個驅動器,這将損失的存儲空間降低到 25% . 它可以與多達 16 個驅動器一起工作。
RAID 5 也稱為帶分布式奇偶校驗的條帶化:
優點
- 具有分布式奇偶校驗的塊級剝離
- 奇偶校驗分布在陣列中的磁盤上
- 高性能
- 成本效益
- 至少需要 3 個驅動器
缺點
- 在磁盤故障的情況下,恢複可能需要更長的時間,因為必須從所有可用驅動器計算奇偶校驗
- 無法承受并發驅動器故障
- 讀、寫性能提升
- 可用空間:(N-1)*min(S1,S2,...)
- 有容錯能力:允許最多1塊磁盤損壞
- 最少磁盤數:3, 3+
案例:RAID 5陣列
1 假如有4個磁盤驅動器可供使用,分别為/dev/sdb、/dev/sdc、/dev/sdd和/dev/sde。
2 #建立RAID 5陣列
sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
解釋:/dev/md0是要建立的RAID裝置的名稱,--level=5指定了RAID級别為5,--raid-devices=3指定了使用3個資料磁盤驅動器。
3 #等待RAID 5陣列初始化完成,使用以下指令來監視初始化進度:
cat /proc/mdstat
4#RAID 5陣列初始化完成後,進行檔案系統格式化并挂載RAID裝置:
sudo mkfs.ext4 /dev/md0
sudo mkdir /mnt/raid5
sudo mount /dev/md0 /mnt/raid5
解釋:使用ext4檔案系統進行格式化,建立了一個名為/mnt/raid5的挂載目錄,并将RAID裝置/dev/md0挂載到該目錄
---------------------------------------------------------
1.2.5 RAID-6
RAID 6 使用雙奇偶校驗塊來實作比 RAID 5 更好的資料備援,這增加了陣列中最多兩個驅動器故障的容錯能力。每個磁盤都有兩個奇偶校驗塊,它們存儲在陣列中的不同磁盤上,RAID 6 是用于維護高可用性系統的非常實用的基礎架構。
RAID 6 是标準 Web 伺服器的一個很好的選擇,其中大部分事務都是讀取的,但不建議用于重寫環境,例如資料庫伺服器。
RAID 6 也稱為 帶雙分布式奇偶校驗的條帶化:
優點
- 具有 DUAL 分布式奇偶校驗的塊級剝離
- 建立了 2 個奇偶校驗塊
- 可以在陣列中同時發生 2 個驅動器故障
- 額外的容錯和備援
- 至少需要 4 個驅動器
缺點
- 成本費用可能成為一個因素
- 由于雙重奇偶校驗,寫入資料需要更長的時間
- 讀、寫性能提升
- 可用空間:(N-2)*min(S1,S2,...)
- 有容錯能力:允許最多2塊磁盤損壞
- 最少磁盤數:4, 4+
---------------------------------------------------------
1.2.6 RAID-10
RAID 10 以相反的順序将 RAID 1 和 RAID 0 組合在一起,有時,它也被稱為“嵌套”或“混合”RAID,這是一種“兩全其美的方法”,因為它具有 RAID 0 的快速性能和 RAID 1 的備援性。在此設定中,多個 RAID 1 塊互相連接配接,使其像 RAID 0。它用于在需要巨大磁盤性能(大于 RAID 5 或 6)以及備援的情況下。
優點
- 無奇偶代
- 執行 RAID 0 剝離資料和 RAID 1 鏡像
- 剝離在鏡像之前執行
- 可用容量為 n/2 * 磁盤大小(n = 磁盤數量)
- 所需的驅動器應該是 2 的倍數
- 剝離資料時的高性能
缺點
- 成本高,因為每個驅動器都需要額外的驅動器
- 100% 的磁盤容量未被使用,因為一半用于鏡像
- 可擴充性非常有限
- 讀、寫性能提升
- 可用空間:N*min(S1,S2,...)/2
- 有容錯能力:每組鏡像最多隻能壞一塊
- 最少磁盤數:4, 4+
---------------------------------------------------------
1.2.7 RAID-01
- 多塊磁盤先實作RAID0,再組合成RAID1
在RAID 01中,資料被分成塊并分布在多個磁盤上,類似于RAID 0。然後,每個資料塊都被複制到另一組磁盤上,類似于RAID 1。這樣就同時提供了RAID 0的性能增益和RAID 1的資料備援性。
RAID 01至少需要4個磁盤驅動器來實作,因為它需要至少兩個RAID 0陣列來建立一個RAID 1陣列。如果有更多的磁盤可用,可以建立更大的RAID 01陣列。
案例:使用4個磁盤驅動器建立RAID 01陣列
1 假設我們有四個硬碟:/dev/sda、/dev/sdb、/dev/sdc和/dev/sdd。
2 建立兩個RAID 0陣列:
sudo mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sda /dev/sdb
sudo mdadm --create /dev/md1 --level=0 --raid-devices=2 /dev/sdc /dev/sdd
3 建立一個RAID 1陣列,将兩個RAID 0陣列作為成員:
sudo mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/md0 /dev/md1
4 等待RAID陣列初始化完成。
5 檢視RAID陣列的狀态:
sudo mdadm --detail /dev/md2
6 可以将RAID陣列格式化為檔案系統,并将其挂載到系統中,類似于前面提到的步驟。
---------------------------------------------------------
1.2.8 RAID-50
RAID 50 由兩個或多個RAID 5陣列組成,形成類似RAID 0的條帶化陣列。與配置相同數量的RAID 5相比,它提供了更高的通路性能和更強的資料保護性能。單個 RAID5 等效陣列稱為“子集”或“子陣列”,可以配置三個或更多子集。
RAID 50 可以在伺服器和陣列上實作,以運作各種應用程式,例如檔案伺服器、資料庫伺服器、虛拟機存儲和備份、視訊編輯、3D 動畫渲染等等。
優點
- 減少重建時間
- 改進備援性能
- 提升通路性能
缺點
- 需要6張以上的驅動器
- 裝機效率降低
- 有限備援
- 多塊磁盤先實作RAID5,再組合成RAID0
案例:實作raid50
1 假設有8個磁盤驅動器可供使用,分别為/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde、/dev/sdf、/dev/sdg、/dev/sdh和/dev/sdi。
2 建立多個RAID 5陣列。使用以下指令建立4個RAID 5陣列:
sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
sudo mdadm --create /dev/md1 --level=5 --raid-devices=3 /dev/sde1 /dev/sdf1 /dev/sdg1
sudo mdadm --create /dev/md2 --level=5 --raid-devices=3 /dev/sdh1 /dev/sdi1 /dev/sdb2
sudo mdadm --create /dev/md3 --level=5 --raid-devices=3 /dev/sdc2 /dev/sdd2 /dev/sde2
/dev/md0、/dev/md1、/dev/md2和/dev/md3是要建立的RAID裝置的名稱,--level=5指定了RAID級别為5,--raid-devices=3指定了使用3個磁盤驅動器。根據情況和需求,可以設定不同的RAID裝置數量和磁盤驅動器。
3 建立RAID 0陣列,使用以下指令建立RAID 0陣列
sudo mdadm --create /dev/md4 --level=0 --raid-devices=2 /dev/md0 /dev/md1
sudo mdadm --create /dev/md5 --level=0 --raid-devices=2 /dev/md2 /dev/md3
4 等待RAID 0陣列初始化完成;監視初始化進度:
cat /proc/mdstat
5 RAID 0陣列初始化完成;将檔案系統格式化并挂載RAID裝置:
sudo mkfs.ext4 /dev/md4
sudo mkfs.ext4 /dev/md5
sudo mkdir /mnt/raid50
sudo mount /dev/md4 /mnt/raid50
使用ext4檔案系統進行格式化,建立了一個名為/mnt/raid50的挂載目錄,并将RAID裝置/dev/md4挂載到該目錄。
到這裡就成功實作了RAID 50陣列,所有寫入/mnt/raid50目錄的資料将通過RAID 5陣列進行分布式存儲,并通過RAID 0陣列進行條帶化,進而提供資料的備援性和性能增強。
---------------------------------------------------------
1.2.9 RAID-60
RAID 60(有時稱為 RAID 6+0)将多個 RAID 6 集(帶雙奇偶校驗的條帶化)與 RAID 0(條帶化)結合在一起。雙奇偶校驗允許每個 RAID 6 陣列中的兩個驅動器發生故障,而條帶化可提高容量和性能,而無需向每個 RAID 6 陣列添加驅動器。
與 RAID 50 一樣,RAID 60 配置可以容納 8 個或更多驅動器,但隻能用于 16 個以上驅動器的配置。RAID 60 的可用容量在 50%-88% 之間,具體取決于 RAID 組中資料驅動器的數量。
優點
- 組内每個 RAID 6 陣列可以承受兩個驅動器故障,是以非常安全
- 非常大且物有所值,考慮到除非有大量驅動器,否則不會使用此 RAID 級别
缺點
- 需要大量驅動器
- 由于奇偶校驗計算丢失了更多驅動器,是以比 RAID 50 稍貴
- RAID 60是一種将RAID 6和RAID 0結合起來的RAID級别,它提供了高性能和資料備援性。
- 在RAID 60中,資料被分成塊并分布在多個磁盤上,類似于RAID 0。然後,每個資料塊都被使用RAID 6的方式進行備援存儲,提供了額外的資料保護。
- RAID 60至少需要8個磁盤驅動器來實作。它将這些驅動器分成多個RAID 6陣列,并将這些RAID 6陣列組合成一個RAID 0陣列。這樣就同時提供了RAID 0的性能增益和RAID 6的雙重備援性。
案例:使用8個磁盤驅動器建立RAID 60陣列
1 假設我們有八個硬碟:
/dev/sda、/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde、/dev/sdf、/dev/sdg和/dev/sdh
2 建立四個RAID 6陣列:
sudo mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd
sudo mdadm --create /dev/md1 --level=6 --raid-devices=4 /dev/sde /dev/sdf /dev/sdg /dev/sdh
3 建立一個RAID 0陣列,将兩個RAID 6陣列作為成員:
sudo mdadm --create /dev/md2 --level=0 --raid-devices=2 /dev/md0 /dev/md1
4 等待RAID陣列初始化完成。
5 檢視RAID陣列的狀态:
sudo mdadm --detail /dev/md2
6 将RAID陣列格式化為檔案系統,并将其挂載到系統中,類似于前面提到的步驟。
---------------------------------------------------------
1.2.10 RAID 總結
常用級别:RAID-0, RAID-1, RAID-5, RAID-6,RAID-10, RAID-50,RAID-60
---------------------------------------------------------
1.3 實作軟RAID
- mdadm工具:為軟RAID提供管理界面,為空餘磁盤添加備援,結合核心中的md(multi devices)
- RAID裝置可命名為/dev/md0、/dev/md1、/dev/md2、/dev/md3等mdadm:模式化的工具,支援的RAID級别:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10
指令的文法格式:
mdadm [mode] <raiddevice> [options] <component-devices>
常用選項說明
模式:
建立:-C
裝配:-A
監控:-F
管理:-f, -r, -a
<raiddevice>: /dev/md#
<component-devices>: 任意塊裝置
-C: 建立模式
-n #: 使用#個塊裝置來建立此RAID
-l #:指明要建立的RAID的級别
-a {yes|no}:自動建立目标RAID裝置的裝置檔案
-c CHUNK_SIZE: 指明塊大小,機關k
-x #: 指明空閑盤的個數
-D:顯示raid的詳細資訊
mdadm -D /dev/md#
管理模式:
-f: 标記指定磁盤為損壞
-a: 添加磁盤
-r: 移除磁盤
觀察md的狀态: cat /proc/mdstat
案例:
#使用mdadm建立并定義RAID裝置
mdadm -C /dev/md0 -a yes -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}1
#用檔案系統對每個RAID裝置進行格式化
mkfs.xfs /dev/md0
#使用mdadm檢查RAID裝置的狀況
mdadm --detail|D /dev/md0
#增加新的成員
mdadm –G /dev/md0 –n4 -a /dev/sdf1
#模拟磁盤故障
mdadm /dev/md0 -f /dev/sda1
#移除磁盤
mdadm /dev/md0 –r /dev/sda1
#在備用驅動器上重建分區
mdadm /dev/md0 -a /dev/sda1
#系統日志資訊
cat /proc/mdstat
生成配置檔案:
mdadm –D –s >> /etc/mdadm.conf
停止裝置:
mdadm –S /dev/md0
激活裝置:
mdadm –A –s /dev/md0
強制啟動:
mdadm –R /dev/md0
删除raid資訊:
mdadm --zero-superblock /dev/sdb1