為了分別保護(hù)磁盤和節(jié)點(diǎn),OneFS支持N+M:B,M代表故障磁盤的數(shù)量,B代表故障節(jié)點(diǎn)的數(shù)量。例如N+3:1,表示集群可以丟失三塊磁盤或一個(gè)節(jié)點(diǎn)而不至于數(shù)據(jù)丟失。
默認(rèn)大于18TB的集群,其保護(hù)級(jí)別是N+2:1,小于18TB的話是N+1。另外,仲裁規(guī)則規(guī)定了支持一個(gè)保護(hù)級(jí)別所要求的節(jié)點(diǎn)數(shù)量,例如N+3要求至少7個(gè)節(jié)點(diǎn),從而可以在三個(gè)節(jié)點(diǎn)發(fā)生故障時(shí)依舊維持仲裁。
數(shù)據(jù)鏡像
鏡像通過將數(shù)據(jù)拷貝到多個(gè)位置來保護(hù)磁盤上的數(shù)據(jù)。OneFS支持2~8個(gè)鏡像。你可以使用鏡像而非糾刪碼,或者混合糾刪碼和鏡像。鏡像相比糾刪碼消耗更多空間且適合要求高性能的事務(wù),比如iSCSI LUN。
如何混合糾刪碼和鏡像,在寫操作的過程中,OneFS將數(shù)據(jù)劃分成冗余的保護(hù)組。對(duì)于那些受糾刪碼保護(hù)的文件,保護(hù)組由數(shù)據(jù)塊和它們的糾刪碼組成。對(duì)于鏡像的文件,保護(hù)組包含一組數(shù)據(jù)塊的所有鏡像。OneFS可以在向磁盤寫文件的時(shí)候切換保護(hù)組的類型,通過這種動(dòng)態(tài)切換,即便發(fā)生節(jié)點(diǎn)故障導(dǎo)致無法應(yīng)用糾刪碼,OneFS也能繼續(xù)寫數(shù)據(jù)。節(jié)點(diǎn)恢復(fù)之后,OneFS自動(dòng)將鏡像保護(hù)組轉(zhuǎn)換成糾刪碼。
文件系統(tǒng)日志
日志能夠?qū)⑽募到y(tǒng)更改記錄在電池備用的NVRAM卡內(nèi),在文件系統(tǒng)發(fā)生故障后恢復(fù)系統(tǒng),比如掉電。當(dāng)節(jié)點(diǎn)重啟時(shí),日志重播(replay)文件事務(wù)來還原文件系統(tǒng)。
虛擬熱備用
當(dāng)一塊磁盤發(fā)生故障時(shí),OneFS使用保留在子池中的空間而不是一塊熱備盤,這塊保留空間被稱為虛擬熱備用。
在保護(hù)級(jí)別與存儲(chǔ)空間之間做出平衡
你可以通過設(shè)置保護(hù)級(jí)別來平衡存儲(chǔ)空間和保護(hù)需求。較高級(jí)別的保護(hù)通常相比較低級(jí)別的保護(hù)消耗更多的磁盤空間,因?yàn)樾枰獱奚臻g保護(hù) erasure code。erasure code的開銷依賴保護(hù)級(jí)別、文件大小和集群中的節(jié)點(diǎn)數(shù)量。因?yàn)镺neFS將數(shù)據(jù)和erasure code跨節(jié)點(diǎn)做條帶,所以隨著節(jié)點(diǎn)的增加,開銷也會(huì)降低。