1. 程式人生 > 其它 >RAID 磁碟陣列

RAID 磁碟陣列

目錄:

一:磁碟陣列詳解

  1.1 RAID 磁碟陣列介紹

  1.2 RAID 0

  1.3 RAID 1

  1.4 RAID 5

  1.5 RAID 6

  1.6 RAID 1+0

  1.7 陣列卡介紹

  1.8 raid 快取

二: 建立軟RAID 陣列

  2.1 下載mdadm 軟體包

  2.2 分割槽並修改id標記

  2.3 建立RAID 裝置

  2.4 格式化並掛載使用

  2.5 測試

  2.6 建立配置檔案

  2.7 mdadm的命令

一: 磁碟陣列詳解

1.1 RAID磁碟陣列介紹

  • 是 Redundant Array of Independent Disks的縮寫,中文簡稱為獨立冗餘磁碟陣列
  • 把多塊獨立的物理硬碟按不同的方式組合起來形成一個硬碟組(邏輯硬碟) ,從而提供比單個硬碟更高的儲存效能和提供資料備份技術
  • 組成磁碟陣列的不同方式稱為RAID級別(RAID Levels)

常用的RAID級別 :

RAIDO, RAID1, RAID5, RAID6 , RAID1+0等

1.2 RAID 0

RAID 0 (條帶化儲存)
  • 連續以位或位元組為單位分割資料,並行讀/寫 於多個磁碟上,因此具有很高的資料傳輸率,但它沒有資料冗餘
  • 只是單純地提高效能,而且其中的一個磁碟失效將影響到所有資料
  • 不能應用於資料安全性要求高的場合

N塊硬碟並行組合成一個新的邏輯盤

1.3 RAID 1

RAID 1 (映象儲存)

  • 通過磁碟資料映象實現資料冗餘,在成對的獨立磁碟上產生互為備份的資料
  • 當原始資料繁忙時,可以直接從映象拷貝中讀取資料,因此,RAID 1 可以提高讀取效能
  • RAID 1 是磁碟陣列中單位成本最高的,但是提供了很高的資料安全性和可用性。當一個磁碟失效時,系統可以自動切換到映象磁碟上讀寫,而不需要重組失效的資料

N(偶數) 塊硬碟組合成一組映象, N/2 容量

1.4 RAID 5

RAID 5

  • N (N>=3) 塊盤組成陣列,一份資料產生N-1 個條帶,同時還有1分校驗資料,共N份資料在N塊盤上迴圈儲存
  • N塊盤同時讀寫,讀效能很高,但是由於有校驗機制的問題,寫效能相對不高
  • (N -1 )/ N 磁碟利用率
  • 可靠性高,允許壞 1 塊盤,不影響所有資料

1.5 RAID 6

  • N (N>=4) 塊盤組成陣列,(N -2) /N 磁碟利用率
  • 與RAID 5 相比 , RAID 6 增加了 第二塊獨立的奇偶校驗資訊塊
  • 兩個獨立的奇偶系統使用不同的演算法,即使兩塊磁碟同時失效也不會影響資料的使用
  • 相對於RAID 5 有更大的“寫損失” ,因此寫效能相對較差

1.6 RAID 1+0

  • RAID 1+0 (先做映象,再做條帶)
  • N(偶數,N>=4) 塊盤兩兩映象後,再組合成一個RAID 0
  • N/2 磁碟利用率
  • N/2 塊盤同時寫入,N塊盤同時讀取
  • 效能高,可靠性高

小結:各級別raid 對比

RID 級別 硬碟數量 硬碟利用率 是否有校驗 安全性 寫效能
RAID0 N N 單個硬碟的N倍
RAID1 N(偶數) N/2 允許一個裝置故障 需要寫兩對儲存裝置
RAID5 N>=3 (N-1)/N 允許有一個裝置故障 需要寫計算校驗資料
RAID6 N>=4 (N-2)/N 允許有兩個裝置故障 需要寫雙重計算校驗資料
RAID10 N>=4 N/2 允許兩個基組中各壞一個 N/2 塊盤同時寫入

