亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Glusterfs之nfs模塊源碼分析(上)之nfs原理和

系統(tǒng) 2055 0

我的新浪微博: http://weibo.com/freshairbrucewoo

歡迎大家相互交流,共同提高技術(shù)。

?

一、網(wǎng)絡(luò)文件系統(tǒng)概述

?

Sun?Microsystems公司于1984年推出了一個(gè)在整個(gè)計(jì)算機(jī)工業(yè)中被廣泛接受的遠(yuǎn)程文件存取機(jī)制,它被稱為Sun的網(wǎng)絡(luò)文件系統(tǒng)(Network?File?System),或者簡稱為NFS。該機(jī)制允許在一臺(tái)計(jì)算機(jī)上運(yùn)行一個(gè)服務(wù)器,使對(duì)其上的某些或所有文件都可以進(jìn)行遠(yuǎn)程存取,還允許其他計(jì)算機(jī)上的應(yīng)用程序?qū)@些文件進(jìn)行存取。

它使我們能夠達(dá)到文件的共享。當(dāng)使用者想用遠(yuǎn)端檔案時(shí)只要用"mount"就可把remote檔案系統(tǒng)掛接在自己的檔案系統(tǒng)之下,使得遠(yuǎn)端的文件操作上和本地機(jī)器的文件沒兩樣。一個(gè)應(yīng)用程序可以打開(Open)一個(gè)遠(yuǎn)程文件以進(jìn)行存取,可以從這個(gè)文件中讀取(Read)數(shù)據(jù),向該文件中寫入(Write)數(shù)據(jù),定位(Seek)到文件中的某個(gè)指定位置(開始、結(jié)尾或者其他地方),最后當(dāng)使用完畢后關(guān)閉(Close)該文件。并且這些操作都是對(duì)編程者透明的,操作方法和對(duì)本地文件的操作方法完全一樣。

二、 NFS 協(xié)議

NFS協(xié)議使用NFS,客戶端可以透明地訪問服務(wù)器中的文件系統(tǒng),這不同于提供文件傳輸?shù)腇TP協(xié)議。FTP會(huì)產(chǎn)生文件一個(gè)完整的副本;NFS只訪問一個(gè)進(jìn)程引用文件部分,并且一個(gè)目的就是使得這種訪問透明。這就意味著任何能夠訪問一個(gè)本地文件的客戶端程序不需要做任何修改,就應(yīng)該能夠訪問一個(gè)NFS文件。NFS是一個(gè)使用SunRPC構(gòu)造的客戶端/服務(wù)器應(yīng)用程序,其客戶端通過向一臺(tái)NFS服務(wù)器發(fā)送RPC請(qǐng)求來訪問其中的文件。盡管這一工作可以使用一般的用戶進(jìn)程來實(shí)現(xiàn),即NFS客戶端可以是一個(gè)用戶進(jìn)程,對(duì)服務(wù)器進(jìn)行顯式調(diào)用,而服務(wù)器也可以是一個(gè)用戶進(jìn)程。因?yàn)閮蓚€(gè)理由,NFS一般不這樣實(shí)現(xiàn)。首先訪問一個(gè)NFS文件必須對(duì)客戶端透明,因此NFS的客戶端調(diào)用是由客戶端操作系統(tǒng)代表用戶進(jìn)程來完成的;其次,出于效率的考慮,NFS服務(wù)器在服務(wù)器操作系統(tǒng)中實(shí)現(xiàn)。如果NFS服務(wù)器是一個(gè)用戶進(jìn)程,每個(gè)客戶端請(qǐng)求和服務(wù)器應(yīng)答(包括讀和寫的數(shù)據(jù))將不得不在內(nèi)核和用戶進(jìn)程之間進(jìn)行切換,這個(gè)代價(jià)太大。第3版的NFS協(xié)議在1993年發(fā)布,下圖所示為一個(gè)NFS客戶端和一臺(tái)NFS服務(wù)器的典型結(jié)構(gòu)。?

?

Glusterfs之nfs模塊源碼分析(上)之nfs原理和協(xié)議

圖1??NFS 客戶端和 NFS 服務(wù)器的典型結(jié)構(gòu)?

(1)訪問一個(gè)本地文件還是一個(gè)NFS文件對(duì)于客戶端來說是透明的,當(dāng)文件被打開時(shí),由內(nèi)核決定這一點(diǎn)。文件被打開之后,內(nèi)核將本地文件的所有引用傳遞給名為“本地文件訪問”的框中,而將一個(gè)NFS文件的所有引用傳遞給名為“NFS客戶端”的框中。

