《文件系統(tǒng)fsck提速方案》要點(diǎn):
本文介紹了文件系統(tǒng)fsck提速方案,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
朱穎航(個(gè)人微信號(hào):casualfisher),北京靈犀智造科技有限公司(www.linkedsee.com)技術(shù)總監(jiān),設(shè)計(jì)參與了百度智能數(shù)據(jù)中心項(xiàng)目,集中在智能供電方向, 負(fù)責(zé)了硬件感知項(xiàng)目,參與設(shè)計(jì)服務(wù)器硬件采集及管理工具, 并基于采集數(shù)據(jù)進(jìn)行故障及使用趨勢(shì)預(yù)測(cè),曾設(shè)計(jì)和開發(fā)重復(fù)數(shù)據(jù)刪除文件系統(tǒng), 參與多個(gè)存儲(chǔ)相關(guān)的開源項(xiàng)目(mhvtl, zfs on linux等)
在分布式文件系統(tǒng)(例如HDFS)中,當(dāng)出現(xiàn)異常掉電、加電恢復(fù)后,通常存儲(chǔ)系統(tǒng)會(huì)檢測(cè)內(nèi)部數(shù)據(jù)的一致性,檢測(cè)分為兩個(gè)層次
必要時(shí)進(jìn)行根據(jù)erasure coding進(jìn)行數(shù)據(jù)恢復(fù).
根據(jù)阿姆達(dá)爾定律,存儲(chǔ)系統(tǒng)恢復(fù)的整體時(shí)間由串行部分最慢的節(jié)點(diǎn)決定.
在 ec 恢復(fù)的過程中,通常是多個(gè)節(jié)點(diǎn),多個(gè)設(shè)備之間并行恢復(fù),系統(tǒng)的瓶頸通常受限于第一階段本地文件系統(tǒng)的 fsck 過程.
在類 HDFS 中,通常使用 SATA 硬盤存儲(chǔ)數(shù)據(jù),SATA 硬盤的磁盤容量隨著新的SMR、HAMR技術(shù)的出現(xiàn)而越來越大,而傳輸?shù)乃俾誓壳笆芟抻?SATA3.0定義的最大速率(6Gb/s,實(shí)際使用中通常順序讀穩(wěn)定在 100-150MB/s 之間),因此提升文件系統(tǒng)的fsck速度就顯得愈發(fā)重要,本文中以 ext4 文件系統(tǒng)為例,列舉除了文件系統(tǒng) fsck 提速的若干方案.
Ted 在 e2fsprogs版本1.41.9中已經(jīng)完成了針對(duì) ext4 的 fsck 優(yōu)化工作,而公司目前線上的 fsck 版本為 1.41.12 ,已經(jīng)加入了這個(gè)優(yōu)化.
從優(yōu)化fs check本身考慮,《ffsck: The Fast File System Checker》中提出了對(duì)于ext3磁盤數(shù)據(jù)格式進(jìn)行修改,在每個(gè)block group內(nèi)部加入專為元數(shù)據(jù)存儲(chǔ)的空間,以優(yōu)化fsck中磁盤對(duì)于元數(shù)據(jù)的隨機(jī)尋址(e2fsck中 phase1/掃描文件間接索引占據(jù)了總時(shí)間的90%以上),進(jìn)而提高性能,由于需要修改磁盤上數(shù)據(jù)存儲(chǔ)的格式,所以此方法不可行.
建議如果需要優(yōu)化fscheck本身,下一步可以考慮和應(yīng)用類型結(jié)合起來進(jìn)行(例如找到應(yīng)用關(guān)心的文件進(jìn)行檢查,不關(guān)心的直接跳過,對(duì)于hadoop hdfs之類的數(shù)據(jù)存儲(chǔ),目錄和文件均有用,因此此方法不適合),并且在mkfs的時(shí)候,使用bigalloc和inline data的功能,大文件保證其連續(xù)性,減少元數(shù)據(jù)存儲(chǔ)量,小文件可以直接合并入 inode,減少 seek 的程度,不過這種方案并未從根本上解決問題,隨著文件系統(tǒng)碎片的增加,可能抵消掉帶來的性能提升.
ZFS,BTRFS 等由于采用了 COW 機(jī)制,對(duì)寫入磁盤的數(shù)據(jù)不會(huì)再進(jìn)行修改,保證存盤數(shù)據(jù)的穩(wěn)定性,在恢復(fù)之后可以立即對(duì)外提供服務(wù),將對(duì)斷電時(shí)刻的數(shù)據(jù)檢查作為一個(gè)優(yōu)先級(jí)較低的操作(ZFS為scrub操作),可以和文件系統(tǒng)的正常操作并行執(zhí)行,一旦有正常的讀寫等操作,將會(huì)停止 fsck 過程,減少對(duì)于應(yīng)用性能的影響.
由于數(shù)據(jù)庫等系統(tǒng)需要盡可能的在線提供服務(wù),所以我們希望能夠盡可能的縮短宕機(jī)后的啟動(dòng)時(shí)間.所以,如果可以實(shí)現(xiàn) online fsck 的功能,則可以盡可能的縮短系統(tǒng)啟動(dòng)的時(shí)間,同時(shí)保證文件系統(tǒng)不被破壞.
目前已知的可以進(jìn)行online fsck的文件系統(tǒng)是 zfs, ffs, btrfs.
Ted 給出的建議是可以考慮在分配磁盤塊的時(shí)候在相應(yīng)的 block group 上添加相應(yīng)的標(biāo)記,表明這個(gè)block group 正在進(jìn)行磁盤塊的分配,在出現(xiàn)宕機(jī)后,這個(gè) block group 的數(shù)據(jù)只進(jìn)行讀操作,所有寫操作都會(huì)被映射到其他的 block group中.這樣可以盡可能的保證文件系統(tǒng)的一致性(來自ext4 workshop總結(jié)).
鑒于kernel mainline已經(jīng)明確表明不會(huì)接受ext4 snapshot的 patch,所以基于 fs 的 snapshot 進(jìn)行 online fsck無法進(jìn)行,可以嘗試結(jié)合比較成熟的 lvm 快照為 fsck 提速.
Andreas的回復(fù): *
When you write about online e2fsck, what do you mean exactly?? It is already possible
with LVM to create a read-only snapshot of a device and run read-only e2fsck. This
works because the LVM snapshot is hooked to ext4 to freeze the filesystem and flush
the journal before the snapshot is done.
Ext4 snapshots vs lvm snapshots
*
思路:
遇到宕機(jī)/掉電導(dǎo)致的 fsck 時(shí)間過長時(shí),將已有的分區(qū)轉(zhuǎn)換為 lvm 分區(qū),然后在lvm快照的基礎(chǔ)上進(jìn)行 online fsck,此時(shí)文件系統(tǒng)可以掛載供應(yīng)用讀取(讀寫未出錯(cuò)的文件). 優(yōu)勢(shì):從根本上免除了 fsck 帶來帶來的時(shí)延.
劣勢(shì)/待解決問題
google 內(nèi)部使用 ext4 時(shí)采用了no journal的掛載選項(xiàng),說明在宕機(jī)、斷電過程后并不進(jìn)行 fsck,而是通過上層應(yīng)用對(duì)于數(shù)據(jù)的冗余保證數(shù)據(jù)的一致性.
思路:
如果上層是 HDFS 之類的分布式文件系統(tǒng),可以考慮這種思路,但需要注意到副本在同一個(gè)機(jī)房?jī)?nèi),機(jī)房斷電的情況.
針對(duì)以上的思路涉及如下實(shí)驗(yàn)驗(yàn)證:
測(cè)試:
測(cè)試環(huán)境:ST4000NM0053-1C1 2TB的硬盤+hadoop hdfs 寫入 1.3TB 數(shù)據(jù)(共個(gè) 38949 文件,331 個(gè)目錄)
結(jié)果:測(cè)試1 fsck 3次平均時(shí)間12s.測(cè)試2 fsck 3次平均時(shí)間40s.
從測(cè)試結(jié)果可見,如果不能使用方法3中上層屏蔽fsck或者方法2中使用lvm及COW文件系統(tǒng)的情況下,切換到使用了bigalloc和inline data的新版內(nèi)核為比較穩(wěn)妥的解決方案.
文章出處:互聯(lián)網(wǎng)運(yùn)維雜談
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/4481.html