前面我們介紹了磁盤的基本原理,我們知道一塊磁盤的容量和速度是有限的,對(duì)于一些應(yīng)用來說,可能需要幾個(gè)TB的大小的來存放數(shù)據(jù),我們必須要制造更大單盤容量的磁盤嗎?實(shí)際上,可以使用多塊磁盤并行起來解決這個(gè)問題,這就是RAID技術(shù)。
RAID:獨(dú)立的磁盤組成具有冗余特性的陣列。Redundant Array of Independent Disks
實(shí)現(xiàn)RAID 0 有兩種方式,一種是非條帶化的模式,一種是條帶化的模式。
對(duì)于非條帶化的模式:
RAID 0 : 一塊磁盤寫滿了,就往另一塊上寫, 一次IO只用到一塊磁盤,對(duì)整個(gè)系統(tǒng)來說容量增大了。
因?yàn)閷憹M一塊物理盤以后再寫另一塊盤。對(duì)寫IO沒有任何優(yōu)化,但是對(duì)讀IO能提高一定的并發(fā)IO讀幾率。
我們希望可以這樣,同時(shí)向兩塊磁盤進(jìn)行寫。我們可以把要寫的IO塊進(jìn)行編號(hào),1、2、3……100等,然后在$t_1$時(shí)刻,磁盤A和磁盤B同時(shí)寫入1、3兩塊,然后$t_2$時(shí)刻,同時(shí)寫入2、4塊,依次類推。
這樣就可以實(shí)現(xiàn)并發(fā)寫IO呢。接下來就是如何來進(jìn)行塊的劃分的問題了。
其實(shí)磁盤已經(jīng)經(jīng)過低級(jí)格式化了,也就是劃分為若干的扇區(qū),但是扇區(qū)只有512B大小,這么小的粒度太消耗性能。所以我們要重新劃分磁盤,而且又不能拋棄原有的扇區(qū)。
最直接的想法就是若干個(gè)扇區(qū)組成一個(gè)Data block,比如由4個(gè)扇區(qū)組成一個(gè)塊(block)
下圖是引入了分割思想以后的硬盤,
那么條帶深度和條帶長度指的就是
總結(jié)
這就是所謂的條帶化,它是對(duì)磁盤邏輯上的劃分,相當(dāng)于在磁盤上加了一個(gè)中間層而已
這樣對(duì)于一個(gè)大塊的數(shù)據(jù),可以以條帶為單位進(jìn)行寫入,也就是數(shù)據(jù)被分為了多塊寫入了4塊硬盤。而不是向之前一樣順序的寫入一個(gè)硬盤里面
RAID 0要提升性能,條帶要做得越小越好。因?yàn)槿羰菞l帶深度容量大于寫入的數(shù)據(jù)的長度,這段數(shù)據(jù)將會(huì)落到同一個(gè)segment中,相當(dāng)于本次IO只能從一塊硬盤中讀取。
但是條帶太小,并發(fā)IO幾率降低。因?yàn)槿绻麠l帶太小,每次IO一定會(huì)占用大部分物理盤,隊(duì)列中的IO只能等待IO結(jié)束后才使用物理盤。
總之,參與RAID0 的物理盤會(huì)組成一個(gè)邏輯上連續(xù),物理上也連續(xù)的虛擬磁盤。控制器對(duì)虛擬磁盤發(fā)出的指令,被RAID控制器轉(zhuǎn)換為真實(shí)磁盤IO,再返回主機(jī)磁盤控制器,經(jīng)過控制器在cache中的組合,再提交給主機(jī)控制器。
RAID 0有非常明顯的缺點(diǎn),沒有任何的備份,所以任何一塊硬盤損壞均會(huì)造成數(shù)據(jù)丟失。
RAID 0 最大的缺點(diǎn)是沒有備份盤。RAID 1 進(jìn)行了改正。他采用了一塊用于正常使用,另一塊作為影子盤存在。
也就是寫數(shù)據(jù)的時(shí)候,會(huì)寫兩份。所以寫的時(shí)候的速度并不快,而且可用容量實(shí)際上就只有一塊盤,空間浪費(fèi)很嚴(yán)重。
RAID 0 速度快,但是沒有備份,RAID 1 有備份,但是可用容量太少。
RAID 2 的改進(jìn)在于引入了校驗(yàn)盤的概念。當(dāng)數(shù)據(jù)損壞的時(shí)候,可以根據(jù)校驗(yàn)盤的數(shù)字,恢復(fù)原來磁盤上的數(shù)字。
RAID 2采用“漢明碼”來進(jìn)行校驗(yàn),這種糾錯(cuò)技術(shù)算法比較復(fù)雜,而且需要加入大量的校驗(yàn)位,比如4位數(shù)據(jù)編碼,會(huì)加入3位校驗(yàn)位。
同時(shí)數(shù)據(jù)存儲(chǔ)的時(shí)候,會(huì)把每個(gè)IO下的數(shù)據(jù)以位為單位強(qiáng)行打散在每個(gè)磁盤。
磁盤最小的IO單位是512B,如何寫入1bit?上層IO可以先經(jīng)過文件系統(tǒng),然后通過磁盤控制器驅(qū)動(dòng)向磁盤發(fā)出IO。最終IO大小都是N倍的扇區(qū)。即使只要幾個(gè)字節(jié),也需要讀出整個(gè)扇區(qū)
所以每次必須所有聯(lián)動(dòng)起來一次進(jìn)行存儲(chǔ),如果各磁盤的主軸沒有同步,則先讀出數(shù)據(jù)的硬盤需要等待。所以開銷也比較大。
正因?yàn)榇?,目前RAID2已經(jīng)不怎么使用了。
RAID 3引入了一種新的校驗(yàn)算法,可以將數(shù)據(jù)盤中的每個(gè)位做XOR運(yùn)算,然后將結(jié)果寫入到校驗(yàn)盤的對(duì)應(yīng)位置。任何一個(gè)扇區(qū)損壞,可以通過剩余的位和校驗(yàn)位一起進(jìn)行XOR運(yùn)算來獲得丟失的位。
同時(shí)RAID 3 把條帶長度設(shè)置為4K字節(jié),因?yàn)橐话阄募到y(tǒng)剛好是4KB一個(gè)塊,所以如果用4塊數(shù)據(jù)盤,條帶深度為1KB,也就是2個(gè)扇區(qū)。這樣,可以保證連續(xù)寫的時(shí)候,以條帶為單位寫入,提高并行度。
所以RAID 2和RAID 3的每次IO都會(huì)牽動(dòng)所有磁盤并行讀寫,每次只能做一個(gè)IO,不適合多IO并發(fā)的情況。
也說RAID 2和RAID 3適合IO塊大的情況
一般來說,RAID 3 的條帶長度= 文件系統(tǒng)的大小,就不會(huì)產(chǎn)生條帶不對(duì)齊的現(xiàn)象。減少碎片。
關(guān)于RAID 3的校驗(yàn)盤有沒有瓶頸的問題
若一個(gè)邏輯塊是4KB,4 1塊盤,文件系統(tǒng)下發(fā)一個(gè)IO至少是以一個(gè)邏輯塊為單位的。所以文件系統(tǒng)下發(fā)一次IO,不管多大都是跨越了所有數(shù)據(jù)盤的。
總結(jié)起來就是RAID 3適合于連續(xù)大塊的讀和寫,不適合于隨機(jī)IO和并發(fā)IO。
RAID 2和RAID 3已經(jīng)解決了校驗(yàn)盤的問題,避免了一塊盤損壞數(shù)據(jù)全丟失的問題。但是對(duì)于無法得到并發(fā)IO的問題還沒解決。
RAID 2和RAID 3的思想是讓所有數(shù)據(jù)盤都參與起來。對(duì)于隨機(jī)小塊讀寫,每秒產(chǎn)生的IO數(shù)目很大,但是每個(gè)IO的請(qǐng)求數(shù)據(jù)長度卻很短,如果所有磁盤同一時(shí)刻都在處理一個(gè)IO,得不償失。不如讓這個(gè)IO直接寫入一塊磁盤,其他的做其他的IO。
方法有:
所以 RAID 4 的改進(jìn)是增加了條帶深度,RAID 4相對(duì)于RAID 3 性能幾乎沒有提升。但是至少讓它可以進(jìn)行并發(fā)IO
RAID 4相對(duì)于RAID 3 性能幾乎沒有提升。而且因?yàn)槊總€(gè)IO必定會(huì)占用校驗(yàn)盤, 所以校驗(yàn)盤成為了瓶頸,而且是熱點(diǎn)盤,容易壞。
這樣看來RAID 4其實(shí)有些不倫不類。
RAID 4的關(guān)鍵錯(cuò)誤在于忽略了校驗(yàn)盤,每個(gè)IO不管怎么樣都會(huì)讀寫校驗(yàn)盤的。
RAID 5的改進(jìn)在于將校驗(yàn)盤把校驗(yàn)盤分割開,依附于數(shù)據(jù)盤。把條帶做得很大,保證每次IO不會(huì)占滿整個(gè)條帶。
2塊盤的RAID 5系統(tǒng),對(duì)于寫操作來說不能并發(fā)IO,因?yàn)樵L問一塊盤的時(shí)候,校驗(yàn)信息一定在另一塊盤中。同理,3塊盤也不能
所以最低可以并發(fā)IO的RAID 5 需要4塊盤,此時(shí)最多可以并發(fā)兩個(gè)IO,并發(fā)的幾率是0.0322。
RAID 5 磁盤數(shù)量越多,并發(fā)的幾率越大。
RAID 5與RAID 0相比
RAID 5 是繼RAID 0 , RAID 1以后又一個(gè)可以實(shí)現(xiàn)并發(fā)IO的陣式,但是比RAID 1更劃算,比RAID 0更安全。
RAID 5與RAID 3相比
RAID 5的連續(xù)讀寫不如RAID 3,因?yàn)镽AID 3 的條帶深度很小,每次IO可以牽動(dòng)所有的磁盤為之服務(wù)。
RAID 5 每次IO一般只使用一塊數(shù)據(jù)盤,先放滿一個(gè)Segment,再去下一個(gè)磁盤的Segment存放,塊編號(hào)是橫向進(jìn)行。
所以RAID 3在IO SIZE大的時(shí)候高性能,RAID 5在隨機(jī)IOPS大時(shí)有高性能。
RAID 5的缺點(diǎn)
RAID 5的缺點(diǎn)是寫懲罰:寫性能差,因?yàn)槊繉懸簧葏^(qū)就要產(chǎn)生其校驗(yàn)扇區(qū),一并寫入校驗(yàn)盤。
新數(shù)據(jù)過來,控制器立即讀待更新扇區(qū)的數(shù)據(jù),然后讀此條帶的校驗(yàn)數(shù)據(jù)根據(jù)公式新數(shù)據(jù)的校驗(yàn)數(shù)據(jù) = (老數(shù)據(jù) EOR 新數(shù)據(jù)) EOR 老校驗(yàn)數(shù)據(jù) 得到新校驗(yàn)數(shù)據(jù),然后寫到磁盤中。
所以每次寫入都需要更新校驗(yàn)盤。浪費(fèi)3個(gè)其他動(dòng)作,也就是讀老數(shù)據(jù),讀老校驗(yàn)數(shù)據(jù),然后寫新數(shù)據(jù)和校驗(yàn)數(shù)據(jù),浪費(fèi)了除了“寫新數(shù)據(jù)”之外的操作。
總結(jié):隨機(jī)并發(fā)IO和寫性能二者只能取其一。
RAID 5EE
RAID 5的缺點(diǎn)是不能壞兩塊盤,因?yàn)槿绻粔K盤壞了,可以用其他數(shù)據(jù)校驗(yàn)出。
可在陣式中增加熱備盤,不參與組陣,只有在損壞的時(shí)候立刻頂替,其他盤恢復(fù)數(shù)據(jù)。如果此時(shí)有請(qǐng)求此盤的IO,則其他盤暫代。
同樣RAID 6也是為了解決RAID 5只能壞一塊盤的問題。
如果壞了兩塊盤,相當(dāng)于存在兩個(gè)未知數(shù),要求解兩個(gè)未知數(shù)據(jù),一定需要另外一個(gè)不相關(guān)的等式來求解。
所以使用兩套算法各自算出一個(gè)等式,分別放在兩塊校驗(yàn)盤中。
優(yōu)點(diǎn)是更安全,缺點(diǎn)是寫懲罰更大。
RAID 卡
軟件RAID運(yùn)行于操作系統(tǒng)底層,將SCSI 或者IDE控制器提交上來的物理磁盤,虛擬成虛擬磁盤,再提交給卷管理程序。但是
軟件RAID :
既然軟件這么多缺點(diǎn),所以人們謀求用硬件來實(shí)現(xiàn)RAID的方法。
RAID卡就是利用獨(dú)立硬件來實(shí)現(xiàn)RAID功能的方法。
一般在SCSI卡上增加了額外的芯片用于RAID功能。
SCSI RAID卡上一定要包含SCSI控制器,因?yàn)槠浜蠖诉B接依然是SCSI的物理磁盤。
操作系統(tǒng)如何看待邏輯磁盤
RAID控制器向OS提交的是虛擬邏輯盤,而非所有的物理磁盤。每個(gè)邏輯盤對(duì)OS來說都是一塊單獨(dú)的磁盤。
比如安裝了2塊IDE磁盤和4塊SCSI磁盤,IDE直接連接到IDE接口,SCSI連接到PCI接口的SCSI卡上。
若無RAID,可以看到6塊硬盤。
可以通過RAID程序把兩塊IDE做成RAID 0 , 變成了2*80G = 160G的磁盤。
4塊SCSI磁盤做RAID 5,相當(dāng)于3塊盤的容量,即216GB。
所以磁盤管理器其實(shí)可以看到兩塊硬盤,可以格式化為NTFS等文件格式。
與分區(qū)對(duì)比
與分區(qū)不同,分區(qū)是OS在物理磁盤上做再次劃分。而RAID 卡提供給OS的是任何時(shí)候是一塊或者幾塊的邏輯盤,也就是OS認(rèn)為的物理磁盤。
OS在磁盤上還可以進(jìn)行分區(qū),格式化。
LUN:條帶化以后,RAID程序操控SCSI控制器向OS層的驅(qū)動(dòng)程序代碼提交虛擬化之后的虛擬盤。
RAID 控制器如何管理邏輯磁盤
RAID 卡可以對(duì)邏輯磁盤進(jìn)行再次的劃分,既然要?jiǎng)澐?,必須?duì)某塊磁盤的某個(gè)區(qū)域劃分給那塊邏輯盤用心里有數(shù),所以有必要在每塊磁盤保留一個(gè)區(qū)域,記錄劃分信息、RAID類型以及組內(nèi)的磁盤信息。這種統(tǒng)一的RAID信息格式:DDF 。
RAID卡可針對(duì)總線上某幾塊磁盤做一種RAID類型,然后針對(duì)另幾塊磁盤做另一種RAID類型。
一種RAID類型包含的磁盤共同組成了一個(gè)RAID GROUP ,簡(jiǎn)稱RG。
邏輯盤就是從RG劃分出來的,原則上不能跨RG來劃分,因?yàn)镽G的RAID類型不一樣,性能就不一樣。
RAID 卡上的內(nèi)存
RAID卡上的內(nèi)存,有數(shù)據(jù)緩存和代碼執(zhí)行內(nèi)存的作用
RAID卡的緩存
對(duì)于上層的寫IO,有兩種手段來處理;
對(duì)于讀緩存:
中高端的RAID卡一般有256M的RAM作為緩存。
到目前為止,我們已經(jīng)可以通過RAID卡對(duì)外呈現(xiàn)一個(gè)一個(gè)的邏輯盤了,但是邏輯盤存在一個(gè)非常大的問題就是不夠靈活。
如果一開始就劃分一個(gè)100G的邏輯盤,如果數(shù)據(jù)盛不下了,此時(shí)把其他磁盤上未使用的空間挪一部分到邏輯盤上。
但是從RAID卡里面增加邏輯盤容量很費(fèi)功夫。即使實(shí)現(xiàn)了,上層文件系統(tǒng)也無法立刻感知到。所以對(duì)要求不間斷服務(wù)的服務(wù)器不適用。
歸根結(jié)底,因?yàn)镽AID控制器是由硬件來實(shí)現(xiàn)RAID的,所以操作起來不靈活,如果OS把RAID控制器提交上來的邏輯盤,加以組織和再分配。就非常靈活,其實(shí)就是加一層靈活的管理層。
卷管理層:Volume Manager,LDM(邏輯磁盤管理)
LVM開始是Linux系統(tǒng)上的一種實(shí)現(xiàn),后來移植到AIX和HPUX等系統(tǒng)
大小可以隨時(shí)變更,也不需要重啟OS。前提是還有備用的PP。
操作很簡(jiǎn)單:創(chuàng)建PV,加入VG ,創(chuàng)建LV,格式化,隨便擴(kuò)展。
最大的好處:生成的LV可以跨越RAID卡提交給OS的物理或者邏輯盤。
卷管理軟件的實(shí)現(xiàn)
那么卷管理軟件到底怎么實(shí)現(xiàn)的呢?
LVM會(huì)記錄某塊物理盤的名稱、容量,誰是誰,從哪里到哪里是屬于這塊盤的,地址是多少等。這些信息記錄在磁盤某個(gè)區(qū)域,LVM中這個(gè)區(qū)域叫VGDA
LVM可以通過讀取每塊物理磁盤上的這個(gè)區(qū)域來獲得LVM的配置信息,比如PP大小,初始偏移,PV的數(shù)量,排列順序和映射關(guān)系等。
LVM初始化的時(shí)候讀取信息,然后在緩存中生成映射公式,從而完成LV的掛載。如果此時(shí)上層來一個(gè)IO,LVM就需要通過緩存中的映射關(guān)系判斷地址對(duì)應(yīng)到實(shí)際物理磁盤的哪個(gè)地址。然后通過磁盤控制器驅(qū)動(dòng)直接給這個(gè)地址發(fā)數(shù)據(jù)。這個(gè)地址被RAID控制器接收到了,還需要做一次轉(zhuǎn)換。
總之:卷管理軟件就是運(yùn)行在OS磁盤控制器驅(qū)動(dòng)程序之上的軟件,作用是實(shí)現(xiàn)RAID卡硬件管理磁盤空間所實(shí)現(xiàn)不了的靈活功能,比如隨時(shí)擴(kuò)容。
磁盤在VM這一層處理之后,稱為卷更為恰當(dāng)。因?yàn)榇疟P控制器看待磁盤,就是盤片 磁頭,而卷管理軟件看待磁盤,會(huì)認(rèn)為它是一個(gè)線性的大倉庫,而不管倉庫用什么方式存儲(chǔ)。
倉庫的每個(gè)房間都有一個(gè)地址(LBA),VM只需要知道一共有多少,讓庫管員(磁盤控制器驅(qū)動(dòng))從某段地址(LBA地址段)存取貨物(數(shù)據(jù)),那么庫管員立即操控機(jī)器(磁盤控制器)來各個(gè)房間取貨物(數(shù)據(jù)),這就是VM的作用。
** 即從底到上依次是:物理磁盤、磁盤控制器、IO總線、總線驅(qū)動(dòng)、磁盤控制器驅(qū)動(dòng)、卷管理程序**
在底層磁盤擴(kuò)容之后,磁盤控制器驅(qū)動(dòng)程序會(huì)通知VM已經(jīng)增大了多少容量
擴(kuò)大、收縮卷需要其上的文件系統(tǒng)來配合。
MBR 和VGDA
分區(qū)管理是最簡(jiǎn)單的卷管理方式,分區(qū)就是將一個(gè)磁盤抽象為一個(gè)倉庫,然后將倉庫劃分為一庫區(qū)、二庫區(qū)等。
分區(qū)管理和卷管理最大的不同在于,分區(qū)管理只能針對(duì)單個(gè)磁盤進(jìn)行劃分,而不能將磁盤進(jìn)行合并再劃分。
分區(qū)信息保存在磁盤上,位于LBA1這個(gè)扇區(qū),又稱為MBR也就是主引導(dǎo)記錄。
BIOS代碼都是固定的,所以必定要執(zhí)行MBR上的代碼,新出來的規(guī)范EFI可以靈活定制從那個(gè)磁盤的哪個(gè)扇區(qū)啟動(dòng),
MBR除了包含啟動(dòng)指令代碼,還包含了分區(qū)表。啟動(dòng)的時(shí)候,程序會(huì)跳轉(zhuǎn)到活動(dòng)分區(qū)去讀取代碼做OS啟動(dòng)。所以必須有一個(gè)活動(dòng)分區(qū)。
卷管理軟件在劃分了邏輯卷以后同樣需要記錄卷怎么劃分的,使用一種叫VGDA的數(shù)據(jù)結(jié)構(gòu)。
高級(jí)VM沒有拋棄MBR,而是在此基礎(chǔ)上,增加了類似VGDA的這樣的數(shù)據(jù)結(jié)構(gòu)來動(dòng)態(tài)管理磁盤。
文件系統(tǒng)相當(dāng)于理貨員,與庫管員一起完成管理糧庫的工作。
應(yīng)用程序只需要告訴文件系統(tǒng)需要放多少的數(shù)據(jù)或者讀多少數(shù)據(jù),而文件系統(tǒng)不需要關(guān)心倉庫到底在那里,放到那個(gè)房間。
文件系統(tǒng)需要將數(shù)據(jù)存放在那里記錄下來。
如果存取的數(shù)據(jù)量大,每次記錄的數(shù)很大。將8個(gè)房間劃分為一個(gè)邏輯房間,稱作“簇”
數(shù)據(jù)如果找連續(xù)的簇進(jìn)行存放,則還必須花時(shí)間把整理倉庫,整理出連續(xù)的空間來,所以不如在描述數(shù)據(jù)存放的方式,比如數(shù)據(jù) 10000 簇2,6,18,這樣就可以解決空間浪費(fèi)的問題,而且不需要經(jīng)常整理庫。
但是這樣又存在一個(gè)問題,數(shù)據(jù)描述的方式變得長短不一,可以為了簡(jiǎn)化處理,需要給一個(gè)定長的描述。比如數(shù)據(jù) 100000 首簇1,然后在在首簇做一個(gè)標(biāo)記,寫明下一個(gè)簇是多少號(hào),然后找到下一個(gè)簇,根據(jù)簇的路標(biāo),到下下個(gè)簇進(jìn)行取貨,依此類推。
如果要尋找空的簇,只需要找格子上沒有寫字的簇即可。
總結(jié)一下,
描述貨物的三字段:名稱、數(shù)量、存放的第一個(gè)簇。
進(jìn)一步優(yōu)化:
貨物雖然有可能存放在不連續(xù)的簇中,但是這些簇往往也是局部連續(xù)的。所以如果是一段一段的找而不是一簇一簇的找,會(huì)節(jié)約時(shí)間。比如簇段1~3,簇段5~7等等。
所以記錄數(shù)據(jù)存放信息的本子就是元數(shù)據(jù),也就是用來描述數(shù)據(jù)怎么組織的數(shù)據(jù)。
如果記錄本丟失,縱然貨物無損,也無法取出,因?yàn)闊o法判斷貨物的組織結(jié)構(gòu)了。
文件系統(tǒng)的IO方式
IO Manager是OS內(nèi)核中專門來管理IO的模塊,可以協(xié)調(diào)文件系統(tǒng)、磁盤驅(qū)動(dòng)的運(yùn)作,流程如下
文件系統(tǒng)IO:
異步IO和非阻塞IO另一個(gè)好處:文件系統(tǒng)不需要等待及時(shí)返回?cái)?shù)據(jù),可以對(duì)上次的IO進(jìn)行優(yōu)化排隊(duì)。
Direct IO:文件系統(tǒng)有自己的緩存機(jī)制,數(shù)據(jù)庫也有緩存,IO發(fā)出之前已經(jīng)經(jīng)過自己的優(yōu)化了,如果又在文件系統(tǒng)層面再優(yōu)化一次,多次一舉。使用Direct IO以后IO請(qǐng)求、數(shù)據(jù)請(qǐng)求以及回送數(shù)據(jù)不被文件系統(tǒng)緩存,直接進(jìn)入應(yīng)用程序的緩存中,可以提升性能。此外,在系統(tǒng)路徑上任何一處引入了緩存,若采用write back模式,都存在數(shù)據(jù)一致性的問題,因?yàn)镈irect IO繞過了文件系統(tǒng)的緩存,降低了數(shù)據(jù)不一致性。
附塊存儲(chǔ)、文件存儲(chǔ)、對(duì)象存儲(chǔ)和分布式存儲(chǔ)的區(qū)別
典型設(shè)備:磁盤陣列,硬盤
塊存儲(chǔ)主要是將裸磁盤空間整個(gè)映射給主機(jī)使用的,就是說例如磁盤陣列里面有5塊硬盤(為方便說明,假設(shè)每個(gè)硬盤1G),然后可以通過劃邏輯盤、做Raid、或者LVM(邏輯卷)等種種方式邏輯劃分出N個(gè)邏輯的硬盤。(假設(shè)劃分完的邏輯盤也是5個(gè),每個(gè)也是1G,但是這5個(gè)1G的邏輯盤已經(jīng)于原來的5個(gè)物理硬盤意義完全不同了。例如第一個(gè)邏輯硬盤A里面,可能第一個(gè)200M是來自物理硬盤1,第二個(gè)200M是來自物理硬盤2,所以邏輯硬盤A是由多個(gè)物理硬盤邏輯虛構(gòu)出來的硬盤。)
接著塊存儲(chǔ)會(huì)采用映射的方式將這幾個(gè)邏輯盤映射給主機(jī),主機(jī)上面的操作系統(tǒng)會(huì)識(shí)別到有5塊硬盤,但是操作系統(tǒng)是區(qū)分不出到底是邏輯還是物理的,它一概就認(rèn)為只是5塊裸的物理硬盤而已,跟直接拿一塊物理硬盤掛載到操作系統(tǒng)沒有區(qū)別的,至少操作系統(tǒng)感知上沒有區(qū)別。
此種方式下,操作系統(tǒng)還需要對(duì)掛載的裸硬盤進(jìn)行分區(qū)、格式化后,才能使用,與平常主機(jī)內(nèi)置硬盤的方式完全無異。
優(yōu)點(diǎn):
1、 這種方式的好處當(dāng)然是因?yàn)橥ㄟ^了Raid與LVM等手段,對(duì)數(shù)據(jù)提供了保護(hù)。
2、 另外也可以將多塊廉價(jià)的硬盤組合起來,成為一個(gè)大容量的邏輯盤對(duì)外提供服務(wù),提高了容量。
3、 寫入數(shù)據(jù)的時(shí)候,由于是多塊磁盤組合出來的邏輯盤,所以幾塊磁盤可以并行寫入的,提升了讀寫效率。
4、 很多時(shí)候塊存儲(chǔ)采用SAN架構(gòu)組網(wǎng),傳輸速率以及封裝協(xié)議的原因,使得傳輸速度與讀寫速率得到提升。
缺點(diǎn):
1、采用SAN架構(gòu)組網(wǎng)時(shí),需要額外為主機(jī)購買光纖通道卡,還要買光纖交換機(jī),造價(jià)成本高。
2、主機(jī)之間的數(shù)據(jù)無法共享,在服務(wù)器不做集群的情況下,塊存儲(chǔ)裸盤映射給主機(jī),再格式化使用后,對(duì)于主機(jī)來說相當(dāng)于本地盤,那么主機(jī)A的本地盤根本不能給主機(jī)B去使用,無法共享數(shù)據(jù)。
3、不利于不同操作系統(tǒng)主機(jī)間的數(shù)據(jù)共享:另外一個(gè)原因是因?yàn)椴僮飨到y(tǒng)使用不同的文件系統(tǒng),格式化完之后,不同文件系統(tǒng)間的數(shù)據(jù)是共享不了的。例如一臺(tái)裝了WIN7/XP,文件系統(tǒng)是FAT32/NTFS,而Linux是EXT4,EXT4是無法識(shí)別NTFS的文件系統(tǒng)的。就像一只NTFS格式的U盤,插進(jìn)Linux的筆記本,根本無法識(shí)別出來。所以不利于文件共享。
典型設(shè)備:FTP、NFS服務(wù)器
為了克服上述文件無法共享的問題,所以有了文件存儲(chǔ)。
文件存儲(chǔ)也有軟硬一體化的設(shè)備,但是其實(shí)普通拿一臺(tái)服務(wù)器/筆記本,只要裝上合適的操作系統(tǒng)與軟件,就可以架設(shè)FTP與NFS服務(wù)了,架上該類服務(wù)之后的服務(wù)器,就是文件存儲(chǔ)的一種了。
主機(jī)A可以直接對(duì)文件存儲(chǔ)進(jìn)行文件的上傳下載,與塊存儲(chǔ)不同,主機(jī)A是不需要再對(duì)文件存儲(chǔ)進(jìn)行格式化的,因?yàn)槲募芾砉δ芤呀?jīng)由文件存儲(chǔ)自己搞定了。
優(yōu)點(diǎn):
1、造價(jià)交低:隨便一臺(tái)機(jī)器就可以了,另外普通以太網(wǎng)就可以,根本不需要專用的SAN網(wǎng)絡(luò),所以造價(jià)低。
2、方便文件共享:例如主機(jī)A(WIN7,NTFS文件系統(tǒng)),主機(jī)B(Linux,EXT4文件系統(tǒng)),想互拷一部電影,本來不行。加了個(gè)主機(jī)C(NFS服務(wù)器),然后可以先A拷到C,再C拷到B就OK了。(例子比較膚淺,請(qǐng)見諒……)
缺點(diǎn):
讀寫速率低,傳輸速率慢:以太網(wǎng),上傳下載速度較慢,另外所有讀寫都要1臺(tái)服務(wù)器里面的硬盤來承擔(dān),相比起磁盤陣列動(dòng)不動(dòng)就幾十上百塊硬盤同時(shí)讀寫,速率慢了許多。
典型設(shè)備:內(nèi)置大容量硬盤的分布式服務(wù)器
對(duì)象存儲(chǔ)最常用的方案,就是多臺(tái)服務(wù)器內(nèi)置大容量硬盤,再裝上對(duì)象存儲(chǔ)軟件,然后再額外搞幾臺(tái)服務(wù)作為管理節(jié)點(diǎn),安裝上對(duì)象存儲(chǔ)管理軟件。管理節(jié)點(diǎn)可以管理其他服務(wù)器對(duì)外提供讀寫訪問功能。
之所以出現(xiàn)了對(duì)象存儲(chǔ)這種東西,是為了克服塊存儲(chǔ)與文件存儲(chǔ)各自的缺點(diǎn),發(fā)揚(yáng)它倆各自的優(yōu)點(diǎn)。簡(jiǎn)單來說塊存儲(chǔ)讀寫快,不利于共享,文件存儲(chǔ)讀寫慢,利于共享。能否弄一個(gè)讀寫快,利 于共享的出來呢。于是就有了對(duì)象存儲(chǔ)。
首先,一個(gè)文件包含了了屬性(術(shù)語叫metadata,元數(shù)據(jù),例如該文件的大小、修改時(shí)間、存儲(chǔ)路徑等)以及內(nèi)容(以下簡(jiǎn)稱數(shù)據(jù))。
以往像FAT32這種文件系統(tǒng),是直接將一份文件的數(shù)據(jù)與metadata一起存儲(chǔ)的,存儲(chǔ)過程先將文件按照文件系統(tǒng)的最小塊大小來打散(如4M的文件,假設(shè)文件系統(tǒng)要求一個(gè)塊4K,那么就將文件打散成為1000個(gè)小塊),再寫進(jìn)硬盤里面,過程中沒有區(qū)分?jǐn)?shù)據(jù)/metadata的。而每個(gè)塊最后會(huì)告知你下一個(gè)要讀取的塊的地址,然后一直這樣順序地按圖索驥,最后完成整份文件的所有塊的讀取。
這種情況下讀寫速率很慢,因?yàn)榫退隳阌?00個(gè)機(jī)械手臂在讀寫,但是由于你只有讀取到第一個(gè)塊,才能知道下一個(gè)塊在哪里,其實(shí)相當(dāng)于只能有1個(gè)機(jī)械手臂在實(shí)際工作。
而對(duì)象存儲(chǔ)則將元數(shù)據(jù)獨(dú)立了出來,控制節(jié)點(diǎn)叫元數(shù)據(jù)服務(wù)器(服務(wù)器 對(duì)象存儲(chǔ)管理軟件),里面主要負(fù)責(zé)存儲(chǔ)對(duì)象的屬性(主要是對(duì)象的數(shù)據(jù)被打散存放到了那幾臺(tái)分布式服務(wù)器中的信息),而其他負(fù)責(zé)存儲(chǔ)數(shù)據(jù)的分布式服務(wù)器叫做OSD,主要負(fù)責(zé)存儲(chǔ)文件的數(shù)據(jù)部分。當(dāng)用戶訪問對(duì)象,會(huì)先訪問元數(shù)據(jù)服務(wù)器,元數(shù)據(jù)服務(wù)器只負(fù)責(zé)反饋對(duì)象存儲(chǔ)在哪些OSD,假設(shè)反饋文件A存儲(chǔ)在B、C、D三臺(tái)OSD,那么用戶就會(huì)再次直接訪問3臺(tái)OSD服務(wù)器去讀取數(shù)據(jù)。
這時(shí)候由于是3臺(tái)OSD同時(shí)對(duì)外傳輸數(shù)據(jù),所以傳輸?shù)乃俣染图涌炝?。?dāng)OSD服務(wù)器數(shù)量越多,這種讀寫速度的提升就越大,通過此種方式,實(shí)現(xiàn)了讀寫快的目的。
另一方面,對(duì)象存儲(chǔ)軟件是有專門的文件系統(tǒng)的,所以O(shè)SD對(duì)外又相當(dāng)于文件服務(wù)器,那么就不存在文件共享方面的困難了,也解決了文件共享方面的問題。
所以對(duì)象存儲(chǔ)的出現(xiàn),很好地結(jié)合了塊存儲(chǔ)與文件存儲(chǔ)的優(yōu)點(diǎn)。
1、有一類應(yīng)用是需要存儲(chǔ)直接裸盤映射的,例如數(shù)據(jù)庫。因?yàn)閿?shù)據(jù)庫需要存儲(chǔ)裸盤映射給自己后,再根據(jù)自己的數(shù)據(jù)庫文件系統(tǒng)來對(duì)裸盤進(jìn)行格式化的,所以是不能夠采用其他已經(jīng)被格式化為某種文件系統(tǒng)的存儲(chǔ)的。此類應(yīng)用更適合使用塊存儲(chǔ)。
2、對(duì)象存儲(chǔ)的成本比起普通的文件存儲(chǔ)還是較高,需要購買專門的對(duì)象存儲(chǔ)軟件以及大容量硬盤。如果對(duì)數(shù)據(jù)量要求不是海量,只是為了做文件共享的時(shí)候,直接用文件存儲(chǔ)的形式好了,性價(jià)比高。
聯(lián)系客服