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