1. 程式人生 > >RAID及軟RAID的實現,包括各級別RAID的原理及各級別RAID的實現

RAID及軟RAID的實現,包括各級別RAID的原理及各級別RAID的實現

計算機內部的核心部件

對於計算機來講,核心部件有cpu 記憶體其中:cpu從記憶體中取得資料從而進行運算,由於記憶體是易失性裝置,若是做成非易失性裝置,代價是非常高昂的。但是由於cpu內部具有各級快取,暫存器等等,所以記憶體的速度與cpu相比較是極其慢的。為了解決這一問題,我們只好通過IO裝置將外部硬碟連線進來。

在記憶體中,一部分用來執行核心,而另外一部分是核心呼叫磁碟中儲存的應用發起程序而佔用的。不妨講講程序的執行過程,在應用發起程序後先被核心呼叫讀取至記憶體中,由於核心本身就是一個應用程式,所以在其他程序讀取至cpu之前,核心會先一步作為程序讀取至cpu,而後讀取需要執行某個程序的指令,此時,核心會從cpu退出到記憶體中,將此時需要執行的程序嘗試裝載至cpu。此時核心會與cpu保持連線,直至不需要執行這一程序,核心會把此程序從cpu中取出。以此內推,其餘程序執行原理也如上述一致。當然,這只是比較簡單的描述方式,真正的程序執行的機制遠比上述的要複雜。

   在計算機主機板上,能與外部儲存裝置連線的匯流排大概有以下幾種:
   介面型別              速率
   IDE                  133Mbps
   SATA                 300Mbps
   SATA2                600Mbps
   SATA3                6Gps
   USB2.0               40Mbps
   USB3.0               480Mbs      
         #          1M=8Mbps

還有一種比較特殊的裝置介面SCSI (Small computer System Interface),這種控制器內部裝載的有cpu,所以當機械上的cpu需要讀取磁碟中的檔案時,會發送指令到SCSI中的cpu,此時機械上的cpu可以忽略這個工作,由SCSI中的cpu來完成此項工作,讀取到目標檔案後將此檔案傳送至記憶體中。再由核心傳送至機械上的cpu,這種機制大大的加快了機械cpu的工作效率。
但無論何種方式,對於一個非常繁忙的伺服器來講,都無法滿足這種需求,此時,我們應該提供更大、更快的IO存取裝置,但一個裝置無論如何也突破不了物理速率上限,這時候,我們就需要將多個裝置組合起來並行使用,這樣一來,速率就會大大的提升。這種方式叫做裝置叢集

裝置叢集(RAID)

事實上並不是叢集,只是組合多個裝置來更快的完成同一個工作,簡單來講,這種方式就好像在主機板上又加了一個連線硬碟的控制器,只不過這個控制器並不是用來連線SCSI、SATA等介面的硬碟,而是通過這個控制器連線另外一個裝置,這個裝置可以將一個介面轉換為多個介面,這裡的多個介面可以接多個SATA裝置,SCSI裝置等,而在主機看來,主機板只是識別連線了一個外部裝置。這種控制器的與在裝置之間的通訊法則與其他控制器也不盡相同,這種控制器叫做RAID控制器。

事實上在RAID之前有一種更昂貴的控制器晶片(SLED)速度比較快,儲存能力也比較強,但是由於高昂的價格,一直處於一個尷尬的地位。1987年,美國加州大學伯克利分校一個教授研究出來一種更為廉價的磁碟存取陣列。用的是當時的IDE磁碟被稱為廉價冗餘磁碟陣列(RAID)。
現在RAID更多的被稱為獨立冗餘磁碟陣列,要想了解RAID機制,必須先要了解條帶化,我們先舉個例子,假如有120M的資料需要存取進磁碟中,資料在經過cpu處理過後,經過控制器分別分為4個30M的資料存進控制器連線的SATA裝置等,而每一個30M的資料連線在一起就好像形成了一個條帶,條帶化就是這樣形成的。
這樣一來,一塊磁碟所能完成的工作一下提高了四倍,而這樣將多個磁碟組合起來,組合成一個陣列,當作一個邏輯裝置來使用的機制,我們將這種機制稱為RAID。

