RAID 磁碟陣列的應用

luashin發表於2016-02-16

   RAID一般翻譯為磁碟陣列,全稱是 Redundant Arrays of Inexpensive Disk,最初的構想是源於加州大學伯克利分校的一個研究小組的專案,他們希望透過大量廉價的硬碟來組建價格便宜,可用性高的磁碟陣列。但是RAID發展到今天,已經背離了當初價格便宜的初衷。但是RAID也帶來了另外的好處,如何合理選擇RAID的級別,可以構建出具有更高可用性,更好地容錯的磁碟。

 RAID主要分為軟體RAID和硬體RAID,軟體RAID主要是透過作業系統來實現,這樣會增加CPU的負擔,所以在實際場景中極少使用。硬體RAID使用獨立的硬體裝置和控制晶片,整體效能優於軟體RAIDRAID有不同的規範,但是總體上可以分為兩種:標準RAID和混合RAID。雖然現在的RAID有很多不同的規範,但是很多規範只是一種過渡性的實驗產品,在實際的生產環境中幾乎不使用。

1、標準RAID

1.1  RAID 0

    RAID 0也稱為條帶(strping),它將兩個以上的硬碟串聯起來,成為一個大容量的磁碟。在儲存資料時,資料分散儲存在這些磁碟中。因為資料讀寫都可以並行的進行,所以在所有的級別中,RIID的速度是最快的。但是RAID既沒有冗餘功能,也不提供容錯能力。如果有一個物理磁碟損壞,所有的資料都會丟失。所以,RAID只是在一些對資料安全性要求不高,但是速度要求較高的場景下使用,比如影片,影像等工作站。
                    

                   

1.2  RAID 1

    RAID  1稱為映象技術,需要兩塊以上的硬碟互作映象。也就是說,主盤上的資料和映象盤上的資料完全一樣。因此,在多執行緒的作業系統會大大提高資料的讀取速度。RAID 1 的可靠性非常高,只要有一塊硬碟正常就可以保證資料的完整性。但是RAID的缺點是浪費了大量的儲存空間。

               

RAID2-RAID4屬於實驗性的產品實際生產環境很少使用。

1.3  RAID 5

    RAID 5引入了資料校驗的功能,並且校驗的資料是分散的儲存在各塊硬碟上。RAID 5 實際上是速度與可靠性的一種折衷方案,在實際場景中應用較多。與RAID相比,儲存成本比較便宜。RAID 5至少需要3塊磁碟來實現。

                

1.4  RAID 6

    與RAID 5相比RAID6增加了第二個獨立的資訊校驗塊。兩個獨立的奇偶系統使用不同的演算法,資料的可靠性非常高,即使兩塊磁碟同時失效也不會影響資料的使用。RAID 6至少需要4塊以上的磁碟。

          

2、混合RAID

2.1 JBOD

   嚴格來講JBODJust a Bunch Of Disks)並不屬於RAID的等級,JBOD並沒有嚴格的規範,主要是用於實現將各個獨立的硬碟空間在邏輯上組合成一個大的硬碟。如果硬碟損毀,則存在上面的資料將無法救回。若第一塊硬碟損壞,將丟失所有的資料,危險程度與RAID 0相比有過之無不及。但是JBOD也有它的應用場景,例如就鼓勵使用JBOD,因為Hadoop由自己的一套容災方案。

            

2.2 RAID 01

   RAID 01是RAID 0RAID 1的一種組合。主要實現方案是先將資料分成兩組,然後再對資料進行映象對映。即先實現RAID 0,再實現RAID 1

          

2.3 RAID 10

    RAID 10與RAID 01恰好相反,是先進行資料映象,然後才對資料進行分組。

               

2.4 RAID 50

   RAID 5與RAID 0的結合,先作RAID 5,在作RAID 0,也就是對多組RAID 5構成條帶化的訪問。RAID 50RAID 5為基礎,而RAID 5至少需要3塊硬碟,要以多組RAID 5構成RAID 50,因此RAID至少需要6塊硬碟。RAID 50在底層任意一組或多組RAID 5中出現一塊硬碟損壞時,仍然可以維持運作,不過任意一組同時出現兩塊硬碟損壞時,整組RAID 50就會失效。

             

透過Linux 實現軟RAID

Linux實現RAID主要是透過mdadm來實現。

mdadm屬於模式化的命令,主要模式有:

建立模式

管理模式

監控模式

增長模式