1.7 陣列卡介紹

  • 陣列卡是用來實現RAID功能的板卡
  • 通常是由I/O處理器,硬碟控制器,硬碟聯結器和快取等一系列組建構成
  • 不同的RAID 卡支援的RAID 功能不同
  • RAID 卡介面型別:IDE介面,SCSI 介面, SATA 介面 ,SAS 介面

1.8 陣列卡的快取

  • 快取(Cache) 是RAID 卡與外部匯流排交換資料的場所,RAID 卡先是將資料傳送到快取,再由快取和外邊資料匯流排交換資料
  • 快取的大小與速度是直接關係到RAID 卡的實際傳輸速度的重要因素
  • 不同的RAID 卡出廠時配備的記憶體容量不同,一般為幾兆到數百兆容量不等
陣列的寫快取是將資料寫到Cache,當Cache 的資料積累到一定程度,陣列才把資料刷到磁碟,這樣可以實現批量的寫入,大幅提高寫的速度。 Cache的大小對整個I/O效能的影響是非常大。但是, 一旦伺服器斷電,快取資料就是丟失。因此,出現了一種可迴圈充電式電池被應用到陣列卡快取單元上。平時使用主機板供電,一旦伺服器斷電,自動使用電池供電。

二:建立軟RAID 磁碟陣列

步驟: 安裝mdadm 軟體包 --> 磁碟分割槽,修改ID為RAID 型別 ---> 建立磁碟陣列 ---> 格式化磁碟 ---->掛載----> 測試---> 建立配置檔案

2.1 下載mdadm 軟體包

使用 rpm -qa | grep mdadm , 檢查軟甲包是否已經下載安裝

如果沒有下載,用 yum -y install mdadm 下載mdadm 軟體包

2.2 分割槽並修改ID標記

使用fdisk工具將新磁碟裝置/dev/sdb /dev/sdc /dev/sdd /dev/sde劃分出主分割槽sdb1、 sdc1, sdd1、 sdel,並且把分割槽型別的ID標記號改為"fd"
[root@localhost ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   60G  0 disk 
├─sda1   8:1    0  500M  0 part /boot
├─sda2   8:2    0    4G  0 part [SWAP]
└─sda3   8:3    0 55.5G  0 part /
sdb      8:16   0   20G  0 disk 
sdc      8:32   0   20G  0 disk 
sdd      8:48   0   20G  0 disk 
sde      8:64   0   20G  0 disk 
sr0     11:0    1  4.2G  0 rom  

[root@localhost ~]# echo 'n
> p
>
>
>
> t
> fd
> w' | fdisk /dev/sdb #非互動式磁碟分割槽,並修改分割槽系統型別為raid

##磁碟/dev/sdbc /dev/sdd /dev/sde 同樣操作

[root@localhost ~]# for i in {b,c,d,e}; do fdisk -l /dev/sd$i | grep /dev/sd$i ; done #檢視分割槽結果
磁碟 /dev/sdb:21.5 GB, 21474836480 位元組,41943040 個扇區
/dev/sdb1 2048 41943039 20970496 fd Linux raid autodetect
磁碟 /dev/sdc:21.5 GB, 21474836480 位元組,41943040 個扇區
/dev/sdc1 2048 41943039 20970496 fd Linux raid autodetect
磁碟 /dev/sdd:21.5 GB, 21474836480 位元組,41943040 個扇區
/dev/sdd1 2048 41943039 20970496 fd Linux raid autodetect
磁碟 /dev/sde:21.5 GB, 21474836480 位元組,41943040 個扇區
/dev/sde1 2048 41943039 20970496 fd Linux raid autodetect

2.3 建立RAID 裝置

mdadm -C -v /dev/md0 [-a yes] -l5 -n3 /dev/sd[bcd]1 -x1 /dev/sde1 #建立磁碟陣列raid 5 ###raid 10 則先做raid 1 ,在將raid 1 做成raid 0 -C :表示新建; -v :顯示建立過程中的詳細資訊。 /dev/mdo :建立RAID5的名稱(名字一般以md 開頭) -a yes : --auto,表示如果有什麼裝置檔案沒有存在的話就自動建立,可省略。 -l :指定RAID的級別, l5表示建立RAID5。 -n :指定使用幾塊硬碟建立RAID, n3表示使用3塊硬碟建立RAID. /dev/sd[bcd]1 :指定使用這3塊磁碟分割槽去建立RAID. -x :指定使用幾塊硬碟做RAID的熱備用盤, x1表示保留1塊空閒的硬碟作備用 /dev/sdel :指定用作於備用的磁碟 檢視磁碟陣列的建立過程及狀態 watch -n 5 'cat /proc/mdstat' 或者: mdadm -D /dev/md0
[root@localhost ~]# mdadm -C -v /dev/md0 -l5 -n3 /dev/sd[bcd]1 -x1 /dev/sde1 
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 start

[root@localhost ~]# cat /proc/mdstat        #檢視磁碟陣列的建立過程
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd1[4] sde1[3](S) sdc1[1] sdb1[0]   #參與建立的磁碟
      41908224 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]   #uu表示 兩塊磁碟狀態完好  _  表示磁碟不線上  (當前只建立好兩個)
      [==========>..........]  recovery = 53.7% (11271168/20954112) finish=0.7min speed=206000K/sec   #建立進度
      
