天天看點

RAID 磁盤陣列概念、方案組以及實作

文章目錄

    • RAID概念
    • RAID分類
      • 硬 RAID
      • 軟 RAID
    • RAID主要優勢
    • RAID 方案組
      • RAID 0
      • RAID 1
      • RAID 5
      • RAID 10
    • 實作 RAID 1
      • 建立分區、RAID 1
      • 格式化、挂載
      • 模拟損壞
      • 添加熱備盤
    • 總結

RAID概念

RAID ( Redundant Array of Independent Disks —> 獨立磁盤備援陣列 ),RAID 技術是将許多塊硬碟裝置組合成一個容量更大、更安全的硬碟組,可以将資料切割成多個區段後分别存放在各個不同實體硬碟裝置上,然後利用分散讀寫需求來提升硬碟組整體的性能,同時将重要資料同步儲存多份到不同的實體硬碟裝置上,可以有非常好的資料備份效果。

RAID分類

硬 RAID

使用硬體陣列卡,硬 RAID 擁有自己的 RAID 控制處理與 I/O 處理晶片,甚至還有陣列緩沖,對 CPU 的占用率和整體性能是三類實作中最優的,但實作成本也最高的。硬 RAID 通常都支援熱交換技術,在系統運作下更換故障磁盤。

RAID 磁盤陣列概念、方案組以及實作

軟 RAID

通過作業系統軟體來實作,軟 RAID 沒有專用的控制晶片和 I/O 晶片,完全由作業系統和 CPU 來實作所的 RAID 的功能。現代作業系統基本上都提供軟 RAID 支援,通過在磁盤裝置驅動程式上添加一個軟體層,提供一個實體驅動器與邏輯驅動器之間的抽象層。

RAID主要優勢

高性能:RAID 将資料 I/O 分散到各個成員磁盤上,進而獲得比單個磁盤成倍增長的聚合 I/O 性能

大容量:RAID 擴大了磁盤的容量,由多個磁盤組成的 RAID 系統具有海量的存儲空間

可靠性:RAID 備援技術大幅提升資料可用性和可靠性,保證了若幹磁盤出錯時,不會導緻資料的丢失

可管理性:RAID 是一種虛拟化技術,它對多個實體磁盤驅動器虛拟成一個大容量的邏輯驅動器

RAID 方案組

RAID 等級 RAID0 RAID1 RAID5 RAID10
别名 條帶 鏡像 分布奇偶校驗條帶 鏡像加條帶
容錯性
備援類型
熱備份選擇
讀性能
随機寫性能 一般 一般
連續寫性能 一般
需要磁盤數 n≥1 2n (n≥1) n≥3 2n(n≥2)≥4
可用容量 全部 50% (n-1)/n 50%

RAID 0

将多塊實體硬碟裝置通過硬體或軟體的方式串聯在一起( 需磁盤數量2塊以上,最好大小相同 ),成為一個大的卷組,稱為條帶卷。它将資料依次分别寫入到各個實體硬碟中,這樣最理想的狀态會使得讀寫性能提升數倍,但是任意一塊故障都會使整個系統故障。

RAID 磁盤陣列概念、方案組以及實作

如圖,資料被寫入到不同的硬碟裝置中

特點:成本低,可以提高整個磁盤的性能和吞吐量

應用場景: 迅速讀寫,安全性要求不高, 比如圖形工作站

RAID 1

把資料再制作出多份鏡像,當有某一塊硬碟損壞後,一般可以立即通過熱交換方式來恢複資料的正常使用。是以追求資料安全性的時候就不應該使用RAID0,而是使用RAID1。

RAID 磁盤陣列概念、方案組以及實作

如圖,同一份資料儲存了多份

RAID 5

需要三塊或以上硬碟,可以提供熱備盤實作故障的恢複;隻損壞一塊,沒有問題。但如果同時損壞兩塊磁盤,則資料将都會損壞。RAID5硬碟組技術雖然理論上是兼顧三者的,但實際上是對各個方面的互相妥協和平衡。

RAID 磁盤陣列概念、方案組以及實作

如圖:同時存儲資料和校驗資料

應用場景: 随機資料寫入,安全性要求比較高,伺服器,資料庫存儲

RAID 10

RAID5 在成本問題和讀寫速度以及安全性能上進行了平衡,但是相比價格,資料的價值才是更重要的,是以更多的是使用RAID10,就是對 RAID1 + RAID0 的一個 “組合體”。

RAID 磁盤陣列概念、方案組以及實作

如圖,先由 RAID1儲存多份,再由 RAID 0 寫入到不同磁盤

應用場景: 有大量資料需要存儲,同時又對資料安全性要求比較高的領域,銀行,商務

實作 RAID 1

RAID-1 :mirroring(鏡像卷)需要磁盤兩塊以上

原理:是把一個磁盤的資料鏡像到另一個磁盤上,也就是說資料在寫入一塊磁盤的同時,會在另一塊閑置的磁盤上生成鏡像檔案( 同步 )

特性:當一塊硬碟失效時,系統會忽略該硬碟,轉而使用剩餘的鏡像盤讀寫資料,具備很好的磁盤備援能力。

建立分區、RAID 1

詳細建立請看上一篇部落格:Fdisk 建立分區、進行格式化、最後挂載目錄,建立四個5G分主分區

[[email protected]-21 ~]# fdisk -l
……
   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1            2048    10487807     5242880   83  Linux
