Linux應用:NFS服務器的安裝和故障排除

本章要點

 NFS(Network File System,網絡文件系統)服務器的工作原理。

 安裝配置NFS服務器。

 NFS的圖形化配置。

 NFS的客戶端配置。

 NFS服務器的故障排除。

7.1  NFS服務器的工作原理

7.1.1  NFS簡介

NFS是分佈式計算機系統的一個組成部分,可實現在異構網絡上共享和裝配遠程文件系統。NFS由SUN公司開發,目前已經成爲文件服務的一種標準(RFC1904,RFC1813)。其最大功能是可以通過網絡讓不同操作系統的計算機可以共享數據,所以也可以將其看做是一臺文件服務器,如圖7-1所示。NFS提供了除Samba之外,Windows與Linux及UNIX與Linux之間通信的方法。

圖7-1  NFS可作爲文件服務器

客戶端PC可以掛載NFS服務器所提供的目錄並且掛載之後這個目錄看起來如同本地的磁盤分區一樣,可以使用cp、cd、mv、rm及df等與磁盤相關的命令。NFS有屬於自己的協議與使用的端口號,但是在傳送資料或者其他相關信息時候,NFS服務器使用一個稱爲“遠程過程調用”(Remote Procedure Call,RPC)的協議來協助NFS服務器本身的運行。

7.1.2  爲何使用NFS

NFS的目標是使計算機共享資源,在其發展過程中(即20世紀80年代),計算機工業飛速發展,廉價CPU及客戶端/服務器技術促進了分佈式計算環境的發展。然而當處理器價格下降時,大容量的存儲系統相對而言價格仍居高不下。因此必須採用某種機制在充分發揮單個處理器性能的同時使計算機可共享存儲資源和數據,於是NFS應運而生。

7.1.3  NFS協議

使用NFS,客戶端可以透明地訪問服務器中的文件系統,這不同於提供文件傳輸的FTP協議。FTP會產生文件一個完整的副本;NFS只訪問一個進程引用文件部分,並且一個目的就是使得這種訪問透明。這就意味着任何能夠訪問一個本地文件的客戶端程序不需要做任何修改,就應該能夠訪問一個NFS文件。

NFS是一個使用SunRPC構造的客戶端/服務器應用程序,其客戶端通過向一臺NFS服務器發送RPC請求來訪問其中的文件。儘管這一工作可以使用一般的用戶進程來實現,即NFS客戶端可以是一個用戶進程,對服務器進行顯式調用,而服務器也可以是一個用戶進程。因爲兩個理由,NFS一般不這樣實現。首先訪問一個NFS文件必須對客戶端透明,因此NFS的客戶端調用是由客戶端操作系統代表用戶進程來完成的;其次,出於效率的考慮,NFS服務器在服務器操作系統中實現。如果NFS服務器是一個用戶進程,每個客戶端請求和服務器應答(包括讀和寫的數據)將不得不在內核和用戶進程之間進行切換,這個代價太大。第3版的NFS協議在1993年發佈,圖7-2所示爲一個NFS客戶端和一臺NFS服務器的典型結構。

圖7-2  NFS客戶端和NFS服務器的典型結構

(1)訪問一個本地文件還是一個NFS文件對於客戶端來說是透明的,當文件被打開時,由內核決定這一點。文件被打開之後,內核將本地文件的所有引用傳遞給名爲“本地文件訪問”的框中,而將一個NFS文件的所有引用傳遞給名爲“NFS客戶端”的框中。

(2)NFS客戶端通過其TCP/IP模塊向NFS服務器發送RPC請求,NFS主要使用UDP,最新的實現也可以使用TCP。

(3)NFS服務器在端口2049接收作爲UDP數據包的客戶端請求,儘管NFS可以被實現爲使用端口映射器,允許服務器使用一個臨時端口,但是大多數實現都是直接指定UDP端口2049。

(4)當NFS服務器收到一個客戶端請求時,它將這個請求傳遞給本地文件訪問例程,然後訪問服務器主機上的一個本地的磁盤文件。

(5)NFS服務器需要花一定的時間來處理一個客戶端的請求,訪問本地文件系統一般也需要一部分時間。在這段時間間隔內,服務器不應該阻止其他客戶端請求。爲了實現這一功能,大多數的NFS服務器都是多線程的——服務器的內核中實際上有多個NFS服務器在NFS本身的加鎖管理程序中運行,具體實現依賴於不同的操作系統。既然大多數UNIX內核不是多線程的,一個共同的技術就是啓動一個用戶進程(常被稱爲“nfsd”)的多個實例。這個實例執行一個系統調用,使其作爲一個內核進程保留在操作系統的內核中。

(6)在客戶端主機上,NFS客戶端需要花一定的時間來處理一個用戶進程的請求。NFS客戶端向服務器主機發出一個RPC調用,然後等待服務器的應答。爲了給使用NFS的客戶端主機上的用戶進程提供更多的併發性,在客戶端內核中一般運行着多個NFS客戶端,同樣具體實現也依賴於操作系統。

NFS服務器 RPC

 

 

7.1.4  RPC