RAID級別

常用的級別主要有以下幾種:

0:僅條帶化,效能提升讀寫能力提升,不提供冗餘能力(備份)利用率  (ns)
1: 映象模式,兩塊盤作為一塊盤使用,儲存相同的內容效能提升,(讀寫) 提供冗餘能力利用率ns/2
4:校檢碼模式
5:輪流作為校檢盤,效能提升(讀寫) 提供冗餘能力 利用率(n-1/n)ns
50:輪流作為校檢盤,且提供映象盤,

事實上,真正的RAID是整合在主機板上的一個控制器,有時候為了保證資料安全性,甚至在RAID加入小型cpu,電池等等,但這樣極大的增加了成本,所以可以使用軟體來模擬硬體的方式來實現軟RAID。

軟RAID的實現

  實現軟RAID要用到*mdadm*這個命令,具體使用如下:
  # mdadm [mode] <raiddevice> [options] <component-devices>

  其中常用的mode(模式化的命令):
  **建立模式:**
          —C:專用選項
                     -l:指定RAID級別
                     -n:指定裝置個數
                     -a:自動為其建立其裝置檔案
                     -c:指定chunk(資料塊)大小
                     -x:指定空閒盤個數

 **管理模式:**常用的有:
                     --add:往RAID陣列加入新的裝置
                     --remove:移除磁碟
                     --fail:模擬磁碟損壞
   監控模式:
   -F
   增長模式:
   —G
   裝配模式:
   —A
   檢視RAID陣列的詳細資訊
   mdadm -D /dev/md#
   停止RAID陣列
   mdadm -S /dev/md#              

一、

示例:用兩塊磁碟建立一個RAID0
①(準備工作):首先準備兩塊空閒的磁碟 使用#fdisk -l 檢視磁碟列表
這裡寫圖片描述
我們發現有一個 sdb5 和 sdb6 分割槽 但是檔案系統型別卻是linux LVM 我們需要將其更改為linux raid auto型別。
使用# fdisk /dev/sdb 使用t選項修改其檔案系統型別結果如下:
這裡寫圖片描述
此時/dev/sdb下面的sdb5和sdb6型別已經修改為linux raid auto檔案系統了
務必讓系統重讀一下檔案系統列表執行命令 # partprobe /dev/sdb
#cat /pro/partitions 檢視列表
這裡寫圖片描述
此時sdb5和sdb6已經被核心識別。

  ②:正式建立RAID 
  #mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{5,6}
  #在/dev下建立名為md0的RAID裝置,-l指定RAID級別為RAID0,-n指定由2個裝置(sdb5,sdb6)建立。執行如下:

這裡寫圖片描述
此時RAID0建立成功。

 ③:格式化RAID裝置(建立檔案系統),此處為ext2,使用#mke2fs

這裡寫圖片描述

  ④:掛載檔案系統(將其掛載到/mnt目錄下面),使用命令#mount  /dev/md0 /mnt

二、

檢視詳細的RAID裝置資訊:
#mdadm -D(–detail) /dev/# #表示裝置名稱
這裡寫圖片描述

附加:

模擬磁碟損壞:
#mdadm /dev/md# –fail /dev/# (#表示模擬損壞的是哪個磁碟)
移除損壞磁碟:
#mdadm /dev/md# –remove(-r) /dev/# (#表示移除的是哪個磁碟)
加入新盤
#mdadm /dev/md# –add(-a) /dev/# (#表示新加的是哪個磁碟)
如果建立的RAID模式為RAID1時,當某一個RAID陣列中的磁碟不能正常工作後,如果系統中有空閒的的磁碟塊的話,空閒的磁碟塊會自動的頂替已損壞的磁碟塊。
設定自動裝配:
# mdadm -D –scan > /etc/mdadm.conf
當我們使用#mdadm -S /dev/md# 時停用當前RAID陣列,儲存自動裝配的配置檔案後直接使用#mdadm -A /dev/md# 即可再次啟用該RAID陣列。