unused devices: <none>

[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Tue Jun 22 09:09:38 2021
        Raid Level : raid5      #磁碟陣列是raid 5
        Array Size : 41908224 (39.97 GiB 42.91 GB)     #陣列容量大小
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Tue Jun 22 09:11:23 2021
             State : clean 
    Active Devices : 3       #正活躍的磁碟
   Working Devices : 4       #此陣列工作的磁碟數
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 71f5d2f1:6c7c50ac:785f4ba3:58b2aa00
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       4       8       49        2      active sync   /dev/sdd1      #正在使用的三塊磁碟

       3       8       65        -      spare   /dev/sde1            #熱備份的磁碟

2.4 格式化磁碟並掛載使用

[root@localhost ~]# mkfs.xfs /dev/md0      #格式化為xfs 檔案系統
meta-data=/dev/md0               isize=512    agcount=16, agsize=654720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=10475520, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=5120, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/md0 /data    #掛載使用
[root@localhost ~]# df -hT
檔案系統       型別      容量  已用  可用 已用% 掛載點
/dev/sda3      xfs        56G  5.0G   51G    9% /
devtmpfs       devtmpfs  978M     0  978M    0% /dev
tmpfs          tmpfs     993M     0  993M    0% /dev/shm
tmpfs          tmpfs     993M  9.1M  984M    1% /run
tmpfs          tmpfs     993M     0  993M    0% /sys/fs/cgroup
/dev/sda1      xfs       497M  151M  346M   31% /boot
tmpfs          tmpfs     199M   12K  199M    1% /run/user/42
tmpfs          tmpfs     199M     0  199M    0% /run/user/0
/dev/md0       xfs        40G   33M   40G    1% /data


2.5 測試

手動故障磁碟陣列md0 中的磁碟 /dev/sdb1

[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb1             #將/dev/sdb1 磁碟 手動故障
mdadm: set /dev/sdb1 faulty in /dev/md0
[root@localhost ~]# cat /proc/mdstat                       #檢視陣列建立 
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdd1[4] sde1[3] sdc1[1] sdb1[0](F)
      41908224 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU]
      [====>................]  recovery = 20.1% (4212992/20954112) finish=1.3min speed=210649K/sec
      
unused devices: <none>

[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Tue Jun 22 09:09:38 2021
        Raid Level : raid5
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Tue Jun 22 09:38:56 2021
             State : clean, degraded, recovering 
    Active Devices : 2     #活躍的只剩下兩塊(因為一塊正在建立中
   Working Devices : 3     #一共只剩下三塊盤
    Failed Devices : 1
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 44% complete

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 71f5d2f1:6c7c50ac:785f4ba3:58b2aa00
            Events : 27

    Number   Major   Minor   RaidDevice State
       3       8       65        0      spare rebuilding   /dev/sde1
       1       8       33        1      active sync   /dev/sdc1
       4       8       49        2      active sync   /dev/sdd1

       0       8       17        -      faulty   /dev/sdb1     #磁碟失效

2.6 建立配置檔案

建立 /etc/mdadm.conf 配置檔案,方便管理軟RAID的配置,比如啟動、停止 echo 'DEVICE /dev/sdc1 /dev/sdb1 /dev/sdd1 /dev/sde1' > /etc/mdadm.conf mdadm --detail --scan >> /etc/mdadm. conf
[root@localhost ~]# echo   'DEVICE /dev/sdcl /dev/sdb1 /dev/sddl /dev/sdel'  >  /etc/mdadm.conf 
[root@localhost ~]# mdadm --detail --scan >> /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf 
DEVICE /dev/sdcl /dev/sdb1 /dev/sddl /dev/sdel
ARRAY /dev/md0 metadata=1.2 name=localhost.localdomain:0 UUID=71f5d2f1:6c7c50ac:785f4ba3:58b2aa00

2.7 mdadm命令其它常用選項

-D :檢視陣列資訊 -E :檢查磁碟是否已做raid -f :故障裝置 -r ∶ 移除裝置 -a∶ 新增裝置 -S∶ 停止RAID -A∶ 啟動RAID -s : 查詢/etc/mdadm.conf 的配置資訊

eg:

mdadm -D /dev/md0 #檢視陣列md0 的資訊

mdadm -E /dev/sd[bcde] #檢視磁碟/dev/sdd-sde 是否已做raid

mdadm /dev/md0 -f /sdb1 #可以手動下線裝置,模擬故障

mdadm /dev/mdo -r /dev/sdb1 #移除裝置

mdadm /dev/mdo -a /dev/sde1 #新增裝置

mdadm -s /dev/md0 #掃描配置檔案

mdadm -S/dev/md0 #停止RAID

mdadm -A /dev/md0 #啟動RAID
[root@localhost ~]# mdadm /dev/md0 -r /dev/sdb1     #將sdb1 從陣列 md0 中移除
mdadm: hot removed /dev/sdb1 from /dev/md0
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Tue Jun 22 09:09:38 2021
        Raid Level : raid5
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Tue Jun 22 10:38:07 2021
             State : clean 
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : localhost.localdomain:0  (local to host localhost.localdomain)
              UUID : 71f5d2f1:6c7c50ac:785f4ba3:58b2aa00
            Events : 41

    Number   Major   Minor   RaidDevice State
       3       8       65        0      active sync   /dev/sde1
       1       8       33        1      active sync   /dev/sdc1
       4       8       49        2      active sync   /dev/sdd1

[root@localhost ~]# mdadm  /dev/md0 -a /dev/sdb1      #將sdb1 新增到 md0中
mdadm: added /dev/sdb1

[root@localhost ~]# mdadm -D /dev/md0 | grep sdb1
       5       8       17        -      spare   /dev/sdb1

[root@localhost ~]# umount /dev/md0       #先解除安裝md0
[root@localhost ~]# mdadm -S /dev/md0     #停止陣列 md0
mdadm: stopped /dev/md0
[root@localhost ~]# mdadm -As /dev/md0     #啟動md0 並掃描 配置檔案
mdadm: /dev/md0 has been started with 3 drives and 1 spare.

[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Tue Jun 22 09:09:38 2021
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent

Update Time : Tue Jun 22 10:51:34 2021
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 512K

Consistency Policy : resync

Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 71f5d2f1:6c7c50ac:785f4ba3:58b2aa00
Events : 42

Number Major Minor RaidDevice State
3 8 65 0 active sync /dev/sde1
1 8 33 1 active sync /dev/sdc1
4 8 49 2 active sync /dev/sdd1

5 8 17 - spare /dev/sdb1