因爲NFS支持的功能相當多,而不同的功能都會使用不同的程序來啓動。每啓動一個功能就會啓用一些端口來傳輸數據,因此NFS的功能所對應的端口纔沒有固定,而是採用隨機取用一些未被使用的小於724的端口來作爲傳輸之用。但如此一來又造成客戶端要連接服務器時的困擾,因爲客戶端要知道服務器端的相關端口才能夠聯機,此時我們需要遠程過程調用(RPC)的服務。RPC最主要的功能就是指定每個NFS功能所對應的端口號,並且回報給客戶端,讓客戶端可以連接到正確的端口上。當服務器在啓動NFS時會隨機選用數個端口,並主動地向RPC註冊。因此RPC可以知道每個端口對應的NFS功能。然後RPC固定使用端口111來監聽客戶端的請求並回報客戶端正確的端口,所以可以讓NFS的啓動更爲容易。注意,啓動NFS之前,要先啓動RPC;否則NFS會無法向RPC註冊。另外,重新啓動RPC時原本註冊的數據會不見,因此RPC重新啓動後它管理的所有程序都需要重新啓動以重新向RPC註冊。

當客戶端有NFS文件要存取請求時,它如何向服務器端要求數據?

(1)客戶端會向服務器端的RPC(port 111)發出NFS文件存取功能的詢問請求。

(2)服務器端找到對應的已註冊的NFS daemon端口後會回報給客戶端。

(3)客戶端了解正確的端口後,就可以直接與NFS守護進程來聯機。

由於NFS的各項功能都必須要向RPC註冊,因此RPC才能瞭解NFS服務的各項功能的port number、PID和NFS在主機所監聽的IP等,而客戶端才能夠通過RPC的詢問找到正確對應的端口。即NFS必須要有RPC存在時才能成功地提供服務,因此我們稱NFS爲RPC Server的一種。事實上,有很多這樣的服務器都向RPC註冊。例如,NIS(Network Information Service)也是RPC Server的一種。所以如圖7-3所示,不論是客戶端還是服務器端,要使用NFS都需要啓動RPC。

圖7-3  NFS與RPC服務及操作系統的相關性

NFS協議從誕生到現在爲止,已經有多個版本,如NFS V2(rfc794)及NFS V3(rfc1813)(最新的版本是V4(rfc307))。最早,SUN公司曾將NFS V2設計爲只使用UDP,主要原因是當時機器的內存、網絡速度和CPU的影響,不得不選擇對機器負擔較輕的方式。而到了NFS V3,SUN公司選擇了TCP作爲默認的傳輸方式。V3相對V2的主要區別如下。

(1)文件尺寸。

V2最大隻支持32位的文件大小(4 GB),而V3新增加了支持64位文件大小的技術。

(2)文件傳輸尺寸。

V3沒有限定傳輸尺寸,V2最多隻能設定爲8 KB,可以使用-rsize and -wsize來設定。

(3)返回完整的信息。

V3增加和完善了返回錯誤和成功信息,對於服務器的設置和管理能帶來很大好處。

(4)增加了對TCP傳輸協議的支持。

V2只提供了對UDP的支持,在一些高要求的網絡環境中有很大限制;V3增加了對TCP的支持。UDP有着傳輸速度快且非連接傳輸的便捷特性,但是在傳輸上沒有TCP穩定。當網絡不穩定或者黑客入侵時很容易使NFS的性能大幅度降低,甚至使網絡癱瘓。所以對於不同情況,網絡要有針對性地選擇傳輸協議。NFS的默認傳輸協議是UDP,然而RHEL 4.0內核提供了對通過TCP的NFS的支持。要通過TCP來使用NFS,在客戶端系統上掛載NFS導出的文件系統時包括一個“-o tcp”選項。使用TCP的優點和缺點如下。

 被提高了的連接持久性,因此獲得的NFS stale file handles消息就會較少。

 載量較大的網絡的性能會有所提高,因爲TCP確認每個分組,而UDP只在完成時才確認。

 TCP具有擁塞控制技術(UDP根本沒有),在一個擁塞情況嚴重的網絡上,UDP分組是被首先撤銷的類型。使用UDP意味着,如果NFS正在寫入數據(單元爲8 KB的塊),所有這8 KB數據都需要被重新傳輸。由於TCP的可靠性,8 KB數據中只有一部分需要重新傳輸。

 錯誤檢測。當TCP連接中斷(由於服務器停止),客戶端就會停止發送數據而開始重新連接。UDP是無連接的,使用它的客戶端就會繼續給網絡發送數據直到服務器重新上線爲止。

 TCP的費用在性能方面的提高並不顯著。

(5)異步寫入特性。

(6)改進了服務器的mount性能。

(7)有更好的I/O寫性能。

(8)更強的網絡運行效能,使得網絡運行更爲有效。

(9)更強的災難恢復功能。

在Linux上,UDP是默認使用的協議。作爲服務器別無選擇。但作爲客戶端,可以使用TCP和其他使用TCP的UNIX NFS服務器互聯。在局域網中使用UDP較好,因爲局域網有比較穩定的網絡保證。使用UDP可以帶來更好的性能,Linux默認使用V2,但是也可以通過mount option的nfsvers=n選擇。NFS使用TCP/IP提供的協議和服務運行於OSI層次模型的應用層,如表7-1所示。

表7-1  OSI層次模型上的NFS

層    數

名    稱

功    能

1

應用層

NFS

2

表示層

XDR

3

會話層

RPC

4

傳輸層

UDP,TCP

5

網絡層

IP

6

數據鏈路層

 

7

物理層

Ethernet

更多的NFS相關協議信息可以參考如下網頁。

(1)http://www.faqs.org/rfcs/rfc794.html

(2)http://www.tldp.org/HOWTO/NFS-HOWTO/index.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章