天天看點

RAID(獨立 備援磁盤陣列 )(Redundant Array of Independent Disks)

作者:那年小北風

RAID 0、1、5、10 方案對比

RAID(獨立 備援磁盤陣列 )(Redundant Array of Independent Disks)

不同場景RAID的使用

硬RAID: 需要RAID卡,有自己的CPU,處理速度快,有電池和無電池。

RAID(獨立 備援磁盤陣列 )(Redundant Array of Independent Disks)

硬raid

軟RAID: 通過作業系統實作,比如Windows、Linux

RAID 0

出于成本和技術方面的考慮,需要針對不同求在資料可靠性及讀寫能上 做出 權衡, 制定出滿足各自需求的 不同方案。目前已有RAID磁盤陣列的方案至少有十幾種, RAID 0、 RAID 1、 RAID 5與 RAID 10 這 4種最常見的方案 。這 4種 方案的對比如表所示,其中 n代表硬碟總數。

RAID 0 技術把多塊實體硬碟裝置(至少兩塊)通過硬體或軟體的方式串聯在一起,組成一個大的卷組,并将資料依次寫入各個實體硬碟中。這樣一來,在最理想的狀态下,硬碟裝置的讀寫性能會提升數倍,但是若任意一塊硬碟發生故障,将導緻整個系統的資料都受到破壞。通俗來說,RAID 0 技術能夠有效地提升硬碟資料的吞吐速度,但是不具備資料備份和錯誤修複能力。如下圖 所示,資料被分别寫入到不同的硬碟裝置中,即硬碟 A 和硬碟 B 裝置會分别儲存資料資料,最終實作提升讀取、寫入速度的效果。

RAID(獨立 備援磁盤陣列 )(Redundant Array of Independent Disks)

RAID0 條帶集 2塊磁盤以上, 讀寫速率快 100%*N,但不容錯

RAID 1

盡管 RAID 0 技術提升了硬碟裝置的讀寫速度,但它是将資料依次寫入到各個實體硬碟 中。也就是說,它的資料是分開存放的,其中任何一塊硬碟發生故障都會損壞整個系統的數 據。是以,如果生産環境對硬碟裝置的讀寫速度沒有要求,而是希望增加資料的安全性時, 就需要用到 RAID 1 技術了。

在圖下圖所示的RAID1技術示意圖中可以看到,它是把兩塊以上的硬碟裝置進行綁定,在寫入資料時,是将資料同時寫入到多塊硬碟裝置上(可以将其視為資料的鏡像或備份)。當其中某一塊硬碟發生故障後,一般會立即自動以熱交換的方式來恢複資料的正常使用

RAID(獨立 備援磁盤陣列 )(Redundant Array of Independent Disks)

RAID1 鏡像集 2塊磁盤, 容量50% ,讀寫速率一般,容錯

考慮到在進行寫入操作時因硬碟切換帶來的開銷,是以 RAID 1 的速度會比 RAID 0 有微 弱地降低。但在讀取資料的時候,作業系統可以分别從兩塊硬碟中讀取資訊,是以理論讀取 速度的峰值可以是硬碟數量的倍數。另外,平時隻要保證有一塊硬碟穩定運作,資料就不會 出現損壞的情況,可靠性較高。

RAID 1 技術雖然十分注重資料的安全性,但是因為是在多塊硬碟裝置中寫入了相同的資料,是以硬碟裝置的使用率得以下降。從理論上來說,上圖 所示的硬碟空間的真實可用率 隻有 50%,由 3 塊硬碟裝置組成的 RAID 1 磁盤陣列的可用率隻有 33%左右;以此類推。而且,由于需要把資料同時寫入到兩塊以上的硬碟裝置,這無疑也在一定程度上增大了系統計算功能的負載。

那麼,有沒有一種 RAID 方案既考慮到了硬碟裝置的讀寫速度和資料安全性,還兼顧了 成本問題呢?實際上,單從資料安全和成本問題上來講,就不可能在保持原有硬碟裝置的利

用率且還不增加新裝置的情況下,能大幅提升資料的安全性。劉遄老師也沒有必要忽悠各位