/dev/sdd2        10487808    20973567     5242880   83  Linux
/dev/sdd3        20973568    31459327     5242880   83  Linux
/dev/sdd4        31459328    41943039     5241856    5  Extended
…… 
[[email protected]-21 ~]# partprobe /dev/sdd
[[email protected]-21 ~]# ll /dev/sdd*
brw-rw----. 1 root disk 8, 48 Feb 28 23:57 /dev/sdd
brw-rw----. 1 root disk 8, 49 Feb 28 23:57 /dev/sdd1
brw-rw----. 1 root disk 8, 50 Feb 28 23:57 /dev/sdd2
brw-rw----. 1 root disk 8, 51 Feb 28 23:57 /dev/sdd3
brw-rw----. 1 root disk 8, 52 Feb 28 23:57 /dev/sdd4
           

安裝管理軟體 RAID 的軟體:mdadm

[[email protected]-21 ~]# yum -y install mdadm
Loaded plugins: fastestmirror
Determining fastest mirrors
epel/x86_64/metalink              | 5.4 kB     00:00     
 * base: mirrors.aliyun.com
 * epel: mirrors.njupt.edu.cn
……
Installed:
  mdadm.x86_64 0:4.1-1.el7                               
Complete!
           

建立 RAID 1

[[email protected]-21 ~]# mdadm -C -v /dev/md2  -l 1 -n 2 -x 1 /dev/sdd1 /dev/sdd[2,3]
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
mdadm: size set to 5237760K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md2 started.
           

将RAID1資訊儲存到配置檔案中

# 檢視 RAID1 資訊
[[email protected]-21 ~]# mdadm -Dsv 
ARRAY /dev/md2 level=raid1 num-devices=2 metadata=1.2 spares=1 name=fp-21:2 UUID=54add2b3:71f8fe8f:c6c2fb47:7c5d22d9
   devices=/dev/sdd1,/dev/sdd2,/dev/sdd3
# 将 RAID1 資訊添加到配置檔案中
[[email protected]-21 ~]# mdadm -Dsv > /etc/mdadm.conf
           

檢查磁盤陣列

[[email protected]-21 ~]# mdadm -D /dev/md2 
/dev/md2:
           Version : 1.2
     Creation Time : Fri Feb 28 23:58:02 2020	# 磁盤陣列建立的時間
        Raid Level : raid1
        Array Size : 5237760 (5.00 GiB 5.36 GB)
     Used Dev Size : 5237760 (5.00 GiB 5.36 GB)
      Raid Devices : 2
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Fri Feb 28 23:58:15 2020
             State : clean 
    Active Devices : 2	# 目前的活動裝置數量
   Working Devices : 3	# 工作裝置
    Failed Devices : 0	# 失效的裝置
     Spare Devices : 1	# 熱備份的數量

Consistency Policy : resync

              Name : fp-21:2  (local to host fp-21)
              UUID : 54add2b3:71f8fe8f:c6c2fb47:7c5d22d9
            Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       49        0      active sync   /dev/sdd1
       1       8       50        1      active sync   /dev/sdd2
       
       2       8       51        -      spare   /dev/sdd3
           

格式化、挂載

在 raid 裝置上建立檔案系統并挂載

# 格式化
[[email protected]-21 ~]# mkfs.xfs /dev/md2
meta-data=/dev/md2               isize=512    agcount=4, agsize=327360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1309440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
# 建立挂載目錄
[[email protected]-21 ~]# mkdir /opt/raid1
# 挂載
[[email protected]-21 ~]# mount /dev/md2 /opt/raid1/
# 檢視挂載是否成功
[[email protected]-21 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  1.9G   16G  12% /
devtmpfs                 2.0G     0  2.0G   0% /dev
tmpfs                    2.0G     0  2.0G   0% /dev/shm
tmpfs                    2.0G   12M  2.0G   1% /run
tmpfs                    2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/sda1               1014M  133M  882M  14% /boot
tmpfs                    394M     0  394M   0% /run/user/0
/dev/md2                 5.0G   33M  5.0G   1% /opt/raid1
           

建立測試檔案

[[email protected]-21 ~]# touch /opt/test.txt
[[email protected]-21 ~]# echo "如果一塊磁盤損壞,我是否還存在?" > !$
echo "如果一塊磁盤損壞,我是否還存在?" > /opt/test.txt
           

模拟損壞

# 損壞磁盤
[[email protected]-21 ~]# mdadm /dev/md2 -f /dev/sdd1
mdadm: set /dev/sdd1 faulty in /dev/md2
# 檢視陣列詳細資訊
[[email protected]-21 ~]# mdadm  -D /dev/md2
/dev/md2:
           Version : 1.2
     Creation Time : Fri Feb 28 23:58:02 2020
        Raid Level : raid1
        Array Size : 5237760 (5.00 GiB 5.36 GB)
     Used Dev Size : 5237760 (5.00 GiB 5.36 GB)
      Raid Devices : 2
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Sat Feb 29 00:10:08 2020
             State : clean 
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 1
     Spare Devices : 0

Consistency Policy : resync

              Name : fp-21:2  (local to host fp-21)
              UUID : 54add2b3:71f8fe8f:c6c2fb47:7c5d22d9
            Events : 36

    Number   Major   Minor   RaidDevice State
       2       8       51        0      active sync   /dev/sdd3
       1       8       50        1      active sync   /dev/sdd2

       0       8       49        -      faulty   /dev/sdd1
           

檢視測試檔案

[[email protected]-21 ~]# cat /opt/test.txt 
如果一塊磁盤損壞,我是否還存在?
           

移除損壞裝置

[[email protected]-21 ~]# mdadm  -r /dev/md2 /dev/sdd1
mdadm: hot removed /dev/sdd1 from /dev/md2
           

添加熱備盤

[[email protected]-21 ~]# mdadm -a /dev/md2 /dev/sdd4
mdadm: /dev/sdd4 not large enough to join array
           

總結

隻有注入思想的部落格才是好的部落格

繼續閱讀