(2)NFS客戶端通過其TCP/IP模塊向NFS服務(wù)器發(fā)送RPC請(qǐng)求,NFS主要使用UDP,最新的實(shí)現(xiàn)也可以使用TCP。

(3)NFS服務(wù)器在端口2049接收作為UDP數(shù)據(jù)包的客戶端請(qǐng)求,盡管NFS可以被實(shí)現(xiàn)為使用端口映射器,允許服務(wù)器使用一個(gè)臨時(shí)端口,但是大多數(shù)實(shí)現(xiàn)都是直接指定UDP端口2049。

(4)當(dāng)NFS服務(wù)器收到一個(gè)客戶端請(qǐng)求時(shí),它將這個(gè)請(qǐng)求傳遞給本地文件訪問例程,然后訪問服務(wù)器主機(jī)上的一個(gè)本地的磁盤文件。

(5)NFS服務(wù)器需要花一定的時(shí)間來處理一個(gè)客戶端的請(qǐng)求,訪問本地文件系統(tǒng)一般也需要一部分時(shí)間。在這段時(shí)間間隔內(nèi),服務(wù)器不應(yīng)該阻止其他客戶端請(qǐng)求。為了實(shí)現(xiàn)這一功能,大多數(shù)的NFS服務(wù)器都是多線程的——服務(wù)器的內(nèi)核中實(shí)際上有多個(gè)NFS服務(wù)器在NFS本身的加鎖管理程序中運(yùn)行,具體實(shí)現(xiàn)依賴于不同的操作系統(tǒng)。既然大多數(shù)UNIX內(nèi)核不是多線程的,一個(gè)共同的技術(shù)就是啟動(dòng)一個(gè)用戶進(jìn)程(常被稱為“nfsd”)的多個(gè)實(shí)例。這個(gè)實(shí)例執(zhí)行一個(gè)系統(tǒng)調(diào)用,使其作為一個(gè)內(nèi)核進(jìn)程保留在操作系統(tǒng)的內(nèi)核中。

6 在客戶端主機(jī)上, NFS 客戶端需要花一定的時(shí)間來處理一個(gè)用戶進(jìn)程的請(qǐng)求。 NFS 客戶端向服務(wù)器主機(jī)發(fā)出一個(gè) RPC 調(diào)用,然后等待服務(wù)器的應(yīng)答。為了給使用 NFS 的客戶端主機(jī)上的用戶進(jìn)程提供更多的并發(fā)性,在 客戶端內(nèi)核中一般運(yùn)行著多個(gè)NFS客戶端,同樣具體實(shí)現(xiàn)也依賴于操作系統(tǒng)。

三、NFS 的工作原理和服務(wù)進(jìn)程的作用

Linux 中, NFS 和服務(wù)進(jìn)程是兩個(gè)不同的概念,但它們確實(shí)緊密聯(lián)系在一起。首先,先介紹 NFS 的工作原理。

第一節(jié)、NFS 的工作原理

啟動(dòng) NFS 文件服務(wù)器時(shí), /etc/rc.local 會(huì)自動(dòng)啟動(dòng) exportfs 程序,指定可以導(dǎo)出的文件或目錄,而所能掛載的也只能是其所指定的目錄。
NFS 是基于 XDR/RPC 協(xié)議的。 XDR eXternal?Data?Representation ,即外部數(shù)據(jù)表示法)提供一種方法,把數(shù)據(jù)從一種格式轉(zhuǎn)換成另一種標(biāo)準(zhǔn)數(shù)據(jù)格式表示法,確保在不同的計(jì)算機(jī)、操作系統(tǒng)及程序語言中,所有數(shù)據(jù)代表的意義都是相同的。
RPC Remote?Procedure?Call ,遠(yuǎn)程程序調(diào)用)請(qǐng)求遠(yuǎn)程計(jì)算機(jī)給予服務(wù)。客戶機(jī)通過網(wǎng)絡(luò)傳送 RPC 到遠(yuǎn)程計(jì)算機(jī),請(qǐng)求服務(wù)。
NFS 運(yùn)用 RPC 傳送數(shù)據(jù)的方法有以下幾步:
1 )客戶送出信息,請(qǐng)求服務(wù)。
2 )客戶占位程序把客戶送出的參數(shù)轉(zhuǎn)換成 XDR 標(biāo)準(zhǔn)格式,并用系統(tǒng)調(diào)用把信息送到網(wǎng)絡(luò)上。
3 )信息經(jīng)過網(wǎng)絡(luò)送達(dá)遠(yuǎn)程主機(jī)系統(tǒng)。
4 )遠(yuǎn)程主機(jī)將接受到的信息傳給服務(wù)器占位程序。
5 )把 XDR 形式的數(shù)據(jù),轉(zhuǎn)換成符合主機(jī)端的格式,取出客戶發(fā)出的服務(wù)請(qǐng)求參數(shù),送給服務(wù)器。
6 )服務(wù)器給客戶發(fā)送服務(wù)的逆向傳送過程。

