磁盘子系统
?
?????? 對于應用服務器,磁盤子系統可以被看成是一個硬盤服務器。應用服務器使用諸如?SCSI這樣的標準I/O技術連接到磁盤子系統的端口,從而可以使用磁盤子系統提供的存儲能力。磁盤子系統的內部結構對應用服務器完全隱蔽,應用服務器僅看到磁盤子系統向它提供的硬盤。
?????? 磁盤子系統的端口通過內部?I/O?通道延伸到它的硬盤。在大多數磁盤子系統中,在連接端口和硬盤之間有一個控制器。通過執行一種稱作RAID?的過程,控制器可以顯著地增加數據的可用性和數據訪問的性能。而且,有些控制器實現了即時復制、遠程鏡像以及其他的服務。此外,控制器還使用緩沖區來加速應用服務器的讀寫訪問。
?????? 小的磁盤子系統僅為應用服務器或存儲網絡提供一兩條連接,配置?6~8?個硬盤。大的磁盤子系統為應用服務器或存儲網絡提供數十個連接端口,并配置冗余控制器和多個內部?I/O?通道。通過存儲網絡的連接意味著大量的應用服務器可以訪問磁盤子系統。大的磁盤子系統可以存儲數十太字節的數據,重達幾噸。典型的大磁盤子系統的體積可以有衣柜那么大。
?????? 無論是否使用存儲網絡,磁盤子系統都可以把空閑磁盤空間靈活地分配給連接到它的每一個服務器。另外,被分配給多個應用服務器的空閑的磁盤空間可以是已經安裝但尚未使用的磁盤,也可以是準備在空閑插槽上安裝的新磁盤。
?
?
一. 磁盤和內部I/O 通道
?????? ?磁盤子系統的控制器最終必須把所有的數據都存儲在物理硬盤上。流行的用于這一目的的標準硬盤的容量為?l8GB-250GB。由于可以使用的硬盤的最大數目是有限的,硬盤的這個容量范圍也標示著整個磁盤子系統的最大容量。
?????? 當選擇內部物理硬盤的大小時,需要權衡考慮最佳性能需求和整個系統的最大容量。對于性能,通常使用比較小的硬盤是有益的,但這會減少系統的最大容量。給定一個容量值,如果使用較多的硬盤,數據可同時分布在多個硬盤上,從而把整個負荷分布到更多個機械臂和更多個讀/寫磁頭,并且通常是在更多的?I/O通道上?。
?????? 對于大多數應用,使用中等大小的硬盤就足夠了,僅對于那些特別有高性能需求的應用應該考慮比較小的硬盤。然而,還應該考慮這樣的事實,即比較現代的大硬盤一般都具有比較短的尋道時間和比較大的緩沖區。因此,對于每個具體的用例,需要仔細考慮什么樣的硬盤可提供最高的性能。
?
?????? 為了增加磁盤子系統的容錯功能,可以把?I/O通道設計成具有內建的冗余。下面列出的是幾種常見的I/O通道的配置。
1.?單通道
?????? 在單通道配置中,物理硬盤僅通過?1?個I/O通道連接,如果這個訪問通道失效了,那么就再也不能夠訪問數據。
2.?備用通道
?????? 在備用通道配置中,物理硬盤通過?2個I/O通道連接?。在正常情況下,控制器通過第一個I/O通道跟硬盤通信,不使用第二個I/O通道。在第一個I/O通道失效的情況下,磁盤子系統從第一個通道切換到第二個通道。?
3.?無負載平衡的雙通道配置
?????? 在這種配置方式中,控制器在正常情況下使用?2個I/O通道。硬盤被劃分成兩個組;在正常操作中,第一組通過第一個?I/O?通道訪問,第二組通過第二個I/O通道訪問。如果有一個I/O通道失效了,那么兩個組都通過另一個I/O通道訪問。
4.?有負載平衡的雙通道配置
?????? 在這種配置方式中,所有的硬盤在正常操作中都通過兩個?I/O?通道訪問。控制器把負載動態地在這兩個?I/O通道之間劃分,使得可提供的硬件能夠被最佳地使用。如果有一個I/O通道失效了,那么通信僅通過另一個I/O通道進行。
?
?
二. ?JBOD 磁盤整列
從控制器的角度來比較磁盤子系統,我們可以區分以下三個類型:
(1)無控制器
(2)RAID 控制器
(3)具有諸如即時復制和遠程鏡像這類附加功能的智能控制器。
?
?????? 如果磁盤子系統沒有內部控制器,那么它只是把多個磁盤裝在一起的機箱,即簡單磁盤捆綁(JBOD:just a Bound Disks),官方術語稱作“Spanning”。在這種情況下,磁盤被永久地裝配進機箱,對I/O 通道和電源的連接都是在機箱的單個點向外引出。
?????? JBOD磁盤陣列是在邏輯上把幾個物理磁盤一個接一個串聯到一起,從而提供一個大的邏輯磁盤。JBOD上的數據簡單地從第一個磁盤開始存儲,當第一個磁盤的存儲空間用完后,再依次從后面的磁盤開始存儲數據。JBOD存取性能完全等同于對單一磁盤的存取操作。JBOD也不提供數據安全保障。它只是簡單地提供一種利用磁盤空間的方法,JBOD的存儲容量等于組成JBOD的所有磁盤的容量的總和。
?????? JBOD 磁盤陣列不支持RAID 或其他形式的虛擬化。 如果需要,這些功能可以在JBOD磁盤陣列的外部實現,如利用服務器上的軟件或者存儲網絡中獨立的虛擬化實體來實現。
?
三. 使用RAID 的存儲虛擬化
?????? 具有RAID控制器的磁盤子系統提供比JBOD磁盤陣列更大的功能范圍。RAID起初是在磁盤還非常昂貴并且欠可靠的年代產生的,那時候RAID代表“Redundant?Artayof?Inexpensive?Disks?(廉價磁盤冗余陣列)”。現在?RAID?表示“Redundant?Artay?ofIndependent?Disks?(獨立磁盤冗余陣列)”,支持RAID的磁盤子系統也被稱著RAID磁盤陣列。
?????? RAID有兩個主要目標,即通過條帶化提高性能和通過冗余增加容錯能力。條帶化把數據分布到多個磁盤上,從而把負載分配到更多的硬件上。冗余意味著存儲附加信息使得在有一個硬盤失效的情況下,使用存儲數據的應用程序還可以繼續運行。對于單個硬盤,除了可以改善其容錯功能,但不能夠提高其操作性能。單個物理硬盤比較慢,并且生命期有限,然而,把多個物理硬盤適當地結合在一起,有可能顯著地增強容錯能力以及系統的整體性能。
?????? 由RAID控制器把多個物理硬盤組合在一起的集成設備服務器也稱作虛擬磁盤。連接到RAID?統的計算機僅能看到這個虛擬磁盤,RAID控制器把數據分布到多個物理硬盤上的事實對服務器是完全遮蔽的。在集成設備的外部,這個事實僅對管理員可見。
?
3.1? RAID等級特征
?????? RAID?控制器可以把服務器往虛擬磁盤寫的數據以不同的方式在多個物理硬盤之間分配,這些不同的過程被稱作RAID等級。
?????? 絕大多數的?RAID?等級共有的特征是它們都存儲冗余信息。如果有一個物理硬盤失效了,它的數據仍然可以從保持完好的那些硬盤重構。如果一個磁盤子系統有適當的硬件,那么在運行期間甚至可以把失效的硬盤用一個新硬盤替換。然后,RAID控制器重構被更換硬盤的數據。對于服務器,除了可能的性能減退外,這個過程依然是遮蔽的,服務器可以不間斷地對虛擬磁盤繼續執行讀/寫操作。
?
3.2? 虛擬RAID磁盤的優點
?????? 現代?RAID?控制器可以自動地啟動這個過程,但需要定義所謂的熱備份磁盤。在正常的操作中不使用熱備份磁盤。如果有一個硬盤失效了,RAID控制器立即開始把仍然保持完好的硬盤上的數據往熱備份硬盤上復制。在更換失效的硬盤之后,這些數據被存放在熱備份磁盤池中。現代?RAID?控制器可以為多個虛擬?RAID?磁盤管理共同使用的熱備份磁盤池。所有提供冗余功能的?RAID?等級都可以使用熱備份磁盤。
?????? 失效硬盤數據的重建與服務器對虛擬磁盤執行的讀寫操作同時發生,因此服務器方會觀察到性能的減退。現代硬盤都帶有自我診斷程序,它會向系統管理員用這樣一類的提示報告讀寫錯誤的增加:“請注意,我的生命期就要結束。請用一個新的磁盤替換我。”通常硬盤本身在存儲數據時都帶有諸如海明編碼這樣的冗余編碼。海明編碼允許即使在硬盤上有些位改變了,也能夠正確地重建數據。因此,在系統從其他仍然完好的硬盤重建數據的那段時間內,即將被更換的磁盤還可以繼續向服務器提供數據。
?????? 把多個物理硬盤組合在一起形成虛擬磁盤的另一個好處是虛擬磁盤具有比較大的容量。結果在?I/O通道中可以使用較少的設備地址,同時也簡化了對服務器的管理工作,因為可以使用較少的驅動器字母或卷標號。
?
?
四. RAID 等級及配置示例
4.1 ?RAID 0: 按塊條帶
?????? RAID?0,也稱條帶,把服務器往虛擬磁盤上寫的數據按照塊的順序分布到多個物理硬盤上,即在把一塊數據寫入一個物理磁盤后,緊接著把下一塊數據寫到另一個物理硬盤上。一個具有4個物理硬盤的RAID陣列,服務器把數據塊?A、B、C、D、E等一塊接著一塊地寫往虛擬磁盤。RAID控制器把該塊序列分發到具體的物理硬盤。它把第一塊即?A寫到第一個物理硬盤,第二塊即?B?寫到第二個物理硬盤,塊C寫到第三個硬盤,塊?D?寫到第四個硬盤。然后它再一次把數據往第一個硬盤寫,塊E?到第一個硬盤,塊F到第二個硬盤,等等。
?????? 每個磁盤都通過I/O通道跟RAID控制器交換數據,這個過程要比從旋轉的硬盤上讀數據或向旋轉的硬盤寫數據快得多。RAID控制器把第一塊數據?A發送到第一個硬盤。把這一塊數據寫到硬盤上需要花相當長的時間。當第一個硬盤對第一塊數據A執行寫操作的時候,RAID控制器就已經把第二塊數據?B發送給第二個硬盤,把第三塊數據?C發送給第三個硬盤。此時,第一個和第二個硬盤還在分別執行對塊?A和塊B?的寫操作。按照這樣的操作方式繼續執行下去,當?RAID控制器把塊?E發送給第一個硬盤時,第一個硬盤至少已把部分塊?A的數據寫到了它的物理盤上。
?????? 雖然?RAID?把服務器的寫操作分配到多個物理硬盤上,但服務器僅僅看到虛擬磁盤。并行的寫操作意味著虛擬磁盤的性能要高于物理磁盤。
?????? 吞吐率可以提高到普通磁盤的?4?倍。假定單個硬盤的最大吞吐率是?50MBps,那么?4個物理硬盤可以取得大約200MBps?的吞吐率。諸如?SCSI或光纖通道這樣的I/0技術可以達到的吞吐率是?l60MBps或200MBps。如果RAID?陣列僅由?3?個物理硬盤構成,那么總的硬盤吞吐率會成為限制因素。在另一方面,如果RAID?陣列由?5?個物理硬盤構成,那么?I/0通路會成為限制因素。因此,當配置?5?個或更多個硬盤時,僅當把硬盤連接到不同的?I/O通路時,才有可能進一步提高性能,即不僅要把負載分配到多個物理硬盤上,而且要分配到多個I/O通路。
?????? RAID?0可以提高虛擬磁盤的性能,但并不增加容錯能力。如果有一個物理硬盤失效了,那么存放在虛擬磁盤上的所有數據都不可用。準確地講,對于?RAID?0,RAID中的R其實并不意味著“Redundant?(冗余)”,而是代之以“0?Redundancy?(零冗余)”。
?
4.2 ?RAID 1: 按塊鏡像
?????? RAID 1的基本形式是把兩個物理硬盤組合在一起,通過鏡像在這兩塊物理硬盤上的數據形成一個虛擬磁盤。 如果服務器把一個數據塊寫往虛擬磁盤,RAID 控制器就把這兩個數據塊同時寫到兩個物理硬盤上。 其復制也稱鏡像。
?????? RAID 控制器把服務器的每個寫操作都在兩個物理硬盤上重復執行,如果有一個物理磁盤失效,那么數據還可以從另一個硬盤上讀出來。
?????? 使用純RAID 1,僅對讀操作性能提高。 當服務器從虛擬磁盤讀數據時,RAID 控制器可以把負載分配到兩個物理硬盤上。 例如:服務器讀取A,B,C,D 四塊數據,RAID 控制器可以從第一個硬盤讀A,B塊,同時從第二個硬盤讀C,D塊,從而執行并行操作。 對于寫操作,則可能喲亍的性能減退,因為RAID 控制器必須把同樣的數據塊發送到兩個物理硬盤,增加了控制器的發送時間,也增加了I/O 通道的負荷。
?
4.3 ?RAID 0+1 和 RAID 10: 結合條帶域鏡像
?????? ?RAID?0和RAID?1的問題是它們僅提高了性能或僅增加了容錯。然而,如果能既提高性能又支持容錯,那將會是比較理想的效果。這正是RAID?0+1和RAID?10起作用的地方,這兩個RAID等級結合采用了?RAID?0和RAIDI?的思想。
?????? RAID?0+1和RAID1O都表示兩個步驟的虛擬化結構。如一個有8塊物理硬盤的RAID?0+1的配置, RAID控制器開始在第一個步驟中使用?RAID0?(條帶)分別把每4個物理硬盤結合,形成僅在RAID控制器內可見的兩個虛擬磁盤。在第二個步驟中,又使用?RAIDI?(鏡像)進一步地把這兩個虛擬磁盤結合成單個虛擬磁盤,服務器只能夠看到這個虛擬磁盤。
?????? 和RAID?0+1(先條帶后鏡像)不同,RAID1O先執行RAID?1(鏡像)后執行?RAID0?(條帶)。在RAIDIO中,RAID?控制器開始在第一個步驟中使用?RAID?1?成對地結合物理硬盤,形成僅在RAID控制器內可見的4個虛擬硬盤。在第二個步驟中,RAID控制器使用RAID?0把這?4?個虛擬磁盤進一步結合成一個虛擬磁盤。在這里,僅僅最后一個虛擬磁盤對服務器是可見的。
?????? 不論是在RAID?0+1中,還是在RAID?10?中,服務器僅看到單個虛擬磁盤,它比單個物理硬盤既大又快,又更加容錯。他們兩者的區別如下:
?
?????? 使用?RAID?0,單個物理硬盤的失效也會導致整個虛擬磁盤的失效。在上面的RAID?0+1?的示例中,一個物理硬盤的失效等效于4個物理硬盤的失效。如果其他4個硬盤中也有一個失效了,那么數據將會丟失。
?????? 在另一方面,RAID?10?在有一個物理硬盤失效的情況下,除了對應的鏡像硬盤之外,再有一個物理硬盤失效也是可以承受的。因此,RAID1O有比?RAID0+1?顯著高的容錯能力。此外,RAID?10?在有?1?個硬盤失效之后恢復系統的代價也比RAID?0+1低得多。在RAID1O?中,僅?1個物理硬盤必須重建;而在RAID?0+1中,一個由?4?個硬盤構成的虛擬磁盤必須重建。不過,重建失效硬盤的代價可以降低,因為當讀錯的數目開始增大時,作為預防措施就可以更換一個硬盤。在這種情況下,把數據從舊盤復制到新盤就可以了。
?????? 由于采用?RAID?0+1,1?個物理硬盤的失效會引起對應的內部?RAID?0虛擬磁盤失效?(通過條塊操作結合在一起的?4個硬盤),在效果上使得一半的物理硬盤失效。因此,從失效硬盤恢復數據的代價是很大的。由于采用?RAID1O,1?個物理硬盤失效的后果不像RAID?0+1那么嚴重,所有的虛擬硬盤都是完整的,從失效硬盤恢復數據也比較簡單。所以RAID 10用的更多點。
??????
4.4 ?RAID 4 和RAID 5: 用效驗位代替鏡像
?????? RAID1O在高度容錯的基礎上提供了好的性能。但帶來的問題是使用RAID1O執行鏡像意味著所有的數據都要往物理硬盤寫兩次。因此,RAID1O需要雙倍的存儲容量。
?????? RAID?4和RAID?5?的思想是用單個奇偶校驗硬盤代替RAIDIO所有的鏡像盤。基于5個物理硬盤的RAID?4的配置,服務器把數據塊?A、B、C、D等依次寫往虛擬磁盤。RAID控制器把數據塊條帶分布到開頭的?4個物理硬盤上。取代鏡像數據到另外個硬盤?(RAID?10),在RAID?4?中,控制器為每4個數據塊計算?1個奇偶校驗塊,并把它寫到第五個物理硬盤上。例如,RAID?控制器為塊?A、B、C、D?計算奇偶校驗塊PABCD。如果四個數據盤中有?1?個失效了,那么?RAID控制器可以使用其余?3個盤和奇偶校驗盤重建失效盤的數據。與RAID?0+1?和RAIDIO相比,RAID?4節省了3個物理硬盤。采用?RAID?4,服務器也只會看到虛擬磁盤,就像是單個磁盤。?
?????? RAID?4采用?RAID?0?(條帶)把數據塊分布到4個物理硬盤上。接著,它不是鏡像所有的數據,而是僅為每4個數據塊計算和存儲?1個奇偶校驗塊。
?????? 從數學的觀點上看,奇偶校驗塊是借助邏輯?XOR?(異或)操作計算的。PABCD?=A?+?B?+C?+?D。這里的符號+表示?XOR?(異或)運算符。
?
?????? RAID?4和RAID?5節省了存儲空間,但是要付出一定代價,即改變一個數據塊就會改變相關的校驗塊的值。這意味著對虛擬磁盤的每個寫操作都要執行下列步驟:
????(1)物理地寫奇偶校驗塊;
????(2)重新計算奇偶校驗塊;
????(3)物理地寫新計算的奇偶校驗塊。
?
?????? 由于異或運算的數學性質,重新計算檢驗和的代價是比較低的。如果塊?A1?被塊A2?覆蓋,△是舊的和新的數據塊之間的差,那么△=A1+A2。新的校驗塊?P2?可以簡單地從舊的校驗塊P1?和△計算,即P2?=?P1?+△。因此,如果PABCD是數據塊?A、B、C、D?的校驗塊,那么在數據塊?A?被改變之后,新的校驗塊可以在不必知道其他數據塊即?B、C、D?的條件下進行計算。然而,在覆蓋物理硬盤之前,必須把舊的塊A1?讀入控制器,以便能夠計算差值△=A1+A2。
?????? 在處理RAID?4和RAID?5?的寫命令時,RAID?控制器使用上述異或運算的數學性質重新計算校驗塊。?
?????? RAID?控制器把舊的數據塊?D1?和相關校驗塊?P1?從硬盤讀進緩沖區,然后它使用異或運算計算舊的校驗塊和新的校驗塊之間的差值,即△=D1?+D2,并由此計算新的校驗塊P2=P1+△。因此,重新計算校驗塊時不必讀所有的?4個數據塊。為了完成對虛擬磁盤的寫操作,RAID?控制器接著把新的數據塊?D2?和重新計算的校驗塊P2?寫到對應的物理磁盤上。
?????? 4個步驟:1.服務器改寫一個數據塊;2.RAID控制器讀入舊的數據塊和舊的校驗塊;3.計算新的校驗塊;4.把新的數據塊和新的校驗塊寫到物理硬盤上。
?????? RAID?4把所有的校驗塊都放到單個物理硬盤上。對數據塊的寫操作被分布到?4個物理硬盤上,然而校驗盤本身必須處理同樣數目的寫操作。因此,如果有大量的寫操作,那么校驗盤就成了?RAID?4的性能瓶頸。
?
?????? 為了避免性能瓶頸,RAID5不是把所有的校驗塊都集中保存在一個專門的校驗盤中,而是分散到所有的硬盤中。RAID?5使用了一種算法,可以計算出對應任何一個條帶的校驗塊的存放位置?(物理盤號),從而實現在所有磁盤上交替地存放校驗信息。
?????? 對于塊A、B、C、D,RAID控制器和RAID?4一樣地把校驗塊PABCD寫到第五個硬盤上;然而對于下4塊E、F、G、H,RAID控制器把校驗塊?PEFGH?寫到第四個物理硬盤上;對于再下4塊?I、J、K、L,控制器把校驗塊PIJKL寫到第三個物理硬盤上······?
?????? RAID?4和RAID?5都把數據塊分布到許多物理硬盤上。使用校驗塊意味著在一個失效硬盤上的數據可以借助其他的硬盤恢復。與RAIDIO不同的是,在RAID?4和?RAID?5中,兩個物理硬盤的同時失效總會導致數據丟失。
?????? 和RAID 1?和RAID 1O相比,在RAID?4和RAID?5?中一個失效物理硬盤的恢復代價要更大一些。在RAID?1?和RAID?10?中,只需要把失效盤的鏡像復制到替換硬盤即可。而在RAID?4和RAID?5?中,RAID控制器必須從所有的硬盤讀取數據,用這些數據來重新計算丟失的數據塊和校驗塊,然后再把這些塊寫到更換盤上。
?????? 如果RAID?4和RAID5的第五個物理硬盤?(其上僅有校驗塊)需要更換,并且必須恢復校驗塊?PABCD,?那么?RAID控制器必須先從?4個物理硬盤讀塊A、B、C、D,重新計算校驗塊?PABCD,?然后寫到交換物理硬盤上。如果一個數據盤需要更換,某個數據塊必須恢復,那么處理方法也類似。
?
?
4.5 ?RAID 2 和 RAID 3
?????? RAID 2 和 RAID 3 這兩種類型用的很少。
??????
?????? RAID 2 主要是在磁盤陣列早期的時代。 那時位錯可能導致把寫的1 讀成0,或者把寫0讀成1. 在RAID 2中使用海明編碼糾正位錯,除了實際的數據,還存儲冗余信息,這個附加信息允許糾錯。
?????? RAID 3 和RAID 4,RAID 5一樣,存儲效驗數據,可以存放在一個單獨的硬盤上,也可以分布在所有硬盤上。 不同的是,RAID 3把一個塊的數據和相關的效驗信息分布在所有的硬盤上。 因此,對于每一次塊的訪問,所有的磁盤都參與讀或寫。 在本質上,RAID 3也是一種條帶機制,只不過每一次操作,每一個硬盤不是讀或寫整個塊,而是讀或寫一個塊的若干字節。 RAID 3不存在RAID 4和5中寫性能差的問題,而且RAID 3中,物理磁盤的旋轉是同步的,使得一個塊的數據真正可以同步寫。 典型的塊尺寸是1024 字節。
??????
以前整理的一篇有關RAID文章,不過沒有這篇通俗易懂。 供參考:
?????? RAID 磁盤陣列 詳解
?????? http://blog.csdn.net/tianlesoftware/archive/2010/03/29/5429634.aspx
?
4.6 ?RAID 等級的比較
?????? 下表列出了各種流行的RAID等級,給出了在容錯、寫性能、讀性能和空間要求方面的比較。需要注意的是,這種比較只是基于理論的。在實踐中,磁盤子系統的制造商在下面列出的若干方面還有自己的選擇:???
???(1)內部物理磁盤的選擇;
???(2)在磁盤子系統內部通信使用的I/0技術;
???(3)對多個I/0通道的使用;
???(4)RAID控制器的實現;
???(5)緩沖區的大小;
???(6)緩沖算法本身。
?
流行的?RAID等級在理論上的比較
| ??RAID等級 | ?容錯 | ?讀性能 | ?寫性能 | ?空間需求 |
| ??RAID0 | ?無 | ?好 | ?很好 | ?最小 |
| ??RAID?1 | ?高 | ?差 | ?差 | ?高 |
| ??RAID?10 | ?很高 | ?很好 | ?好 | ?高 |
| ??RAID?4 | ?高 | ?好 | ?非常差 | ?低 |
| ??RAID?5 | ?高 | ?好 | ?很差 | ?低 |
?
?????? RAID?0適用于與磁盤失效保護相比,寫性能是最重要的情況下的應用。這些應用的例子有影片和視頻產品的多媒體數據存儲,以及那些如果不能記錄所有的測量值,整個測量序列就會變得沒有價值的物理實驗的記錄。在后一種情況下,比較好的做法是先把所有的測量數據記錄在一個RAID?0陣列上,在實驗之后再把它復制到,比如說,一個RAID?5?陣列上。在數據庫中,RAID?0被用來暫存作為復雜請求的中間結果的片段的快速存儲。
?????? 關于?RAID?1,由于僅使用兩個物理硬盤,其性能和容量會受限。因此,RAID?1適用于小的數據庫。對于這類應用,虛擬?RAID?5?或?RAID?10?的配置顯得太大了。RAID 1的另一個領域是和RAID?0結合使用。
?????? ?RAID?10?用于需要高的寫性能和高的容錯能力的場合。在過去的一個很長的時間內,人們都把數據庫記錄文件存儲在RAID 1O上。數據庫把所有的改變都記錄在記錄文件中,使得應用有一個高的寫性能。在系統崩潰后,僅當所有的記錄文件被完全提供時,才能保證數據庫的重啟,因此該應用對容錯能力也有很高的要求。
?????? RAID?4和?RAID?5?以比較差的寫性能為代價節省磁盤空間。在很長時間內,作為一個常規,在讀操作對寫操作的比例為?7:3時使用RAID?5。需要指出的是,當前在市場上提供的許多存儲系統都具有優秀的寫性能,它們在內部其實是使用?RAID?4?或RAID?5存儲數據。
?
?
五. 使用緩存加速對磁盤的訪問
?????? 所有的計算機系統都使用緩存來加速操作過程。特別地,在磁盤子系統中,緩存被用來加速對物理硬盤的讀寫訪問。在這里,我們將討論兩種類型的緩存:??
?
1.在硬盤上的緩存
?????? 每個硬盤都有一個很小的緩存。這是必要的,因為?I/0?通道到磁盤控制器的傳輸速度要比磁盤控制器從物理硬盤讀或向物理硬盤寫的速率更高。如果服務器或?RAID控制器把一塊數據往物理硬盤上寫,那么磁盤控制器就把它存儲在其緩存中。這樣,磁盤控制器就可以在由它自已安排的時間內,把該數據塊寫入物理硬盤;同時,I/0通道可以被用來傳輸其他硬盤的數據。許多?RAID?等級都使用這種方法來提高虛擬磁盤的性能。
?????? 讀訪問的加速也采用類似的方式。如果一個服務器或一個中間的?RAID?控制器要讀一個數據塊,那么它就把被請求的塊的地址發送到硬盤控制器。當硬盤控制器以比較慢的速率把這個完整的塊從物理硬盤向它的緩存復制時,可以把?I/0?通道用于其他的數據傳輸。磁盤控制器以?I/0?通道的比較高的數據速率把數據塊從它的緩存傳送到服務器。
?
2. 在RAID控制器中的緩存
在RAID控制器中的緩存又可以劃分成寫緩存和讀緩存兩類。
?
?(1)在RAID控制器中的寫緩存
?????? 除了硬盤驅動器有緩存外,許多磁盤子系統也有它們的緩存。在一些磁盤子系統中,這個緩存在大小上可達數千兆字節。結果與硬盤的緩存相比,磁盤子系統能夠緩存多得多的數據。寫緩存應該有一個備用電池,并且在理想的情況下是鏡像的。為了使得在寫緩存中的數據即使在發生停電的情況下也不會丟失,電池備份是必要的。寫緩存可以顯著地減少RAID?4和RAID?5?的寫性能缺陷,特別是對于順序的寫訪問,并且可以平滑負載峰值。
?????? 許多應用都不是以連續的速率寫數據,而是采用批處理的方式。如果一個服務器把多個數據塊發送到磁盤子系統,那么起初控制器會把所有的數據塊都放進寫緩存,并且立即,向服務器報告所有的數據都已安全地寫到驅動器上。然后,磁盤子系統再把數據從寫緩存復制到比較慢的物理硬盤上,給下一個寫高峰騰出緩存空間。
?
(2)在RAID控制器中的讀緩存
?????? 與加快寫操作的情況相比,使用緩存加速讀操作要困難得多。為了加快服務器的讀訪問,磁盤子系統控制器必須在服務器請求數據之前把相當數目的數據塊從較慢的物理硬盤復制到較快的緩存。
?????? 這樣做的問題在于,磁盤子系統控制器事先很難知道服務器下一次會請求什么樣的數據。在磁盤子系統中的控制器既不知道存儲在數據塊中的信息的結構,也不知道具體的應用所遵循的訪問模式。因此,控制器只能夠分析過去的數據訪問,并由此來推斷服務器下次將訪問哪些數據塊。在順序讀的過程中,這種預測比較簡單,但在隨機訪問的情況下,預測幾乎是不可能的。作為常規,好的?RAID?控制器能夠做到在混合的讀模式中,從讀緩存提供大約40%的請求數據塊。
?????? 因為不知道應用使用數據的模式,磁盤子系統不能夠進一步提高由緩存提供的讀訪問的比率?(也稱命中率)。因此人們通常還在應用內部進一步配置緩存。例如,應用程序打開一個文件以后,文件系統就把該文件所有的塊都裝入內存。然而花這樣的代價是否值得還需要考慮,因為有時候應用程序可能不再請求訪問更多的數據塊。
?
?
六. 智能磁盤子系統
6.1 即時復制
?????? 即時復制可以做到在幾秒的時間內在一個磁盤子系統內部復制數太字節的數據。使得另一個服務器在幾秒鐘之后就能夠實際地訪問復制過去的數據。
?????? 實際的復制過程需要花費較長的時間。虛擬復制意味著磁盤子系統向附接的服務器假裝它們能在數秒的短時間內完成數據復制工作。所有的即時復制的實現都需要使用控制器的處理時間和緩存,并把負載放到內部I/0通道和硬盤上。?
?????? 作為示例,假定在復制命令發布之前沒有任何數據,只是在被請求執行即時復制之后才開始復制。為此,控制器需要管理兩個數據區域,一個用于原始區域,另一個用于由即時復制產生的復制數據。 先考慮服務器?1?對原始數據的訪問。讀操作完全沒有問題,總是訪問原始數據區域,但處理寫操作應特別注意。如果是在開始即時復制后第一次改變一個數據塊,那么控制器必須首先把舊的數據塊復制到復制數據區域,以便服務器?2?能夠繼續訪問舊的數據。只有在那之后,控制器才可以把服務器要改變的塊寫到原始數據區域。
?????? 服務器2對于由即時復制產生的復制數據的訪問要稍微簡單一些。在這種情況下,寫操作是沒有問題的,控制器總是把服務器?2請求寫的所有的塊都寫到復制數據區域。在另一方面,對于讀操作,控制器必須確定服務器?2?要讀的數據塊是否已經復制了。這將決定它是從原始數據區域,還是從復制數據區域讀這個數據塊,然后把它轉發給服務器。
?
6.2 遠程鏡像
?????? 即時復制很適合在磁盤子系統內部進行數據的復制。雖然使用即時復制產生的數據復制可以克服應用錯誤?(例如偶然地刪除一個文件系統)和邏輯錯誤?(例如在數據庫程序中的錯誤),但它們不能應對磁盤子系統的失效。像停電這樣簡單的問題都可能阻止對生產數據和復制數據的訪問達數小時。在磁盤子系統處的火災將毀壞原始數據和復制數據。因此,為了保護數據,不可以把生產數據和復制數據存放在地理上臨近的位置。
?????? 遠程鏡像提供防御災害的保護,現代磁盤子系統可以把數據或部分數據鏡像到相隔很遠的第二磁盤子系統,整個的遠程鏡像操作由兩個參與鏡像的磁盤子系統處理,遠程鏡像對于應用服務器不可見,并且不消耗應用服務器的資源。然而,遠程鏡像需要使用在兩個磁盤子系統中的資源,以及把兩個磁盤子系統連接在一起的?I/0?通道中的資源,這就意味著由此產生的性能減退可能影響到應用。
?
?????? 以下介紹一個使用遠程鏡像取得高的可用性的例子。安裝在主數據中心的配置有應用服務器、磁盤子系統以及相關的數據。這個磁盤子系統通過遠程鏡像把應用數據鏡像到第二磁盤子系統。第二磁盤子系統安裝在相隔?50?km?的備份數據中心。遠程鏡像保證在備份數據中心的應用數據不斷更新,并且更新第二磁盤子系統的間隔時間是可配置的。如果在主數據中心的磁盤子系統失效了,可以使用第二磁盤子系統的數據啟用在備份數據中心的備份應用服務器,應用操作可以繼續進行。我們將在后面的章節中介紹連接兩個磁盤子系統的I/O技術。
?
?????? 遠程鏡像還可以分成同步和異步兩種。在同步遠程鏡像中,第一個磁盤子系統在把數據發送到第二磁盤子系統之后再確認應答服務器的寫命令。相比之下,異步遠程鏡像則立即確認應答服務器的寫命令,隨后再把數據塊的復制發送給第二個磁盤子系統。
?????? 同步遠程鏡像的數據流下。服務器把塊A寫到第一個磁盤子系統。數據塊在到達第一個磁盤子系統的寫緩存之后立即被發往第二磁盤子系統;第二個磁盤子系統開始也把數據塊存放在寫緩存中。第一個磁盤子系統等待第二磁盤子系統報告寫操作的完成。不過,第一磁盤子系統并不關心數據塊是否仍然存放在第二磁盤子系統的寫緩存中,還是已經被寫到了第二磁盤子系統的物理硬盤上;它在收到第二磁盤子系統對數據塊寫操作的確認應答后,就會向服務器確認這個數據塊寫操作的完成。
?????? 同步遠程鏡像的優點是由第二磁盤子系統存儲的數據總是最新的。這就意味著,一旦第一個磁盤子系統失效了,應用程序可以通過使用在第二磁盤子系統上的數據繼續用最近的數據工作。
?????? 同步遠程鏡像的缺點是,從第一個磁盤子系統向第二磁盤子系統復制數據,以及第二磁盤子系統向第一個磁盤子系統發送確認應答,都增加了第一個磁盤子系統對服務器的響應時間。正是這個響應時間會影響諸如數據庫和文件系統這類應用的吞吐率。響應時間的一個重要因素是在兩個磁盤子系統之間的信號傳輸時間。說到底,它們之間的通信是用某種形式的物理信號編碼的,信號以某個速率傳播。如果從服務器經過第一個磁盤子系統到達第二磁盤子系統的線纜長度不超過?6~10km,那么就值得使用同步遠程鏡像。
?
?????? 如果要在更長的距離上進行鏡像,那么就需要采用異步遠程鏡像。在異步遠程鏡數據流像這種方法中,第一個磁盤子系統在它把數據暫時存放在寫緩存后就立即確認應答對該數據的接收。隨后,第一個磁盤子系統再把數據復制發送給第二磁盤子系統。對于發送寫請求的服務器來說,第二磁盤子系統對第一個磁盤子系統的寫確認是不重要的。
?????? 使用異步遠程鏡像所取得的快速響應時間的代價是明顯的。和同步遠程鏡像相比,在異步遠程鏡像中不能保證在第二磁盤子系統中的數據是最新的。當第一個磁盤子系統已經向服務器發送了寫應答而數據塊尚未寫進第二磁盤子系統時就會出現這樣的問題。
?????? 如果既想在長距離上鏡像數據,又不想僅使用異步鏡像,那么就必須使用?3?個磁盤子系統。開頭兩個磁盤子系統可以只距離幾千米,因此在它們之間可以使用同步遠程鏡像。此外,再采用異步遠程鏡像把第二個磁盤子系統的數據鏡像到第三磁盤子系統。顯然,這個解決方案所花的代價是較大的。因此,僅對非常重要的應用才會采用這種方法。
?
6.3 ?邏輯設備號掩蓋
?????? 邏輯設備號掩蓋是由?RAID?提供的一個重要功能,它限制服務器對磁盤子系統所包含的硬盤的訪問。
?????? ?一個磁盤子系統通過允許對具體的物理硬盤或使用RAID內建的虛擬磁盤的訪問,使得其內部物理硬盤可經過連接端口提供給服務器。根據SCSI協議,在磁盤子系統外部可見的磁盤?(物理的或虛擬的)也稱作? LUN?(LogicalUnitNumber,邏輯設備號)。
?????? 沒有?LUN?掩蓋,每個服務器將都能看到磁盤子系統提供的所有硬盤。一個連接?3個服務器且沒有LUN掩蓋的磁盤子系統,每個服務器都看到磁盤子系統對外部出口的所有硬盤。結果每個服務器都看到比自己需要的還多的硬盤。特別地,對于每個服務器,運行在不同服務器上的應用所使用的那些硬盤也是可見的。這就意味著,每個服務器對硬盤的配置操作必須非常小心,服務器?1對分配給服務器?3?的?LUN為?3?的硬盤執行錯誤的格式化會破壞在服務器?3上運行的應用的數據。
?????? LUN掩蓋通過指定在外部可見的硬盤,使上述混亂情況變成有序,它限制對磁盤子系統出口的硬盤的可見性。LUN掩蓋是如何把上述中的混亂變成有序的。現在,每個服務器僅能看到它實際需要使用的硬盤。因此,LUN掩蓋在出口的硬盤和訪問硬盤的服務器之間擔當一個過濾器的角色。
?????? 在LUN掩蓋中,一個服務器不再可能破壞屬于另一個服務器上運行的應用的數據。配置錯誤還是可能的,但結果不再是毀滅性的,而且配置錯誤現在可以被比較快地跟蹤和處理,因為信息在磁盤子系統內部被捆綁,而不是分布在所有的服務器上。
?????? LUN?掩蓋可劃分成基于端口和基于服務器兩類。
(1)在基于端口的?LUN?掩蓋中,過濾器僅使用端口工作。這就意味著,通過同一端口連接到磁盤子系統的所有服務器會看到同樣的磁盤。基于端口的LUN掩蓋主要用于低端磁盤子系統。
(2)基于服務器的LUN掩蓋可提供更大的靈活性。在這種方法中,每個服務器僅看到分配給它自己的硬盤,而不管它連接到哪個端口,也不管是否有其他服務器連接到同一端口。
?
?
七. 磁盤子系統的可提供型
?????? 磁盤子系統是由具有一定容錯能力的標準部件組裝形成的。我們已經說明了如何把這些標準部件結合在一起使得整個磁盤子系統具有比單個部件顯著高的容錯級別。現在的磁盤子系統可以經受任何部件的失效,而不會丟失數據或變得不可訪問。也可以把這樣的磁盤子系統稱作“無單點失效”。
?
下面列出的是可以采取的提高數據可提供性的具體措施:
?????? (1)使用?RAID?過程把數據分布到多個硬盤,并輔以附加的糾錯數據。在有一個物理硬盤失效的情況發生之后,有缺陷的硬盤的數據可以從其余的數據和附加的數據重建。
?????? (2)具體的硬盤使用海明編碼存儲數據。海明編碼允許即使在硬盤上的一些位被改變了的情況下,數據也能正確地恢復。在磁盤控制器中的自我診斷功能連續地監視位錯率和諸如溫度傳感器和主軸振動傳感器等物理變量。在錯誤率增加的情況下,硬盤可以在丟失數據之前就被更換。
?????? (3)把每個內部物理硬盤通過兩個內部I/0通道連接到控制器。如果有一個I/0通道失效了,還可以使用另一個I/0通道。
?????? (4)在磁盤子系統中的控制器可以用多個控制器實例來實現,如果有一個控制器實例失效了,可以用其余實例中的一個來接替有缺陷的實例的工作。
?????? (5)諸如電源、電池和風扇等輔助部件通常都配置兩套,以便其中一套部件的失效也不會影響工作。在連接電源的時候應該保證不同的電源線通過不同的保險絲。
?????? (6)讓服務器和磁盤子系統之間的連接通過多個I/0通道,如果其中一個I/0通道失效了,還可以使用其余的I/0通道。
?????? (7)使用即時復制防止邏輯錯誤。例如,可以每小時為數據庫建立?1?次即時復制。如果一個表被偶然地刪除了,那么可以把數據庫恢復到上一次的即時復制,那時候數據庫還是完整的。
?????? (8)使用遠程鏡像防止物理損壞。例如,如果由于某種原因,原始數據不可訪問了,那么可以使用由遠程鏡像產生的數據復制繼續操作。
?
?????? 上述措施表明,磁盤子系統可以保證可提供性達到很高的水平。整個IT系統的可提供性的其他重要因素是應用程序或應用服務器本身的可提供性,以及連接應用服務器和磁盤子系統的通路的可提供性。
?
?
?
?
整理自《存儲網絡技術與應用》
------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
網上資源: http://tianlesoftware.download.csdn.net
相關視頻:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1 群:62697716(滿); DBA2 群:62697977(滿)
DBA3 群:62697850?? DBA 超級群:63306533;????
聊天 群:40132017
--加群需要在備注說明Oracle表空間和數據文件的關系,否則拒絕申請
轉載于:https://www.cnblogs.com/hibernate315/archive/2011/02/22/2399091.html
總結
- 上一篇: SCSI 总线和协议
- 下一篇: 图解WordPress主题(模板)架构