分布式文件系統(tǒng)近來(lái)沒(méi)有什么新聞,因?yàn)槭褂盟鼈兊闹饕枪竞徒逃W(wǎng)絡(luò),總共只有幾千個(gè)用戶(hù)。從概念上來(lái)說(shuō),對(duì)于這樣的系統(tǒng)如何適合開(kāi)放源碼文件系統(tǒng)這個(gè)領(lǐng)域,還并非總是很清楚。Open Andrew File System (OpenAFS) 是對(duì) Network File System (NFS) 的成熟的替代方案,它能適應(yīng)大量的用戶(hù),并能減輕管理的痛苦。
用戶(hù)對(duì)文件系統(tǒng)的概念有兩種理解。第一種是組織文件的方式、包含文件的目錄,以及保存目錄結(jié)構(gòu)的分區(qū)。第二種認(rèn)為文件系統(tǒng)是文件組織和映射到原始材料的方式。當(dāng)然,在這兩者之間還存在很多層,如虛擬文件系統(tǒng) (VFS) 層和實(shí)際存儲(chǔ)管理例程,但是就管理用戶(hù)可用的結(jié)構(gòu)化信息而言,超級(jí)用戶(hù)看一下系統(tǒng)內(nèi)部,并對(duì)內(nèi)核的最深處有一些了解是很有意義的。
原始材料可能由 RAM 或硬盤(pán)組成,但是不管是哪種情況,文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)都是組織由硬件制造商格式化了的扇區(qū)和字節(jié)。盡管這種劃分相當(dāng)粗糙,用戶(hù)在他們的工作生活中還是能夠十分愉快地接受這種劃分。提高 —— 比如說(shuō),用戶(hù)訪問(wèn)比特定容量大的文件的速度 —— 的工具是可用的。幫助重新組織目錄和文件的工具也是可用的,但是這些工具使我們遠(yuǎn)離比特、字節(jié)和扇區(qū)。
文件系統(tǒng)元概念 這種總體區(qū)分的一個(gè)經(jīng)典例子就是 FreeBSD —— 回溯到 BSD UNIX® 時(shí)代 —— 用 UNIX File System V2 (UFS2) 來(lái)組織磁盤(pán)上的數(shù)據(jù)而用 Flash File System (FFS) 來(lái)把文件組織成目錄并最優(yōu)化目錄訪問(wèn)的方式。Linux® 系統(tǒng)有些不同,因?yàn)?Linux 本來(lái)就容許有不限于一個(gè)或兩個(gè)的文件系統(tǒng)。因此,VFS 層使 Linux 用戶(hù)可以添加新的文件系統(tǒng)支持而不必過(guò)于擔(dān)心 Linux 管理存儲(chǔ)器的方式。
當(dāng)我談到進(jìn)一步的區(qū)分,如靜態(tài)和日志文件系統(tǒng)時(shí),我要強(qiáng)調(diào)一致性以及某種程度上的文件系統(tǒng)內(nèi)容的安全性。同樣,用 BSD UNIX 時(shí)代用來(lái)看問(wèn)題的術(shù)語(yǔ)來(lái)說(shuō), 靜態(tài)和日志 文件系統(tǒng)與 UNIX File System (UFS) 組織文件并確保其安全的方式有關(guān)。雖然 Linux 文件系統(tǒng)從 Journal File System (JFS) 開(kāi)始就包含了日志文件系統(tǒng),但是下一代文件系統(tǒng) (XFS) 和早期的 ReiserFS 也被改造成對(duì)其可用,還有一個(gè)不管是技術(shù)媒體還是公司宣傳都沒(méi)有過(guò)多提及的領(lǐng)域就是分布式文件系統(tǒng)。
從 NFS 所學(xué)到的 這種情況與這樣的現(xiàn)實(shí)有關(guān):如今,使網(wǎng)絡(luò)范圍內(nèi)的文件系統(tǒng)層變成對(duì)相當(dāng)多的用戶(hù)來(lái)說(shuō)通過(guò) TCP 或 User Datagram Protocol (UDP) 就可用,這種做法是非常輕率的。圍繞 NFS V3 之前版本的恐怖場(chǎng)景使許多管理人員不愿管理哪怕只有幾十個(gè)用戶(hù)的網(wǎng)絡(luò)。此外,由極快的主板架構(gòu)支持的多處理器架構(gòu)的出現(xiàn),似乎使得分布式文件系統(tǒng)問(wèn)題變得不太重要。 速度似乎是由硬件保證的,而不是由智能實(shí)現(xiàn)的分布式系統(tǒng)保證的。由于分布式文件系統(tǒng)往往要依賴(lài)于底層的文件系統(tǒng)實(shí)現(xiàn) —— 例如,已有的 ext2、ext3 和 ReiserFS 文件系統(tǒng)驅(qū)動(dòng)程序 —— 分布式文件系統(tǒng)好像僅限于大的大學(xué)網(wǎng)絡(luò)和臨時(shí)的科研和公司網(wǎng)絡(luò)這些領(lǐng)域。
那么,分布式文件系統(tǒng)是否是我們所提及的兩層之上的第三層呢?如今聯(lián)網(wǎng)過(guò)程中的一個(gè)重要問(wèn)題就是使異構(gòu)的網(wǎng)絡(luò)合作(Samba 是一個(gè)很好的例子)。但是您要明白,今天在文件系統(tǒng)領(lǐng)域有三家主要制造商:Microsoft® Windows®文件系統(tǒng)系列(FAT16、FAT32 和 NTFS 文件系統(tǒng));Apple Mac OS X (HFS+);以及本機(jī) Linux 日志文件系統(tǒng)(主要是 ReiserFS 和 ext3)。Samba 幫助使 Windows 和 Linux 文件系統(tǒng)合作,但是它并沒(méi)有使管理人員對(duì)所有主要文件系統(tǒng)上的訪問(wèn)都同樣地快速和容易。
有人可能會(huì)引用 NFS V4 作為解決該問(wèn)題的一次嘗試,但是由于處理 NFS V4 的 Request for Comments (RFC) 3530 才發(fā)布兩年,而且針對(duì)內(nèi)核 V2.6 的 NFS4 還相當(dāng)新,我暫不推薦使用它做生產(chǎn)服務(wù)器。Fedora 核心 2 和 3 提供了 NFS4 補(bǔ)丁和 NFS4 實(shí)用程序,這些實(shí)用程序演示了開(kāi)發(fā)人員完成的一些印象非常深刻的過(guò)程,因?yàn)?NFS 強(qiáng)制可憐的網(wǎng)絡(luò)管理人員,打開(kāi)更多的端口并為導(dǎo)出到用戶(hù)的每個(gè)名稱(chēng)空間配置各自的客戶(hù)機(jī)。RFC 3530 解決了大部分的安全問(wèn)題。還有,NFS 目錄必須單獨(dú)安裝。您可以用統(tǒng)一的 sign-on 和 Kerbero 來(lái)保證安全,但是那也需要做很多工作。
OpenAFS 基本原理 OpenAFS 試圖免除安裝和管理用于使不同文件系統(tǒng)合作的軟件時(shí)的痛苦。OpenAFS 也能使不同文件系統(tǒng)更有效地合作。盡管 UNIX 及其引人注目的后繼者 Plan 9 的最初目標(biāo)是文件,但是商業(yè)現(xiàn)實(shí)指出,與其徹底重構(gòu)現(xiàn)代的網(wǎng)絡(luò)文件系統(tǒng),不如添加另一個(gè)分布式文件系統(tǒng)層。
1983 年 Carnegie Mellon University 的編程人員開(kāi)發(fā)了 AFS。此后不久,該大學(xué)成立了一家叫做 Transarc 的公司來(lái)出售基于 AFS 的服務(wù)。1998 年 IBM 收購(gòu)了 Transarc,并使 AFS 成為一個(gè)開(kāi)放源碼產(chǎn)品,叫做 OpenAFS。但是,故事并未就此結(jié)束,因?yàn)?OpenAFS 衍生了其他的分布式文件系統(tǒng),如 Coda 和 Arla,這些我將在后面談到。存在針對(duì)所有主要操作系統(tǒng)的各種客戶(hù)機(jī),及大量的過(guò)時(shí)文檔資料。Gentoo.org 為使 OpenAFS 對(duì) Linux 用戶(hù)可用做出了特別貢獻(xiàn),即使其他機(jī)構(gòu)在需要分布式文件系統(tǒng)時(shí)似乎仍然是指 NFS。
OpenAFS 架構(gòu) OpenAFS 是圍繞一組叫做 cell 的文件服務(wù)器組織的。每個(gè)服務(wù)器的標(biāo)識(shí)通常是隱藏在文件系統(tǒng)中的。從 AFS 客戶(hù)機(jī)登錄的用戶(hù)將分辨不出他們?cè)谀膫€(gè)服務(wù)器上運(yùn)行,因?yàn)閺挠脩?hù)的觀點(diǎn)來(lái)看,他們想在有可識(shí)別的 UNIX 文件系統(tǒng)語(yǔ)義的單個(gè)系統(tǒng)上運(yùn)行。文件系統(tǒng)內(nèi)容通常都是跨 cell 復(fù)制,以便一個(gè)硬盤(pán)的失效不會(huì)損害 OpenAFS 客戶(hù)機(jī)上的運(yùn)行。OpenAFS 需要高達(dá) 1 GB 的大容量客戶(hù)機(jī)緩存,以允許訪問(wèn)經(jīng)常使用的文件。它還是一個(gè)十分安全的基于 Kerbero 的系統(tǒng),它使用訪問(wèn)控制列表 (ACL) 以便可以進(jìn)行細(xì)粒度的訪問(wèn),這不是基于通常的 Linux 和 UNIX 安全模型。
緩存管理器碰巧是 OpenAFS 的一部分,很奇怪,它只作為底層文件系統(tǒng)與 ext2 一起運(yùn)行。除緩存管理器之外,OpenAFS 表層的基本結(jié)構(gòu)很像現(xiàn)代的 NFS 實(shí)現(xiàn)。但是,基本架構(gòu)卻一點(diǎn)都不像,而且必須慎重看待它的任何并行。對(duì)那些仍喜歡使用 NFS,但是又想利用 OpenAFS 程序的人來(lái)說(shuō),可以使用所謂的 NFS/AFS 翻譯器。只要 OpenAFS 客戶(hù)機(jī)被配置為 NFS 服務(wù)器機(jī)器,您就應(yīng)該能夠享受這兩種文件系統(tǒng)的優(yōu)點(diǎn)。
OpenAFS 如何進(jìn)行管理 NFS 是位置無(wú)關(guān)的,它把本地目錄映射到遠(yuǎn)程文件系統(tǒng)位置。OpenAFS 對(duì)用戶(hù)隱藏了文件位置。因?yàn)榭赡芩械脑次募家宰x寫(xiě)副本的形式保存在復(fù)制到的不同文件服務(wù)器位置上,必須保持復(fù)制的副本同步。為此要使用一項(xiàng)稱(chēng)作 Ubik 的技術(shù),它源于單詞“ubiquitous(無(wú)所不在)”,是東歐拼寫(xiě)法。Ubik 過(guò)程使 AFS 文件系統(tǒng)上的文件、目錄和卷 (volume) 保持同步,但是通常運(yùn)行三個(gè)以上文件服務(wù)器進(jìn)程的系統(tǒng)獲益最多。系統(tǒng)管理人員可以將一個(gè) AFS 站點(diǎn)的幾個(gè) AFS cell 分組 —— 這個(gè)以前的縮寫(xiě)詞 AFS 已經(jīng)被保留在 OpenAFS 文件系統(tǒng)的語(yǔ)義中了。管理人員將決定 AFS cell 的數(shù)目,以及 cell 使存儲(chǔ)器和文件對(duì)站點(diǎn)內(nèi)的其他 AFS cell 可用的程度。
分區(qū)、卷和目錄 AFS 管理人員把 cell 劃分為所謂的卷。雖然卷可以隨硬盤(pán)分區(qū)協(xié)同擴(kuò)展 (co-extensive),但大多數(shù)管理人員都不會(huì)將整個(gè)分區(qū)只分為一個(gè)卷。AFS 卷實(shí)際上是由一個(gè)單獨(dú)的、稱(chēng)作 Volume Manager 的 UNIX 類(lèi)型的進(jìn)程管理的。您可以以一種常見(jiàn)的方式從 UNIX 文件系統(tǒng)目錄安裝卷。但是,您可以將 AFS 卷從一個(gè)文件服務(wù)器移動(dòng)到另一個(gè)文件服務(wù)器 —— 同樣是由一個(gè) UNIX 類(lèi)型的進(jìn)程來(lái)管理的 —— 但是 UNIX 目錄不能從一個(gè)分區(qū)實(shí)際地移動(dòng)到另一個(gè)分區(qū)上。AFS 通過(guò) Volume Location Manager 自動(dòng)跟蹤卷和目錄的位置,并留意復(fù)制的卷和目錄。因此,每當(dāng)文件服務(wù)器非預(yù)期地停止操作,用戶(hù)根本無(wú)需擔(dān)心,因?yàn)?AFS 會(huì)把用戶(hù)切換到另一個(gè)文件服務(wù)器機(jī)器上的復(fù)制卷,而用戶(hù)可能都不會(huì)注意到。
用戶(hù)從來(lái)不對(duì) AFS 服務(wù)器上的文件進(jìn)行操作。他們操作已經(jīng)由客戶(hù)端緩存管理器從文件服務(wù)器中取出的文件。Cache Manager 是居留在客戶(hù)機(jī)操作系統(tǒng)內(nèi)核中的一只非常有趣的猛獸。(您可以在 2.4 版本以上的任何內(nèi)核中運(yùn)行 Cache Manager)。
Cache Manager Cache Manager 可以響應(yīng)本地應(yīng)用程序的請(qǐng)求,來(lái)跨 AFS 文件系統(tǒng)取出文件。當(dāng)然,如果該文件是經(jīng)常更改的源文件,那么文件存在于幾個(gè)復(fù)制版本中可能不太好。因?yàn)橛脩?hù)很可能要頻繁地更改經(jīng)常被請(qǐng)求的源文件,所以您會(huì)遇到兩個(gè)問(wèn)題:首先,文件很可能被保存在客戶(hù)機(jī)緩存內(nèi),而同時(shí)還保存在幾個(gè)文件服務(wù)器機(jī)器上的幾個(gè)復(fù)制卷內(nèi);然后,Cache Manager 不得不更新所有的卷。文件服務(wù)器進(jìn)程把文件發(fā)送到客戶(hù)機(jī)緩存內(nèi)并隨其附帶一個(gè)回調(diào),以便系統(tǒng)可以處理發(fā)生在其他地方的任何更改。如果用戶(hù)更改了緩存在其他地方的復(fù)制文件,原始文件服務(wù)器將會(huì)激活回調(diào),并提醒原始緩存版本它需要更新。
分布式版本控制系統(tǒng)也面臨這個(gè)經(jīng)典問(wèn)題,但是有一點(diǎn)重要的區(qū)別:分布式版本控制系統(tǒng)在斷開(kāi)時(shí)可以運(yùn)行得很好,而 AFS 文件系統(tǒng)的任一部分都不能斷開(kāi)。斷開(kāi)的 AFS 部分無(wú)法再次與原來(lái)的文件系統(tǒng)連接。失效的文件服務(wù)器進(jìn)程必須與仍在運(yùn)行的 AFS 文件服務(wù)器重新同步,但是不能添加可能在它斷開(kāi)后保存在本地的新更改。
AFS 的后代 由于一些對(duì)新文件系統(tǒng)的嘗試,AFS 已經(jīng)明顯要退出了。兩個(gè)這樣的結(jié)合了開(kāi)發(fā)人員從原始分布式文件系統(tǒng)架構(gòu)中學(xué)到的經(jīng)驗(yàn)的系統(tǒng)就是:Coda 和瑞典開(kāi)放源碼志愿者的成果 Arla。
Coda 文件系統(tǒng)是改進(jìn)原始的 AFS 系統(tǒng)的第一次嘗試。1987 年在 Carnegie Mellon University,開(kāi)發(fā)人員想要使 Coda 成為對(duì) AFS 的一次自覺(jué)的改進(jìn),當(dāng)時(shí) AFS 達(dá)到了 V2.0 版本。在上個(gè)世紀(jì) 80 年代末 90 年代初,Coda 文件系統(tǒng)首次發(fā)布了一個(gè)不同的緩存管理器:Venus。雖然 Coda 的基本功能集與 AFS 的類(lèi)似,但是 Venus 支持支持 Coda 的客戶(hù)機(jī)的連續(xù)操作,即使客戶(hù)機(jī)已經(jīng)從分布式文件系統(tǒng)斷開(kāi)了。Venus 具有與 AFS Cache Manager 完全相同的功能,即把文件系統(tǒng)任務(wù)從內(nèi)核內(nèi)部的 VFS 層取出。
Coda 服務(wù)器和 Venus 緩存管理器之間的連接故障并不總損害網(wǎng)絡(luò)功能:膝上型客戶(hù)機(jī)必須能離開(kāi)中央服務(wù)器工作。因此,Venus 把所有的更新存儲(chǔ)在客戶(hù)機(jī)修改日志內(nèi)。當(dāng)緩存管理器與中央服務(wù)器重新連接時(shí),系統(tǒng)重建客戶(hù)機(jī)修改日志,使所有的文件系統(tǒng)更新對(duì)客戶(hù)機(jī)都可用。
斷開(kāi)操作可能引起其他問(wèn)題,但是 Venus 緩存管理器說(shuō)明了分布式文件系統(tǒng)可以被擴(kuò)展,以包含比總是以連接方式運(yùn)行的網(wǎng)絡(luò)復(fù)雜得多的網(wǎng)絡(luò)。
從 1993 年起,編程人員就開(kāi)始開(kāi)發(fā) Arla,這是一個(gè)提供 OpenAFS 的 GPL 實(shí)現(xiàn)的瑞典項(xiàng)目,但是大部分的開(kāi)發(fā)和端口都發(fā)生在 1997 年以后。Arla 模仿 OpenAFS 模仿得非常好,只是 XFS 文件系統(tǒng)必須運(yùn)行在所有運(yùn)行 Arla 的操作系統(tǒng)上。Arla 已經(jīng)達(dá)到 V0.39 版本了,而且,就像 OpenAFS 一樣,運(yùn)行在所有的 BSD 流派、內(nèi)核 V2.0x 版本以上的許多 Linux 內(nèi)核以及 Sun Solaris 之上。Arla 確實(shí)為 AFS 實(shí)現(xiàn)了一個(gè)原本不在 AFS 代碼中的功能:斷開(kāi)操作。但是具體情況可能會(huì)不同,開(kāi)發(fā)人員也還沒(méi)有完成測(cè)試。
還有其他的 AFS 類(lèi)型的文件系統(tǒng),如 GPLed InterMezzo,但是它們沒(méi)有照搬 AFS 的命令行語(yǔ)義或它的架構(gòu)。開(kāi)放源碼分布式文件系統(tǒng)領(lǐng)域是非常活躍的,其他分布式文件系統(tǒng)在移動(dòng)計(jì)算領(lǐng)域得到了應(yīng)用。 |