存儲多路徑問題
在我們的生產環境中,為了保證業務的高可用性,我們一般都會使用全冗余組網的連接方式。而我們的存儲服務器為了保證自身冗余,一般也有兩個控制器,比如A控和B控,兩個控制器做冗余。如下圖所示,當我們要把一個5G的LUN存儲資源給一個主機使用,如果采用全冗余組網的方式,那么就一共有4條鏈路,就是下圖中的藍色線條。這個時候因為有4條鏈路,所以我們的主機會看到4個5G的存儲資源,即可以看到4個磁盤(如下圖所示,圖中是拿2G做的例子))但是其實只有一個是可以使用的,這就是存儲多路徑問題。
那么怎么解決存儲多路徑問題呢?這就要用到多路徑軟件。不同的廠商有不同的多路徑軟件,一般都會直接提供給我們,比如華為的多路徑軟件就是UltraPath,通過多路徑軟件,可以將4條鏈路做一個邏輯上的聚合,最終只顯示一個磁盤,如下圖所示,這就很好的解決了多路徑問題。
RAID 技術
RAID:Redundant Arrays of Independent Disks。有"數塊獨立磁盤構成具有冗余能力的陣列”之意。獨立磁盤冗余陣列(RAID,redundant array of independent disks)是把相同的數據存儲在多個硬盤的不同的地方的方法。通過把數據放在多個硬盤上,輸入輸出操作能以平衡的方式交疊,改良性能。因為多個硬盤增加了平均故障間隔時間(MTBF),儲存冗余數據也增加了容錯。
RAID技術主要為了解決兩大問題:1、磁盤性能 2、數據冗余,安全性。
根據不同的功能和組合方式,可以將RAID分為不同的級別。主要有RAID0,1,3,5,6,10,50等,下面詳細的介紹一下他們的區別。
RAID0:為了提升磁盤性能。如下圖所示,假設有兩塊500G的盤做了RAID0,磁盤寫入數據的時候是在兩塊磁盤上依次寫入的,比如在盤1上寫了1,就會在盤2上寫2,這樣的話磁盤利用率是最高的,1T的容量都可以被完全使用。但是假如兩塊盤配置不一樣,可以做Raid0嗎?比如一塊盤的容量是320G,轉速是5400/分,另一塊盤的容量是500G,轉速是7200/分,這兩個磁盤可以做Raid 0嗎?答案是可以的。但是會默認使用低配置的盤來進行配置,高配置的500G 的盤只有320G可用,轉速也只有5400/分,這就會造成資源浪費。所以我們一般會使用同配置的磁盤做RAID0。另外一個問題是一塊盤可以做RAID 0 嗎? 答案也是可以的,但是磁盤的性能不會得到提升。
我們可以看到RADI 0的優點是磁盤利用率最高,性能最好,但是缺點是完全沒有數據冗余。
RAID 1:至少需要兩塊盤。數據寫入方式如下圖所示,兩塊盤完全做了冗余,互為鏡像,寫入的數據是一模一樣的。所以RAID 1的磁盤利用率只有50%,兩塊500G 的盤只能寫500G的數據。RAID1只能是偶數的磁盤才能做,比如2,4,6等,3個盤,5個盤是不能做RAID1 的。RAID1的缺點是利用率低,性能差,優點是有數據冗余,保證了安全性。這里有一個問題,如果第一快盤上的數據2被刪掉了,那么第二塊盤上的數據2還在嗎?答案是第二塊盤上的數據2也不在了。因為這兩塊盤是完全互為鏡像的,上邊的數據始終保持一致。
我們可以看到RAID0,1各有優缺點,那么能不能把他們的優點結合起來呢?於是RAID3就出現了。
RAID3:RAID3至少需要3塊盤。數據寫入方式如下圖所示。我們可以看到對於每一個條帶的數據,它都會算出來一個校驗位,這個校驗位是根據前兩快盤的數據算出來的,這個盤也叫做校驗盤。RAID3允許任一塊盤損壞,比如如果盤1壞了,根據盤2的數據和校驗位,我們可以把盤1的數據算出來進行恢復;如果是盤2壞了,同樣也是可以算出來的;如果是校驗盤壞了,因為校驗盤上本來就沒有數據,所以也不會丟數據。但是RAID3最多也只能損壞一塊盤。所以RAID3即保證了性能,也有數據冗余。 但是RAID3的瓶頸在於校驗盤,這塊校驗盤心想,只有你們兩個盤來寫數據,而我只用來做校驗,覺得不公平,而且當需要寫的數據很多時,校驗盤的性能有限,可能算校驗位的時間就比較慢,這就是RAID3的缺點。 於是為了解決這個問題,RAID 5就出現了
RAID 5
RAID5至少需要3快盤。RAID5數據寫入方式如下圖所示,每個盤上都有校驗位,相當於分布式校驗。所以RAID5相比於RAID3性能又有了提升。不管用多少快盤來做RAID5,RAID5也是最多只能損壞一快盤,損壞的再多的話就沒法根據其他盤來計算數據,就會發生數據丟失。那么RAID的磁盤利用率是多少呢?有一個公式可以來計算:(n-1)/ n
RAID 6
RAID6要求至少有4塊盤。數據寫入方式如下圖所示。每兩個盤拿來做一個校驗位。RAID6最多允許損壞兩塊盤。RAID6在平常使用的很少,很少見。
RAID 10
相當於把RAID1和0結合起來,先做RAID1,在做RAID 0。數據寫入方式如下圖,既保證了性能,又做了冗余。RAID10可以損壞兩塊盤,但是只能損壞兩側之中的各一個,不能同時損壞一個RAID1中的。
RAID50
類似於RAID10,先做RAID5,在做RAID0。
最后的題外話-----------------------------------------------------------------------------------------------------------------------
對於一個服務器來說,CPU不是最重要的,內存不是最重要的,磁盤才是最重要的。因為我們的數據都是存放在磁盤中的,而數據是最為重要的。那么CPU,內存,磁盤都是干什么的呢?CPU是我們電腦的運算核心,處理各種運算,所以CPU的速度是最快的,比磁盤快特別多。內存是非持久化存儲,他就是用來給CPU提供數據的,如果CPU要使用磁盤中的數據,因為磁盤太慢,內存會先將這些數據調用過來,CPU再從內存調用。所以像一些大的電腦游戲或者PS等大的軟件運行的時候,因為內存要跑他們的文件,所以如果電腦內存不夠的話電腦就會特別卡。磁盤是持久化存儲,是真正用來存數據的,他的速度也是最慢的。