第二節(jié)、服務(wù)進(jìn)程的作用

服務(wù)進(jìn)程是系統(tǒng)在啟動(dòng)計(jì)算機(jī)后自動(dòng)運(yùn)行的程序,包括對(duì)網(wǎng)絡(luò)的連接、網(wǎng)絡(luò)協(xié)議的加載、圖形桌面的顯示、文件系統(tǒng)的加載等, Linux 系統(tǒng)中常見的進(jìn)程包括以下幾種。
(1 nfsd
根據(jù)客戶端對(duì)文件系統(tǒng)的需求,啟動(dòng)文件系統(tǒng)請(qǐng)求服務(wù)進(jìn)程,響應(yīng)客戶的請(qǐng)求,而一般文件系統(tǒng)請(qǐng)求服務(wù)進(jìn)程的數(shù)目是 8 ,這也是在 rc.local 中寫 nfsd?8?& 的原因。
(2 biod
此進(jìn)程是在 NFS 客戶端上用的,用來啟動(dòng)異步塊 I/O 服務(wù)進(jìn)程來建立 Buffer?Cache ,處理在客戶機(jī)上的讀寫。 (3 mountd
這是個(gè) RPC 服務(wù)器。啟動(dòng) rpc.mountd 服務(wù)進(jìn)程后, mountd 會(huì)讀取 /etc/xtab 查看哪一臺(tái)客戶機(jī)正在掛載哪一個(gè)文件系統(tǒng),并回應(yīng)客戶機(jī)所要掛載的路徑。
(4 inetd?Internet?services 服務(wù)進(jìn)程
當(dāng)系統(tǒng)啟動(dòng)時(shí), rc.local 會(huì)啟動(dòng) inetd 讀取 inetd.conf 配置文件,讀取網(wǎng)絡(luò)上所有服務(wù)器的地址,鏈接啟動(dòng) inetd.conf 中所有的服務(wù)器。當(dāng)客戶機(jī)請(qǐng)求服務(wù)時(shí), inetd 就會(huì)啟動(dòng)相關(guān)的服務(wù)進(jìn)程,如 user 使用 telnet 時(shí), inetd 啟動(dòng) telnetd 配合 user?telnet 的需求,其余像 ftp finger rlogin 等應(yīng)用程序, inetd 也都會(huì)啟動(dòng)相對(duì)應(yīng)的服務(wù)程序 ftpd fingerd rloingd 等。
(5 portmap 服務(wù)程序
主要功能是將 TCP/IP 通信協(xié)議的端口數(shù)字轉(zhuǎn)換成 RPC 程序數(shù)字,因?yàn)檫@樣客戶端才能進(jìn)行 RPC 調(diào)用。一般 RPC 服務(wù)器是被 inet 啟動(dòng)的,所以 portmap 必須在 inetd 之前啟動(dòng),否則無法進(jìn)行 RPC 調(diào)用。?

四、 NFS 服務(wù)器之 RPC

因?yàn)? NFS 支持的功能相當(dāng)多,而不同的功能都會(huì)使用不同的程序來啟動(dòng)。每啟動(dòng)一個(gè)功能就會(huì)啟用一些端口來傳輸數(shù)據(jù),因此 NFS 的功能所對(duì)應(yīng)的端口才沒有固定,而是采用隨機(jī)取用一些未被使用的小于 724 的端口來作為傳輸之用。但如此一來又造成客戶端要連接服務(wù)器時(shí)的困擾,因?yàn)榭蛻舳艘婪?wù)器端的相關(guān)端口才能夠聯(lián)機(jī),此時(shí)我們需要遠(yuǎn)程過程調(diào)用( RPC )的服務(wù)。 RPC 最主要的功能就是指定每個(gè) NFS 功能所對(duì)應(yīng)的端口號(hào),并且回報(bào)給客戶端,讓客戶端可以連接到正確的端口上。當(dāng)服務(wù)器在啟動(dòng) NFS 時(shí)會(huì)隨機(jī)選用數(shù)個(gè)端口,并主動(dòng)地向 RPC 注冊(cè)。因此 RPC 可以知道每個(gè)端口對(duì)應(yīng)的 NFS 功能。然后 RPC 固定使用端口 111 來監(jiān)聽客戶端的請(qǐng)求并回報(bào)客戶端正確的端口,所以可以讓 NFS 的啟動(dòng)更為容易。注意,啟動(dòng) NFS 之前,要先啟動(dòng) RPC ;否則 NFS 會(huì)無法向 RPC 注冊(cè)。另外,重新啟動(dòng) RPC 時(shí)原本注冊(cè)的數(shù)據(jù)會(huì)不見,因此 RPC 重新啟動(dòng)后它管理的所有程序都需要重新啟動(dòng)以重新向 RPC 注冊(cè)。
當(dāng)客戶端有 NFS 文件要存取請(qǐng)求時(shí),它如何向服務(wù)器端要求數(shù)據(jù)?
1 )客戶端會(huì)向服務(wù)器端的 RPC port?111 )發(fā)出 NFS 文件存取功能的詢問請(qǐng)求。
2 )服務(wù)器端找到對(duì)應(yīng)的已注冊(cè)的 NFS?daemon 端口后會(huì)回報(bào)給客戶端。
3 )客戶端了解正確的端口后,就可以直接與 NFS 守護(hù)進(jìn)程來聯(lián)機(jī)。
由于 NFS 的各項(xiàng)功能都必須要向 RPC 注冊(cè),因此 RPC 才能了解 NFS 服務(wù)的各項(xiàng)功能的 port?number PID NFS 在主機(jī)所監(jiān)聽的 IP 等,而客戶端才能夠通過 RPC 的詢問找到正確對(duì)應(yīng)的端口。即 NFS 必須要有 RPC 存在時(shí)才能成功地提供服務(wù),因此我們稱 NFS RPC?Server 的一種。事實(shí)上,有很多這樣的服務(wù)器都向 RPC 注冊(cè)。例如, NIS Network?Information?Service )也是 RPC?Server 的一種。所以如下圖所示,不論是客戶端還是服務(wù)器端,要使用 NFS 都需要啟動(dòng) RPC