下面将要講解的 RAID 5 技術雖然在理論上兼顧了三者(讀寫速度、資料安全性、成本), 但實際上更像是對這三者的“互相妥協”。

RAID 5

RAID5 技術是把硬碟裝置的資料奇偶校驗資訊儲存到其他硬碟裝置中。 RAID 5 磁盤陣列中資料的奇偶校驗資訊并不是單獨儲存到某一塊硬碟裝置中,而是存儲到除 自身以外的其他每一塊硬碟裝置上。這樣的好處是,其中任何一裝置損壞後不至于出現緻命 缺陷。如下圖 中 Parity 部分存放的就是資料的奇偶校驗資訊。換句話說,就是 RAID 5 技術實 際上沒有備份硬碟中的真實資料資訊,而是當硬碟裝置出現問題後通過奇偶校驗資訊來嘗試 重建損壞的資料。RAID 這樣的技術特性“妥協”地兼顧了硬碟裝置的讀寫速度、資料安全性與存儲成本問題。

RAID 5 最少由 3 塊硬碟組成,使用的是硬碟切割(Disk Striping)技術。相較于 RAID 1 級别,好處就在于儲存的是奇偶校驗資訊而不是一模一樣的檔案内容,是以當重複寫入某個 檔案時,RAID 5 級别的磁盤陣列組隻需要對應一個奇偶校驗資訊就可以,效率更高,存儲成 本也會随之降低。

RAID(獨立 備援磁盤陣列 )(Redundant Array of Independent Disks)
RAID(獨立 備援磁盤陣列 )(Redundant Array of Independent Disks)

RAID5 帶奇偶校驗條帶集 3塊磁盤以上, 使用率 (n-1)/n 讀寫速率快,容錯

RAID 10

RAID 5 技術是出于硬碟裝置的成本問題對讀寫速度和資料的安全性能有了一定的妥協, 但是大部分企業更在乎的是資料本身的價值而非硬碟價格,是以在生産環境中主要使用 RAID 10 技術。顧名思義,RAID 10 技術是 RAID 1+RAID 0 技術的一個“組合體”。如下圖 所示,RAID10 技術需要至少 4 塊硬碟來組建,其中先分别兩兩制作成 RAID 1 磁盤陣列,以保證資料的安 全性;然後再對兩個 RAID 1 磁盤陣列實施 RAID 0 技術,進一步提高硬碟裝置的讀寫速度。這樣從理論上來講,隻要壞的不是同一陣列中的所有硬碟,那麼最多可以損壞 50%的硬碟裝置而不丢失資料。由于 RAID 10 技術繼承了 RAID 0 的高讀寫速度和 RAID 1 的資料安全性,在不 考慮成本的情況下 RAID 10 的性能也超過了 RAID 5,是以目前成為廣泛使用的一種存儲技術。

RAID(獨立 備援磁盤陣列 )(Redundant Array of Independent Disks)

仔細檢視上圖 可以發現,RAID 10 是先對資訊進行分割,然後再兩兩一組制作鏡像。 也就是先将 RAID 1 作為最低級别的組合,然後再使用 RAID 0 技術将 RAID 1 磁盤陣列組合 到一起,将它們視為“一整塊”硬碟。而 RAID 01 則相反,它是先将硬碟分為兩組,然後使用 RAID 0 作為最低級别的組合,再将這兩組 RAID 0 硬碟通過 RAID 1 技術組合到一起。

RAID 10 技術和 RAID 01 技術的差別非常明顯。在 RAID 10 中,任何一塊硬碟損壞都不 會影響到資料安全性,其餘硬碟均會正常運作。但在 RAID 01 中,隻要有任何一塊硬碟損壞,最低級别的RAID0磁盤陣列馬上會停止運作,這可能造成嚴重隐患。是以RAID10遠比RAID 01常見,很多主機闆甚至不支援RAID01。

部署磁盤陣列

首先,需要在虛拟機中添加 4 塊硬碟裝置來制作一個 RAID 10 磁盤陣列,如圖 7-5 所示。這 裡不再詳述添加硬碟的步驟,大家自己操作就行。記得硬碟要用 SCSI 或 SATA 接口的類型, 大小預設 20GB 就可以。

