WAFL 最長每10 秒就會(huì)生成一個(gè)內(nèi)部快照,成為一致性檢查點(diǎn),所以在磁盤上會(huì)有一個(gè)完全具有一致性的文件系統(tǒng)版本,當(dāng)filer 啟動(dòng),WAFL 總是是用在磁盤上最新的檢查點(diǎn),所以Filer 避免了費(fèi)時(shí)的文件系統(tǒng)校驗(yàn),F(xiàn)ile system check, 使得即使意外掉電或者系統(tǒng)故障時(shí),也不必進(jìn)行file system check。 Filer 只需要2 分鐘的硬件自檢就可以重新完成啟動(dòng)。
Filer 使用電池支持的不掉電RAM (NVRAM),避免丟失任何發(fā)生在檢查點(diǎn)后的NFS/CIFS請求,正常關(guān)機(jī)時(shí),F(xiàn)iler 關(guān)閉NFS/CIFS 服務(wù),將所有緩沖在NVRAM 的請求刷新到磁盤后關(guān)閉NVRAM。當(dāng)filer 故障后重啟動(dòng),它將replay 所有保存在NVRAM 中的沒到磁盤的NFS/CIFS請求。
使用NVRAM 保存沒有commit 到磁盤的請求,與一些UNIX 使用NVRAM 作為disk cache有很大的區(qū)別。當(dāng)在磁盤層面上使用NVRAM ,其中可能包含影響一致性的重要數(shù)據(jù),如果NVRAM 出問題,文件系統(tǒng)會(huì)不一致,即使使用fsck 也無法恢復(fù)。
WAFL 還使用NVRAM 作為文件系統(tǒng)日志journal,而不是需要變化的磁盤塊的緩存(Disk Cache),所以WAFL 極為有效地利用了NVRAM 的空間。例如,一個(gè)請求,讓文件系統(tǒng)生成一個(gè)新文件,可以用幾百個(gè)字節(jié)信息表明,而磁盤上卻需要改變十幾塊的信息。由于WAFL 使用NVRAM 保存操作命令日志,而不是這些命令的結(jié)果,NVRAM 可以保存幾千個(gè)操作的日志。
15.4.3.6 Filer 的RAID
Filer 使用了一種RAID 4 設(shè)計(jì)來保護(hù)數(shù)據(jù)避免受磁盤故障的破壞。然而與一般的RAID4 和 RAID 5 實(shí)現(xiàn)不同,一般的RAID 實(shí)現(xiàn)結(jié)構(gòu)沒有考慮文件系統(tǒng)的結(jié)構(gòu)和活動(dòng)方式。
WAFL 的 RAID 4 實(shí)現(xiàn),是與文件系統(tǒng)的設(shè)計(jì)緊密優(yōu)化的。 通過將文件系統(tǒng)和RAID 層結(jié)合考慮, NetApp. RAID 的設(shè)計(jì)提供了所有RAID 校驗(yàn)保護(hù)的好處,克服了常規(guī)的RAID 5帶來的性能損失。另外, WAFL 的 RAID 4 設(shè)計(jì)不像RAID 5 那樣將數(shù)據(jù)和校驗(yàn)數(shù)據(jù)交織到每個(gè)盤,整個(gè)系統(tǒng)可以在有RAID 的時(shí)候仍然可以迅速簡便地?cái)U(kuò)充。
通過RAID 4, 如果一個(gè)磁盤有損壞,利用RAID 組里的校驗(yàn)盤可以重新計(jì)算出損壞磁盤上的數(shù)據(jù),其 block 映射到磁盤上的新的位置。如果整個(gè)磁盤損壞,校驗(yàn)盤也可以保護(hù)數(shù)據(jù)不丟失,當(dāng)故障盤重新替換,所有內(nèi)容通過校驗(yàn)盤自動(dòng)重計(jì)算。
RAID 4 陣列使用一個(gè)磁盤專用于校驗(yàn),其余用于數(shù)據(jù)。每個(gè)磁盤由4KB 的 block 組成。一個(gè)條帶,stripe,由每個(gè)數(shù)據(jù)磁盤的一個(gè)block 和校驗(yàn)盤的一個(gè)block 組成。
最常用的RAID 級(jí)別有0,1,3,5,RAID0 是劃分為條帶,由于沒有校驗(yàn)區(qū),所以無容余糾錯(cuò)能力。RAID1 是簡單地鏡像,所有數(shù)據(jù)復(fù)制在另一粒盤上,RAID 1 很安全,但是需要兩倍的磁盤容量。RAID 3 類似 RAID 4, 專門一個(gè)盤用于校驗(yàn),但是RAID 3 的條帶太小,一個(gè)讀寫操作就可能跨陣列內(nèi)所有的磁盤, RAID 3 適合單個(gè)大文件很高的速率要求,例如超級(jí)計(jì)算,和圖像處理,但對(duì)于多用戶應(yīng)用產(chǎn)生的不相關(guān)的讀寫表現(xiàn)很差。而RAID 4 改進(jìn)了這一點(diǎn)。
RAID 5 類似 RAID 4,但是在所有磁盤中循環(huán)安排數(shù)據(jù)區(qū)和校驗(yàn)區(qū),第一個(gè)條帶的校驗(yàn)區(qū)在第一塊盤,第二個(gè)條帶的校驗(yàn)在第二個(gè)盤,等等。主要的優(yōu)點(diǎn)是防止校驗(yàn)盤成為瓶頸。缺點(diǎn)是在RAID 5 array 中增加一個(gè)盤很不實(shí)際,擴(kuò)容時(shí)需要添加一個(gè)新陣列。例如,如果在RAID 5 實(shí)施時(shí)每個(gè)陣列使用7 個(gè)disk,通常擴(kuò)容時(shí)每次增加7 個(gè)盤。
大多數(shù)用于UNIX 和Windows 環(huán)境的外設(shè)避免使用RAID 4,因?yàn)槭褂猛ㄓ玫奈募到y(tǒng),校驗(yàn)盤會(huì)成為瓶頸。另一方面,WAFL file system, 利用其隨意寫的布局寫磁盤,使用RAID4 的磁盤卻十分高效。
以UNIX 的文件系統(tǒng)為例說明WAFL 如何與通用的文件系統(tǒng)不同。通常的UNIX 使用FFS(the Berkeley Fast File System) ,該文件系統(tǒng)的設(shè)計(jì)針對(duì)一次寫一個(gè)文件進(jìn)行優(yōu)化,所以不同文件的塊寫到磁盤上很分散的位置。FFS 在陣列里寫入3 個(gè)不相關(guān)的文件時(shí)的塊分配的位置,每個(gè)數(shù)據(jù)盤寫只有2 次,而校驗(yàn)盤卻要寫6 次。更致命的是,校驗(yàn)位的寫十分分散,導(dǎo)致很長的尋道時(shí)間。
這是由于 Berkeley FFS 不知道下層的RAID 4 的布局,往往會(huì)生成在數(shù)據(jù)盤上分散的磁盤寫請求,導(dǎo)致校驗(yàn)盤過長的尋道時(shí)間。WAFL 的寫方式被設(shè)計(jì)成最小化校驗(yàn)盤的尋道時(shí)間。WAFL 總是把寫相鄰條帶的block,減少校驗(yàn)盤的尋道時(shí)間。WAFL 還盡可能地寫同一條帶的多個(gè)塊,進(jìn)一步減少校驗(yàn)盤的流量。
15.4.3.7 Appliance 方式的優(yōu)點(diǎn)
通過Appliance 方式的設(shè)計(jì),以網(wǎng)絡(luò)為服務(wù)器提供數(shù)據(jù),使得NetApp 可以提供一種傳統(tǒng)的存儲(chǔ)方式,以及基于UNIX 和NT 的系統(tǒng)無以比擬的存儲(chǔ)管理
這些特點(diǎn),以及Appliance方式帶來的高性能和高可用性,使得Filer成為十分易用且性價(jià)比很高的產(chǎn)品。