?

Glusterfs之nfs模塊源碼分析(上)之nfs原理和協(xié)議

?

2?NFS RPC 服務(wù)及操作系統(tǒng)的相關(guān)性

?

?

NFS 協(xié)議從誕生到現(xiàn)在為止,已經(jīng)有多個(gè)版本,如 NFS?V2 rfc794 )及 NFS?V3 rfc1813 )(最新的版本是 V4 rfc307 ))。最早, SUN 公司曾將 NFS?V2 設(shè)計(jì)為只使用 UDP ,主要原因是當(dāng)時(shí)機(jī)器的內(nèi)存、網(wǎng)絡(luò)速度和 CPU 的影響,不得不選擇對(duì)機(jī)器負(fù)擔(dān)較輕的方式。而到了 NFS?V3 SUN 公司選擇了 TCP 作為默認(rèn)的傳輸方式。 V3 相對(duì) V2 的主要區(qū)別如下:
1 )文件尺寸: V2 最大只支持 32 位的文件大小( 4?GB ),而 V3 新增加了支持 64 位文件大小的技術(shù)
2 )文件傳輸尺寸: V3 沒有限定傳輸尺寸, V2 最多只能設(shè)定為 8?KB ,可以使用 -rsize?and?-wsize 來設(shè)定
3 )返回完整的信息: V3 增加和完善了返回錯(cuò)誤和成功信息,對(duì)于服務(wù)器的設(shè)置和管理能帶來很大好處
4 )增加了對(duì) TCP 傳輸協(xié)議的支持: V2 只提供了對(duì) UDP 的支持,在一些高要求的網(wǎng)絡(luò)環(huán)境中有很大限制; V3 增加了對(duì) TCP 的支持。 UDP 有著傳輸速度快且非連接傳輸?shù)谋憬萏匦裕窃趥鬏斏蠜]有 TCP 穩(wěn)定。當(dāng)網(wǎng)絡(luò)不穩(wěn)定或者黑客入侵時(shí)很容易使 NFS 的性能大幅度降低,甚至使網(wǎng)絡(luò)癱瘓。所以對(duì)于不同情況,網(wǎng)絡(luò)要有針對(duì)性地選擇傳輸協(xié)議。 NFS 的默認(rèn)傳輸協(xié)議是 UDP ,然而 RHEL?4.0 內(nèi)核提供了對(duì)通過 TCP NFS 的支持。要通過 TCP 來使用 NFS ,在客戶端系統(tǒng)上掛載 NFS 導(dǎo)出的文件系統(tǒng)時(shí)包括一個(gè)“ -o?tcp ”選項(xiàng)。使用 TCP 的優(yōu)點(diǎn)和缺點(diǎn)如下:
1 )被提高了的連接持久性,因此獲得的 NFS?stale?file?handles 消息就會(huì)較少。
2 )載量較大的網(wǎng)絡(luò)的性能會(huì)有所提高,因?yàn)? TCP 確認(rèn)每個(gè)分組,而 UDP 只在完成時(shí)才確認(rèn)。
3 TCP 具有擁塞控制技術(shù)( UDP 根本沒有),在一個(gè)擁塞情況嚴(yán)重的網(wǎng)絡(luò)上, UDP 分組是被首先撤銷的類型。使用 UDP 意味著,如果 NFS 正在寫入數(shù)據(jù)(單元為 8?KB 的塊),所有這 8?KB 數(shù)據(jù)都需要被重新傳輸。由于 TCP 的可靠性, 8?KB 數(shù)據(jù)中只有一部分需要重新傳輸。
4 )錯(cuò)誤檢測(cè)。當(dāng) TCP 連接中斷(由于服務(wù)器停止),客戶端就會(huì)停止發(fā)送數(shù)據(jù)而開始重新連接。 UDP 是無連接的,使用它的客戶端就會(huì)繼續(xù)給網(wǎng)絡(luò)發(fā)送數(shù)據(jù)直到服務(wù)器重新上線為止。
5 TCP 的費(fèi)用在性能方面的提高并不顯著。
5 )異步寫入特性。
6 )改進(jìn)了服務(wù)器的 mount 性能。
7 )有更好的 I/O 寫性能。
8 )更強(qiáng)的網(wǎng)絡(luò)運(yùn)行效能,使得網(wǎng)絡(luò)運(yùn)行更為有效。
9 )更強(qiáng)的災(zāi)難恢復(fù)功能。