裝配模式

mdadm的基本格式為:

# mdadm [mode]  [options]

裝配模式RAID的選項有:

-l:指定RAID的級別;

-n:指定裝置數,即磁碟的個數;

-a:自動為其建立裝置檔案;

-c,--chunk 指定分割資料塊的大小

1.實現RAID 0

準備工作:

兩個1G大小的磁碟分割槽。

[root@local ~]# mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{1,2} 
mdadm: /dev/sdb1 appears to contain an ext2fs file system 
    size=104388K  mtime=Thu Jan  1 08:00:00 1970 
    Continue creating array? (y/n) y 

為其建立檔案系統: 
[root@local ~]# mke2fs -j /dev/md0 

掛載檔案系統: 
[root@local mnt]# mount /dev/md0 /mnt/raid 

檢視掛載檔案系統的資訊: 
[root@local mnt]# df -h 
檔案系統                          容量  已用  可用  已用% 掛載點 
/dev/mapper/VolGroup00-LogVol00 18G   3.3G 14G  20%  / 
/dev/sda1                       99M   13M  82M  13%  /boot
tmpfs                           252M    0  252M 0%   /dev/shm
/dev/sr0                        3.3G  3.3G 0    100% /mnt/cdrom
.host:/                         56G   44G  12G  79%  /mnt/hgfs
/dev/md0                        1.9G  35M  1.8G 2%   /mnt/raid
這裡顯示檔案並沒有2G是正常顯現,因為RAID本身也有一些後設資料需要儲存。


2.實現
RAID 1
準備工作:
兩塊1G大小的磁碟分割槽。
[root@local ~]# mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdb{5,6} 

檢視狀態資訊 
[root@local ~]# cat /proc/mdstat 
Personalities : [raid0] [raid1]  
md1 : active raid1 sdb6[1] sdb5[0] 
      987840 blocks [2/2] [UU]         
md0 : active raid0 sdb2[1] sdb1[0] 
      1975744 blocks 64k chunks         
unused devices:  

建立檔案系統 
[root@local ~]# mke2fs -j /dev/md1 

檢視指定RAID裝置的詳細資訊 
[root@local ~]# mdadm -D /dev/md1 
/dev/md1: 
        Version : 0.90 
  Creation Time : Tue Mar  3 17:26:24 2015 
    Raid Level : raid1 
    Array Size : 987840 (964.85 MiB 1011.55 MB) 
  Used Dev Size : 987840 (964.85 MiB 1011.55 MB) 
  Raid Devices : 2 
  Total Devices : 2 
Preferred Minor : 1 
    Persistence : Superblock is persistent 
  
    Update Time : Tue Mar  3 17:30:22 2015 
          State : clean 
 Active Devices : 2 
Working Devices : 2 
 Failed Devices : 0 
  Spare Devices : 0 
  
          UUID : f6a3844f:282828af:45d573d8:5f0aa269 
        Events : 0.4 
  
    Number  Major  Minor  RaidDevice State 
      0      8      21        0      active sync  /dev/sdb5
      1      8      22        1      active sync  /dev/sdb6
  
模擬一塊硬碟損壞(管理模式) 
[root@local ~]# mdadm /dev/md1 --fail /dev/sdb5 
mdadm: set /dev/sdb5 faulty in /dev/md1
移除損壞的硬碟:(-r = --remove 

[root@local ~]# mdadm /dev/md1 -r /dev/sdb5 
mdadm: hot removed /dev/sdb5
更換新盤(和壞掉的盤的分割槽應保持一致)
 
[root@local ~]# mdadm /dev/md1 -a /dev/sdb7 
mdadm: added /dev/sdb7

停止磁碟陣列 
[root@local ~]# mdadm -S /dev/md1 
mdadm: stopped /dev/md1

重新裝配磁碟陣列 
[root@local ~]# mdadm -A --run /dev/md1 /dev/sdb5 /dev/sdb6 
mdadm: /dev/md1 has been started with 1 drive (out of 2).
 
掃描磁碟陣列的資訊,以後可以實現自動裝配: 
[root@local ~]# mdadm -D --scan > /etc/mdadm.conf

3.實現RAID 5
準備工作:3512M大小的磁碟
[root@local ~]# mdadm -C /dev/md5 -l5 -n3 /dev/sdb{8,9,10}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9034054/viewspace-1989497/,如需轉載,請註明出處,否則將追究法律責任。

相關文章