RAID在企業服務器中的應用(RAID幾種級別)

企業級的數據庫應用大多部署在RAID磁盤陣列的服務器上,這樣能提高磁盤的訪問性能,並能夠實現容錯/容災。
RAID(冗餘磁盤陣列),簡單理解,就是拿一些廉價的硬盤來做成陣列。其目的無非是爲了擴展存儲容量,提升讀寫性能,實現數據冗餘(備份容災)。就像很早就有老外拿N臺舊PC,做成一個強大的“服務器集羣”。RAID技術誕生於1987年,由美國加州大學伯克利分校提出。
主流的大概可以分爲幾個級別:RAID 0,RAID 1,RAID 5,RAID 10 。配置起來也不是很複雜,有興趣的朋友可以找相關的資料,自己動手實踐。


SQL Server 2005常用的有幾個級別0,1,5,10 下面我來簡單說說這個幾個級別的區別及其應用。 


RAID 0 簡稱磁盤條帶化,它可以提供最好的讀寫性能,如果你把兩塊磁盤做成了RAID0,那麼在寫入數據的時候,就可以同時對A磁盤和B磁盤執行寫入操作。這裏我必須說明的是:“可以同時...寫入操作”,並不是意味着將文件的相同內容“在同一時間內完全寫入”A磁盤和B磁盤中打個比方:有一個100M的文件需要寫入磁盤中,假設單個磁盤的寫入速度是10M/S,那麼需要10秒鐘才能完成寫入工作。但如果在具有A、B兩塊磁盤的RAID 0陣列環境中,(以秒/S爲最小單位的)單時間內,可以將10M內容寫入A磁盤中,並同時將緊隨的10M內容寫入B磁盤中,這樣算起來,寫入速度變成了20M/S,只需要5秒鐘就能搞定了,而且每塊磁盤中只需存儲50M的文件內容,不會造成硬盤存儲壓力。當然,上訴例子也許不恰當,也只是指的理論環境下,實際環境中會有很多其他因素,效率肯定不能達到。
毋庸置疑的是,這樣肯定是能提高讀寫性能的,但是這樣也帶來了一個問題就是,如果其中的一部分數據丟失了,你的全部數據都不會找回來的,因爲RAID0沒有提供冗餘恢復數據的策略。所以RAID0可以用在只讀的數據庫數據表,或者是經過複製過來的數據庫上,如果你對數據丟失不敏感的話,也可以使用RAID 0,總之這個level下是高性能、無冗餘。 

RAID 1 磁盤鏡像 它對讀沒有什麼影響,如果有兩塊磁盤它只對寫有影響,因爲它採用了一塊磁盤做冗餘備份的方法,這樣如果你有兩塊50G的磁盤,那麼加起來就是100G,但是在RAID 1下,那麼你只能使用50G ,這種方法會影響磁盤的空間使用,降低了I/O 寫的性能。通俗點來講:你將一個100M的文件寫入RAID 1時,講內容寫入A磁盤的同時,也會將相同的內容寫入B磁盤中。這樣一來,兩塊磁盤的內容是完全一致的(這就傳說中的”冗餘“,並不是什麼高深的東西)。本來只需要寫入1塊硬盤的,可是現在要寫入到兩塊硬盤去,效率肯定會變低。至於“讀”操作,RAID 1環境下,讀取時候只使用到了一塊硬盤,所以和普通的環境下沒啥區別(如果兩塊硬盤都能夠同時工作,那麼還可以分攤壓力的)。只是當第一個硬盤數據損壞或者掛掉了,就啓動第二塊硬盤。當然,兩塊硬盤都掛了,那就真的崩潰了。哈哈。值得一提的是,有些書或者文章上講,RAID 1是在將第一塊硬盤寫入完成後,纔將數據完整複製到第二塊磁盤中做爲鏡像備份的這種說法有待考證,按我的理解,是同時複製寫入的。


RAID 5 與RAID1 不同之處就是多了奇偶校驗,所有的奇偶校驗的信息會遍佈各個磁盤,性能上要比RAID1高些,但是一旦發生磁盤I/O失敗,就會造成性能急劇下降,同時這種方法也在RAID0 與RAID1間折了中,是比較通用的做法。 用簡單的語言來表示,至少使用3塊硬盤(也可以更多)組建RAID5陣列,當有數據寫入硬盤的時候,按照1塊硬盤的方式就是直接寫入這塊硬盤的,如果是RAID5的話這次數據寫入會分根據算法分成3部分,然後寫入這3塊硬盤,寫入的同時還會在這3塊硬盤上寫入校驗信息,當讀取寫入的數據的時候會分別從3塊硬盤上讀取數據內容,再通過檢驗信息進行校驗。當其中有1塊硬盤出現損壞的時候,就從另外2塊硬盤上存儲的數據可以計算出第3塊硬盤的數據內容。也就是說RAID5這種存儲方式只允許有一塊硬盤出現故障,出現故障時需要儘快更換。當更換故障硬盤後,在故障期間寫入的數據會進行重新校驗。 如果在未解決故障又壞1塊,那就是災難性的了。

RAID 10  (也叫RAID 0+1 )就是RAID0 與 RAID1的組合,它提供了高性能,高可用,性能上要比RAID5好,特別適合大量寫入的應用程序,但是就是成本比較高無論是多少塊磁盤你都是將損失一半的磁盤存儲。按照我的理解,至少需要4塊硬盤才能完成,A和B做數據分割,分別存儲一半的數據,C和D分別對應做A和B的鏡像備份。這樣一來,可真是完美了,也是我理想中的最佳狀態。也不需要RAID 5的奇偶校驗。很顯然,這樣子成本也會高一些。

當然,這就和我們講架構時候經常說的“負載均衡、高可用集羣,橫向擴展,縱向擴展”的目的其實很類似。通俗點來講,都是爲了實現不間斷的工作,保證數據完整性和高可用性,而且最重要的,還要能分攤壓力。突然讓我想起了上初中物理時候學的“串聯和並聯”,有點像哦。順便講個丟人的笑話,也是我的真實經歷,N年前,某日和某大師在一起抽菸、吹牛、瞎侃,大師瞎侃說”google光是在中國目前有XX臺服務器集羣......“,當時我並不理解什麼叫“集羣”,第一反應就是這麼多臺服務器之間到底是“串聯“的還是”並聯”的關係呢?


  說到最後,可能某些朋友已經不耐煩了。好像本文只是在不停的解釋常見RAID的和其好處,而並沒提及到sqlserver或者windows存儲相關的內容。大家都知道,I/O往往是數據庫性能最大的瓶頸, 有時候其實很簡單,只需要將sqlserver所在的db server上部署合適的RAID,並將數據庫文件分佈到不同的磁盤上,就能很大程度的提升數據庫的性能,真可謂是立竿見影。有興趣的朋友,不妨自己實際動手實踐一下,網上這方面的資料也很多。其實RAID成本並不高(和DELL、EMC等等那些高端的存儲比起來真是“廉價”)。

甚至自己在家裏PC機上,也可以通過陣列卡的方式來實現(效果可能不太好)。目前一般的PC服務器,內置都會有RAID支持,在PC服務器領域使用非常廣泛。


本文出自http://blog.csdn.net/dinglang_2009


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章