Linux 上, UDP 是默認(rèn)使用的協(xié)議。作為服務(wù)器別無選擇。但作為客戶端,可以使用 TCP 和其他使用 TCP UNIX?NFS 服務(wù)器互聯(lián)。在局域網(wǎng)中使用 UDP 較好,因?yàn)榫钟蚓W(wǎng)有比較穩(wěn)定的網(wǎng)絡(luò)保證。使用 UDP 可以帶來更好的性能, Linux 默認(rèn)使用 V2 ,但是也可以通過 mount?option nfsvers=n 選擇。 NFS 使用 TCP/IP 提供的協(xié)議和服務(wù)運(yùn)行于 OSI 層次模型的應(yīng)用層,如表 1 所示。


1??OSI 層次模型上的 NFS

?

層????數(shù)

名????稱

功????能

1

應(yīng)用層

NFS

2

表示層

XDR

3

會(huì)話層

RPC

4

傳輸層

UDP TCP

5

網(wǎng)絡(luò)層

IP

6

數(shù)據(jù)鏈路層

?

7

物理層

Ethernet

Glusterfs之nfs模塊源碼分析(上)之nfs原理和協(xié)議


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 伊人涩| 青青青国产成人久久111网站 | 亚洲精品国产成人专区 | 68久久久久欧美精品观看 | 亚洲伦理视频 | 天天添天天射 | 久久久久久a亚洲欧洲aⅴ | 天天色综合三 | 欧美性色xo影院在线观看 | 九九精品免费观看在线 | 小h片在线播放 | 欧美综合图区亚欧综合图区 | 99热最新在线观看 | 久久精品国产一区二区三区肥胖 | 亚洲国产人成中文幕一级二级 | 波多野野结衣1区二区 | 狠狠色丁香久久婷婷综合_中 | 夜色资源站www国产在线资源 | 真实国产乱人伦在线视频播放 | 嫩草视频在线观看 | 国产精品videosse | 五月天激情亚洲婷婷在线 | 99久久综合久中文字幕 | 成人最新午夜免费视频 | 免费国产之a视频 | 激情久久免费视频 | 成人国产亚洲 | 奇米影视四色中文字幕 | 男人天堂网在线视频 | 免费看色片 | 欧美激情精品久久久久久久 | 日韩一级大毛片欧美一级 | 久久国产大片 | 天天综合网在线 | 五月色综合 | 日本在线毛片视频免费看 | 国产玖玖在线 | 999人在线精品播放视频 | 日本高清中文字幕 | 老司机午夜精品视频在线观看免费 | 一区二区三区在线 | 日本 |