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