這幾塊硬碟裝置是模拟出來的,不需要特意去買幾塊真實的實體硬碟插到電腦上。需要 注意的是,一定要記得在關閉系統之後,再在虛拟機中添加硬碟裝置,否則可能會因為計算 機架構的不同而導緻虛拟機系統無法識别新添加的硬碟裝置。

目前,生産環境中用到的伺服器一般都配備 RAID 陣列卡,盡管伺服器的價格越來越便宜,但是我們沒有必要為了做一個實驗而去單獨購買一台伺服器,而是可以學會使用 mdadm 指令在 Linux 系統中建立和管理軟體 RAID 磁盤陣列,而且它涉及的理論知識和操作過程與 生産環境中的完全一緻。

mdadm 指令用于建立、調整、監控和管理 RAID 裝置,英文全稱為“multiple devices

admin”,文法格式為“mdadm參數硬碟名稱”。

RAID(獨立 備援磁盤陣列 )(Redundant Array of Independent Disks)
RAID(獨立 備援磁盤陣列 )(Redundant Array of Independent Disks)
RAID(獨立 備援磁盤陣列 )(Redundant Array of Independent Disks)

mdadm 指令中的常用參數及作用

RAID(獨立 備援磁盤陣列 )(Redundant Array of Independent Disks)

準備4塊硬碟

[root@localhost ~]# ll /dev/sd*
brw-rw---- 1 root disk 8, 48 Tue May 9 16:07 /dev/sdd
brw-rw---- 1 root disk 8, 64 Tue May 9 16:07 /dev/sde
brw-rw---- 1 root disk 8, 80 Tue May 9 16:07 /dev/sdf
brw-rw---- 1 root disk 8, 80 Tue May 9 16:07 /dev/sdg           

建立RAID

[root@localhost ~]# mdadm -Cv /dev/md0 -n 4 -l 10  /dev/sd{d,e,f,g}
mdadm: layout defaults to n2
mdadm: layout defaults to n2 
mdadm: chunk size defaults to 512K mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.           

備注:-C 建立RAID /dev/md0 第一個RAID裝置 -l10 RAID10 -n RAID成員的數量 可用空間2G

[root@localhost ~]# yum -y install mdadm //確定mdadm指令可用

格式化,挂載

[root@localhost ~]# mkfs.ext4 /dev/md0
[root@localhost ~]# mkdir /mnt/raid10
[root@localhost ~]# mount /dev/md0 /mnt/raid10
[root@localhost ~]# cp -rf /etc /mnt/raid10/etc1           
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 969M 0 969M 0% /dev
tmpfs 984M 0 984M 0% /dev/shm
tmpfs 984M 9.6M 975M 1% /run
tmpfs 984M 0 984M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 3.9G 14G 23% /
/dev/sr0 6.7G 6.7G 0 100% /media/cdrom
/dev/sda1 1014M 152M 863M 15% /boot
tmpfs 197M 16K 197M 1% /run/user/42
tmpfs 197M 3.5M 194M 2% /run/user/0
/dev/md0 40G 49M 38G 1% /RAID           

再來檢視/dev/md0 磁盤陣列裝置的詳細資訊,确認 RAID 級别(Raid Level)、陣列大小

(Array Size)和總硬碟數(Total Devices)都是否正确:

[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Tue May 9 16:08:40 2023 Raid Level : raid10
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 4 Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Jan 14 04:49:57 2021 State : clean
Active Devices : 4 
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2 Chunk Size : 512K
           

永久挂載

[root@localhost ~]#vim /etc/fstab

/dev/md10 /mnt/raid10 ext4 defaults 0 0

磁盤 挂載點 檔案系統類型 預設選項 優先級 優先級

然後使用立刻挂載指令mount -a

[root@localhost ~]# echo "/dev/md0 /mnt/raid10 ext4 defaults 0 0" >> /etc/fstab

[root@localhost ~]# cat /etc/fstab

/dev/md0 /mnt/raid10 ext4 defaults 0 0